/* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ var LMV; /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./extensions/CompGeom/fuzzy-math.js": /*!*******************************************!*\ !*** ./extensions/CompGeom/fuzzy-math.js ***! \*******************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TOL: () => (/* binding */ TOL),\n/* harmony export */ isEqual: () => (/* binding */ isEqual),\n/* harmony export */ isZero: () => (/* binding */ isZero)\n/* harmony export */ });\n\nconst TOL = 1e-6;\n\nfunction isZero(f) {\n return Math.abs(f) < TOL;\n}\n\nfunction isEqual(a, b) {\n return isZero(a - b);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9leHRlbnNpb25zL0NvbXBHZW9tL2Z1enp5LW1hdGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNPLE1BQU1BLEdBQUcsR0FBRyxJQUFJOztBQUVoQixTQUFTQyxNQUFNQSxDQUFDQyxDQUFDLEVBQUU7RUFDdEIsT0FBT0MsSUFBSSxDQUFDQyxHQUFHLENBQUNGLENBQUMsQ0FBQyxHQUFHRixHQUFHO0FBQzVCOztBQUVPLFNBQVNLLE9BQU9BLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQzFCLE9BQU9OLE1BQU0sQ0FBQ0ssQ0FBQyxHQUFHQyxDQUFDLENBQUM7QUFDeEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9leHRlbnNpb25zL0NvbXBHZW9tL2Z1enp5LW1hdGguanM/ZDIwMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IGNvbnN0IFRPTCA9IDFlLTY7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNaZXJvKGYpIHtcclxuICAgIHJldHVybiBNYXRoLmFicyhmKSA8IFRPTDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xyXG4gICAgcmV0dXJuIGlzWmVybyhhIC0gYik7XHJcbn0iXSwibmFtZXMiOlsiVE9MIiwiaXNaZXJvIiwiZiIsIk1hdGgiLCJhYnMiLCJpc0VxdWFsIiwiYSIsImIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./extensions/CompGeom/fuzzy-math.js\n "); /***/ }), /***/ "./extensions/CompGeom/point-list-3d.js ": /*!**********************************************!*\ !*** ./extensions/CompGeom/point-list-3d.js ***! \**********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ UniquePointList3D: ()=> (/* binding */ UniquePointList3D)\n/* harmony export */ });\n/* harmony import */ var _fuzzy_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fuzzy-math */ \"./extensions/CompGeom/fuzzy-math.js\");\n\n\n\nconst _tmp = {\n x: 0,\n y: 0,\n z: 0\n};\n\nclass UniquePointList3D {\n\n constructor(getVertex, bbox, precisionTolerance) {\n\n this.getVertex = getVertex;\n this.bbox = bbox;\n this.boxSize = this.bbox.getSize().length();\n\n if (!precisionTolerance) {\n precisionTolerance = _fuzzy_math__WEBPACK_IMPORTED_MODULE_0__.TOL;\n }\n if (precisionTolerance > 0) {\n //Input is in model units, e.g. if model is in feet,\n //precision tolerance has to be in feet\n this.precisionTolerance = precisionTolerance;\n this.scale = 1.0 / this.precisionTolerance;\n } else {\n //If negative, input precision is treated as relative to bounding box size\n this.precisionTolerance = -precisionTolerance * this.boxSize;\n this.scale = 1.0 / this.precisionTolerance;\n }\n\n this.snapBaseX = this.bbox.min.x; ///- 0.5 * this.precisionTolerance;\n this.snapBaseY = this.bbox.min.y; //- 0.5 * this.precisionTolerance;\n this.snapBaseZ = this.bbox.min.z; //- 0.5 * this.precisionTolerance;\n\n this.xymap = {};\n }\n\n findOrAddPoint(px, py, pz, id) {\n\n //Snap the vertex to our desired granularity\n let x = 0 | /*Math.round*/(px - this.snapBaseX) * this.scale;\n let y = 0 | /*Math.round*/(py - this.snapBaseY) * this.scale;\n let z = 0 | /*Math.round*/(pz - this.snapBaseZ) * this.scale;\n\n //Find the nearest snapped vertex or create new\n let v;\n let minDist = Infinity;\n //Look in the 27 cube area surrounding the vertex\n for (let i = x - 1; i <=x + 1; i++) {\n let mx=t his.xymap[i];\n if (!mx)\n continue;\n\n for (let j=y - 1; j <=y + 1; j++) {\n let my=m x[j];\n if (!my)\n continue;\n\n for (let k=z - 1; k <=z + 1; k++) {\n\n let tmpi=m y[k];\n if (tmpi===u ndefined)\n continue;\n\n this.getVertex(tmpi, _tmp);\n let tmp=_ tmp;\n let dist=( tmp.x - px) * (tmp.x - px) + (tmp.y - py) * (tmp.y - py) + (tmp.z - pz) * (tmp.z - pz);\n\n if (dist < minDist) {\n v=t mpi;\n minDist=d ist;\n }\n }\n }\n }\n\n if (Math.sqrt(minDist)> this.precisionTolerance)\n v = undefined;\n\n if (v === undefined) {\n let mx = this.xymap[x];\n if (!mx) {\n mx = this.xymap[x] = {};\n }\n\n let my = mx[y];\n if (!my) {\n my = mx[y] = {};\n }\n\n my[z] = id;\n return id;\n } else {\n return v;\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9leHRlbnNpb25zL0NvbXBHZW9tL3BvaW50LWxpc3QtM2QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ2lDOztBQUVqQyxNQUFNQyxJQUFJLEdBQUc7RUFDVEMsQ0FBQyxFQUFDLENBQUM7RUFDSEMsQ0FBQyxFQUFDLENBQUM7RUFDSEMsQ0FBQyxFQUFDO0FBQ04sQ0FBQzs7QUFFTSxNQUFNQyxpQkFBaUIsQ0FBQzs7RUFFM0JDLFdBQVdBLENBQUNDLFNBQVMsRUFBRUMsSUFBSSxFQUFFQyxrQkFBa0IsRUFBRTs7SUFFN0MsSUFBSSxDQUFDRixTQUFTLEdBQUdBLFNBQVM7SUFDMUIsSUFBSSxDQUFDQyxJQUFJLEdBQUdBLElBQUk7SUFDaEIsSUFBSSxDQUFDRSxPQUFPLEdBQUcsSUFBSSxDQUFDRixJQUFJLENBQUNHLE9BQU8sQ0FBQyxDQUFDLENBQUNDLE1BQU0sQ0FBQyxDQUFDOztJQUUzQyxJQUFJLENBQUNILGtCQUFrQixFQUFFO01BQ3JCQSxrQkFBa0IsR0FBR1QsNENBQUc7SUFDNUI7SUFDQSxJQUFJUyxrQkFBa0IsR0FBRyxDQUFDLEVBQUU7TUFDeEI7TUFDQTtNQUNBLElBQUksQ0FBQ0Esa0JBQWtCLEdBQUdBLGtCQUFrQjtNQUM1QyxJQUFJLENBQUNJLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDSixrQkFBa0I7SUFDOUMsQ0FBQyxNQUFNO01BQ0g7TUFDQSxJQUFJLENBQUNBLGtCQUFrQixHQUFHLENBQUNBLGtCQUFrQixHQUFHLElBQUksQ0FBQ0MsT0FBTztNQUM1RCxJQUFJLENBQUNHLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDSixrQkFBa0I7SUFDOUM7O0lBRUEsSUFBSSxDQUFDSyxTQUFTLEdBQUksSUFBSSxDQUFDTixJQUFJLENBQUNPLEdBQUcsQ0FBQ2IsQ0FBRSxDQUFDLENBQUM7SUFDcEMsSUFBSSxDQUFDYyxTQUFTLEdBQUksSUFBSSxDQUFDUixJQUFJLENBQUNPLEdBQUcsQ0FBQ1osQ0FBRSxDQUFDLENBQUM7SUFD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LENBQUM7TUFDZCxJQUFJLENBQUMyQixFQUFFLEVBQUU7UUFDTEEsRUFBRSxHQUFHRixFQUFFLENBQUN6QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbkI7O01BRUEyQixFQUFFLENBQUMxQixDQUFDLENBQUMsR0FBR21CLEVBQUU7TUFDVixPQUFPQSxFQUFFO0lBQ2IsQ0FBQyxNQUFNO01BQ0gsT0FBT0MsQ0FBQztJQUNaO0VBQ0o7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL2V4dGVuc2lvbnMvQ29tcEdlb20vcG9pbnQtbGlzdC0zZC5qcz84MzlhIl0sInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHtUT0x9IGZyb20gXCIuL2Z1enp5LW1hdGhcIjtcblxuY29uc3QgX3RtcCA9IHtcbiAgICB4OjAsXG4gICAgeTowLFxuICAgIHo6MFxufTtcblxuZXhwb3J0IGNsYXNzIFVuaXF1ZVBvaW50TGlzdDNEIHtcblxuICAgIGNvbnN0cnVjdG9yKGdldFZlcnRleCwgYmJveCwgcHJlY2lzaW9uVG9sZXJhbmNlKSB7XG5cbiAgICAgICAgdGhpcy5nZXRWZXJ0ZXggPSBnZXRWZXJ0ZXg7XG4gICAgICAgIHRoaXMuYmJveCA9IGJib3g7XG4gICAgICAgIHRoaXMuYm94U2l6ZSA9IHRoaXMuYmJveC5nZXRTaXplKCkubGVuZ3RoKCk7XG5cbiAgICAgICAgaWYgKCFwcmVjaXNpb25Ub2xlcmFuY2UpIHtcbiAgICAgICAgICAgIHByZWNpc2lvblRvbGVyYW5jZSA9IFRPTDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJlY2lzaW9uVG9sZXJhbmNlID4gMCkge1xuICAgICAgICAgICAgLy9JbnB1dCBpcyBpbiBtb2RlbCB1bml0cywgZS5nLiBpZiBtb2RlbCBpcyBpbiBmZWV0LFxuICAgICAgICAgICAgLy9wcmVjaXNpb24gdG9sZXJhbmNlIGhhcyB0byBiZSBpbiBmZWV0XG4gICAgICAgICAgICB0aGlzLnByZWNpc2lvblRvbGVyYW5jZSA9IHByZWNpc2lvblRvbGVyYW5jZTtcbiAgICAgICAgICAgIHRoaXMuc2NhbGUgPSAxLjAgLyB0aGlzLnByZWNpc2lvblRvbGVyYW5jZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vSWYgbmVnYXRpdmUsIGlucHV0IHByZWNpc2lvbiBpcyB0cmVhdGVkIGFzIHJlbGF0aXZlIHRvIGJvdW5kaW5nIGJveCBzaXplXG4gICAgICAgICAgICB0aGlzLnByZWNpc2lvblRvbGVyYW5jZSA9IC1wcmVjaXNpb25Ub2xlcmFuY2UgKiB0aGlzLmJveFNpemU7XG4gICAgICAgICAgICB0aGlzLnNjYWxlID0gMS4wIC8gdGhpcy5wcmVjaXNpb25Ub2xlcmFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNuYXBCYXNlWCA9ICh0aGlzLmJib3gubWluLngpOyAvLy8tIDAuNSAqIHRoaXMucHJlY2lzaW9uVG9sZXJhbmNlO1xuICAgICAgICB0aGlzLnNuYXBCYXNlWSA9ICh0aGlzLmJib3gubWluLnkpOyAvLy0gMC41ICogdGhpcy5wcmVjaXNpb25Ub2xlcmFuY2U7XG4gICAgICAgIHRoaXMuc25hcEJhc2VaID0gKHRoaXMuYmJveC5taW4ueik7IC8vLSAwLjUgKiB0aGlzLnByZWNpc2lvblRvbGVyYW5jZTtcblxuICAgICAgICB0aGlzLnh5bWFwID0ge307XG4gICAgfVxuXG4gICAgZmluZE9yQWRkUG9pbnQocHgsIHB5LCBweiwgaWQpIHtcblxuICAgICAgICAvL1NuYXAgdGhlIHZlcnRleCB0byBvdXIgZGVzaXJlZCBncmFudWxhcml0eVxuICAgICAgICBsZXQgeCA9IDAgfCAvKk1hdGgucm91bmQqLygocHggLSB0aGlzLnNuYXBCYXNlWCkgKiB0aGlzLnNjYWxlKTtcbiAgICAgICAgbGV0IHkgPSAwIHwgLypNYXRoLnJvdW5kKi8oKHB5IC0gdGhpcy5zbmFwQmFzZVkpICogdGhpcy5zY2FsZSk7XG4gICAgICAgIGxldCB6ID0gMCB8IC8qTWF0aC5yb3VuZCovKChweiAtIHRoaXMuc25hcEJhc2VaKSAqIHRoaXMuc2NhbGUpO1xuXG4gICAgICAgIC8vRmluZCB0aGUgbmVhcmVzdCBzbmFwcGVkIHZlcnRleCBvciBjcmVhdGUgbmV3XG4gICAgICAgIGxldCB2O1xuICAgICAgICBsZXQgbWluRGlzdCA9IEluZmluaXR5O1xuICAgICAgICAvL0xvb2sgaW4gdGhlIDI3IGN1YmUgYXJlYSBzdXJyb3VuZGluZyB0aGUgdmVydGV4XG4gICAgICAgIGZvciAobGV0IGk9eC0xOyBpPD14KzE7IGkrKykge1xuICAgICAgICAgICAgbGV0IG14ID0gdGhpcy54eW1hcFtpXTtcbiAgICAgICAgICAgIGlmICghbXgpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGo9eS0xOyBqPD15KzE7IGorKykge1xuICAgICAgICAgICAgICAgIGxldCBteSA9IG14W2pdO1xuICAgICAgICAgICAgICAgIGlmICghbXkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaz16LTE7IGs8PXorMTsgaysrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHRtcGkgPSBteVtrXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRtcGkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VmVydGV4KHRtcGksIF90bXApO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG1wID0gX3RtcDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpc3QgPSAodG1wLnggLSBweCkgKiAodG1wLnggLSBweCkgKyAodG1wLnkgLSBweSkgKiAodG1wLnkgLSBweSkgKyAodG1wLnogLSBweikgKiAodG1wLnogLSBweik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPCBtaW5EaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gdG1waTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbkRpc3QgPSBkaXN0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE1hdGguc3FydChtaW5EaXN0KSA+IHRoaXMucHJlY2lzaW9uVG9sZXJhbmNlKVxuICAgICAgICAgICAgdiA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgbXggPSB0aGlzLnh5bWFwW3hdO1xuICAgICAgICAgICAgaWYgKCFteCkge1xuICAgICAgICAgICAgICAgIG14ID0gdGhpcy54eW1hcFt4XSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbXkgPSBteFt5XTtcbiAgICAgICAgICAgIGlmICghbXkpIHtcbiAgICAgICAgICAgICAgICBteSA9IG14W3ldID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG15W3pdID0gaWQ7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgIH1cbn0iXSwibmFtZXMiOlsiVE9MIiwiX3RtcCIsIngiLCJ5IiwieiIsIlVuaXF1ZVBvaW50TGlzdDNEIiwiY29uc3RydWN0b3IiLCJnZXRWZXJ0ZXgiLCJiYm94IiwicHJlY2lzaW9uVG9sZXJhbmNlIiwiYm94U2l6ZSIsImdldFNpemUiLCJsZW5ndGgiLCJzY2FsZSIsInNuYXBCYXNlWCIsIm1pbiIsInNuYXBCYXNlWSIsInNuYXBCYXNlWiIsInh5bWFwIiwiZmluZE9yQWRkUG9pbnQiLCJweCIsInB5IiwicHoiLCJpZCIsInYiLCJtaW5EaXN0IiwiSW5maW5pdHkiLCJpIiwibXgiLCJqIiwibXkiLCJrIiwidG1waSIsInVuZGVmaW5lZCIsInRtcCIsImRpc3QiLCJNYXRoIiwic3FydCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./extensions/CompGeom/point-list-3d.js\n"); /***/ }), /***/ "./src/analytics/index.js": /*!********************************!*\ !*** ./src/analytics/index.js ***! \********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ analytics: () => (/* binding */ instance)\n/* harmony export */ });\n/* harmony import */ var _logger_Logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../logger/Logger */ \"./src/logger/Logger.js\");\n/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./interface */ \"./src/analytics/interface.js\");\n\n\n\nclass ViewerAnalytics {\n constructor() {\n // map of providerName : class, for e.g., 'mixpanel' : Mixpanel\n this.providerMap = {};\n this.instances = [];\n this.superProps = {}; // properties that are sent with every track request\n this.shouldTrack = true;\n\n this.trackCache = []; // to store track calls until the first instance is created\n this.oneTimers = {}; // Events that should get tracked only once per viewer session.\n }\n\n /**\n * Register an analytics provider class\n * @param {object} PClass - Provider class of type AnalyticsProviderInterface\n */\n registerProvider(PClass) {\n if (!PClass) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_0__.logger.error('Undefined provider');\n return;\n }\n if (!PClass.name) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_0__.logger.error('missing provider name');\n return;\n }\n const n = PClass.name.toLowerCase();\n if (this.isProviderRegistered(n)) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_0__.logger.warn(`Provider with name ${PClass.name} already registered`);\n } else {\n this.providerMap[n] = PClass;\n }\n\n // create and initialize default instance\n const defaultInstance = this.createInstance(PClass.name, PClass.defaultOptions);\n this.instances.push(defaultInstance);\n if (this.shouldTrack) {\n this.init(defaultInstance);\n }\n\n // track data cached before the first instance was created\n if (this.trackCache.length > 0) {\n this.trackCache.forEach((_ref) => {let { event, properties } = _ref;\n this.track(event, properties);\n });\n this.trackCache = []; // clear\n }\n }\n\n /**\n * Returns if a ProviderClass with its name was already registered.\n * @param {object|string} PClassOrPClassName - ProviderClass object or its name\n * @returns True, if already registered.\n */\n isProviderRegistered(PClassOrPClassName) {var _PClassOrPClassName$n;\n const n = typeof PClassOrPClassName === 'string' ? PClassOrPClassName : (_PClassOrPClassName$n = PClassOrPClassName.name) === null || _PClassOrPClassName$n === void 0 ? void 0 : _PClassOrPClassName$n.toLowerCase();\n return n in this.providerMap;\n }\n\n init(providerInstance) {\n if (!providerInstance.initialized) {\n providerInstance.init();\n providerInstance.register(this.superProps);\n }\n }\n\n createInstance(providerName, options) {\n const pname = providerName && providerName.toLowerCase();\n if (!(pname in this.providerMap)) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_0__.logger.error(`Unknown ${providerName}`);\n return;\n }\n\n const PClass = this.providerMap[pname];\n const instance = new PClass(options);\n if (!(instance instanceof _interface__WEBPACK_IMPORTED_MODULE_1__.AnalyticsProviderInterface)) {\n throw new Error('not an analytics provider');\n }\n\n // instance name\n PClass.instanceCount = PClass.instanceCount || 0;\n instance.name = `${pname}-${PClass.instanceCount}`; // for e.g., mixpanel-0\n PClass.instanceCount++;\n return instance;\n }\n\n optIn(options) {\n this.instances.forEach((i) => this.init(i));\n this._callMethod('optIn', options);\n this.shouldTrack = true;\n }\n\n optOut(options) {\n this._callMethod('optOut', options);\n this.shouldTrack = false;\n }\n\n hasOptedOut() {\n return this._callMethod('hasOptedOut');\n }\n\n getDistinctId() {\n return this._callMethod('getDistinctId');\n }\n\n track(event, properties, isOneTimer) {\n if (!this.shouldTrack) {\n return;\n }\n\n // In case this event is a one-timer, make sure to track it only once per viewer session.\n if (isOneTimer) {\n const eventWithProps = { event, properties };\n\n try {\n const key = JSON.stringify(eventWithProps);\n\n // Event was already tracked before - skip it.\n if (this.oneTimers[key]) {\n return;\n }\n\n this.oneTimers[key] = true;\n } catch (_) {\n\n\n // Unable to stringify event (probably because of a circular dependency - shouldn't happen anyway).\n // Don't crash because of it - just ignore isOneTimer flag for this one.\n }}\n if (this.instances.length === 0) {\n this.trackCache.push({ event, properties });\n } else {\n this._callMethod('track', event, properties);\n }\n }\n\n identify(distinctId) {\n this._callMethod('identify', distinctId);\n }\n\n _callMethod() {for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key]=a rguments[_key];}\n const methodName=a rgs[0];\n const rest=a rgs.slice(1, args.length);\n return this.instances.map((inst)=> ({\n name: inst.name,\n value: inst[methodName](...rest)\n }));\n }\n}\n\nconst instance = new ViewerAnalytics();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsU0FBQSxDQUFBaEMsTUFBQSxFQUFOaUMsSUFBSSxPQUFBQyxLQUFBLENBQUFILElBQUEsR0FBQUksSUFBQSxNQUFBQSxJQUFBLEdBQUFKLElBQUEsRUFBQUksSUFBQSxLQUFKRixJQUFJLENBQUFFLElBQUEsSUFBQUgsU0FBQSxDQUFBRyxJQUFBO0lBQ2pCLE1BQU1DLFVBQVUsR0FBR0gsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNSSxJQUFJLEdBQUdKLElBQUksQ0FBQ0ssS0FBSyxDQUFDLENBQUMsRUFBRUwsSUFBSSxDQUFDakMsTUFBTSxDQUFDO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDbEIsU0FBUyxDQUFDeUQsR0FBRyxDQUFDLENBQUFDLElBQUksTUFBSztNQUNqQ2xELElBQUksRUFBRWtELElBQUksQ0FBQ2xELElBQUk7TUFDZm1ELEtBQUssRUFBRUQsSUFBSSxDQUFDSixVQUFVLENBQUMsQ0FBQyxHQUFHQyxJQUFJO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0VBQ0w7QUFDRjs7QUFFQSxNQUFNdkIsUUFBUSxHQUFHLElBQUluQyxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9hbmFseXRpY3MvaW5kZXguanM/OWYzYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7IEFuYWx5dGljc1Byb3ZpZGVySW50ZXJmYWNlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5jbGFzcyBWaWV3ZXJBbmFseXRpY3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBtYXAgb2YgcHJvdmlkZXJOYW1lIDogY2xhc3MsIGZvciBlLmcuLCAnbWl4cGFuZWwnIDogTWl4cGFuZWxcbiAgICB0aGlzLnByb3ZpZGVyTWFwID0ge307XG4gICAgdGhpcy5pbnN0YW5jZXMgPSBbXTtcbiAgICB0aGlzLnN1cGVyUHJvcHMgPSB7fTsgLy8gcHJvcGVydGllcyB0aGF0IGFyZSBzZW50IHdpdGggZXZlcnkgdHJhY2sgcmVxdWVzdFxuICAgIHRoaXMuc2hvdWxkVHJhY2sgPSB0cnVlO1xuXG4gICAgdGhpcy50cmFja0NhY2hlID0gW107IC8vIHRvIHN0b3JlIHRyYWNrIGNhbGxzIHVudGlsIHRoZSBmaXJzdCBpbnN0YW5jZSBpcyBjcmVhdGVkXG4gICAgdGhpcy5vbmVUaW1lcnMgPSB7fTsgLy8gRXZlbnRzIHRoYXQgc2hvdWxkIGdldCB0cmFja2VkIG9ubHkgb25jZSBwZXIgdmlld2VyIHNlc3Npb24uXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gYW5hbHl0aWNzIHByb3ZpZGVyIGNsYXNzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBQQ2xhc3MgLSBQcm92aWRlciBjbGFzcyBvZiB0eXBlIEFuYWx5dGljc1Byb3ZpZGVySW50ZXJmYWNlXG4gICAqL1xuICByZWdpc3RlclByb3ZpZGVyKFBDbGFzcykge1xuICAgIGlmICghUENsYXNzKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1VuZGVmaW5lZCBwcm92aWRlcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIVBDbGFzcy5uYW1lKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ21pc3NpbmcgcHJvdmlkZXIgbmFtZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuID0gUENsYXNzLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGhpcy5pc1Byb3ZpZGVyUmVnaXN0ZXJlZChuKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFByb3ZpZGVyIHdpdGggbmFtZSAke1BDbGFzcy5uYW1lfSBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm92aWRlck1hcFtuXSA9IFBDbGFzcztcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgYW5kIGluaXRpYWxpemUgZGVmYXVsdCBpbnN0YW5jZVxuICAgIGNvbnN0IGRlZmF1bHRJbnN0YW5jZSA9IHRoaXMuY3JlYXRlSW5zdGFuY2UoUENsYXNzLm5hbWUsIFBDbGFzcy5kZWZhdWx0T3B0aW9ucyk7XG4gICAgdGhpcy5pbnN0YW5jZXMucHVzaChkZWZhdWx0SW5zdGFuY2UpO1xuICAgIGlmICh0aGlzLnNob3VsZFRyYWNrKSB7XG4gICAgICB0aGlzLmluaXQoZGVmYXVsdEluc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvLyB0cmFjayBkYXRhIGNhY2hlZCBiZWZvcmUgdGhlIGZpcnN0IGluc3RhbmNlIHdhcyBjcmVhdGVkXG4gICAgaWYgKHRoaXMudHJhY2tDYWNoZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRyYWNrQ2FjaGUuZm9yRWFjaCgoeyBldmVudCwgcHJvcGVydGllcyB9KSA9PiB7XG4gICAgICAgIHRoaXMudHJhY2soZXZlbnQsIHByb3BlcnRpZXMpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnRyYWNrQ2FjaGUgPSBbXTsgLy8gY2xlYXJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpZiBhIFByb3ZpZGVyQ2xhc3Mgd2l0aCBpdHMgbmFtZSB3YXMgYWxyZWFkeSByZWdpc3RlcmVkLlxuICAgKiBAcGFyYW0ge29iamVjdHxzdHJpbmd9IFBDbGFzc09yUENsYXNzTmFtZSAtIFByb3ZpZGVyQ2xhc3Mgb2JqZWN0IG9yIGl0cyBuYW1lXG4gICAqIEByZXR1cm5zIFRydWUsIGlmIGFscmVhZHkgcmVnaXN0ZXJlZC5cbiAgICovXG4gIGlzUHJvdmlkZXJSZWdpc3RlcmVkKFBDbGFzc09yUENsYXNzTmFtZSkge1xuICAgIGNvbnN0IG4gPSB0eXBlb2YgUENsYXNzT3JQQ2xhc3NOYW1lID09PSAnc3RyaW5nJyA/IFBDbGFzc09yUENsYXNzTmFtZSA6IFBDbGFzc09yUENsYXNzTmFtZS5uYW1lPy50b0xvd2VyQ2FzZSgpOyBcbiAgICByZXR1cm4gbiBpbiB0aGlzLnByb3ZpZGVyTWFwO1xuICB9XG5cbiAgaW5pdChwcm92aWRlckluc3RhbmNlKSB7XG4gICAgaWYgKCFwcm92aWRlckluc3RhbmNlLmluaXRpYWxpemVkKSB7XG4gICAgICBwcm92aWRlckluc3RhbmNlLmluaXQoKTtcbiAgICAgIHByb3ZpZGVySW5zdGFuY2UucmVnaXN0ZXIodGhpcy5zdXBlclByb3BzKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVJbnN0YW5jZShwcm92aWRlck5hbWUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBwbmFtZSA9IHByb3ZpZGVyTmFtZSAmJiBwcm92aWRlck5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIShwbmFtZSBpbiB0aGlzLnByb3ZpZGVyTWFwKSkge1xuICAgICAgbG9nZ2VyLmVycm9yKGBVbmtub3duICR7cHJvdmlkZXJOYW1lfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFBDbGFzcyA9IHRoaXMucHJvdmlkZXJNYXBbcG5hbWVdO1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFBDbGFzcyhvcHRpb25zKTtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIEFuYWx5dGljc1Byb3ZpZGVySW50ZXJmYWNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgYW4gYW5hbHl0aWNzIHByb3ZpZGVyJyk7XG4gICAgfVxuXG4gICAgLy8gaW5zdGFuY2UgbmFtZVxuICAgIFBDbGFzcy5pbnN0YW5jZUNvdW50ID0gUENsYXNzLmluc3RhbmNlQ291bnQgfHwgMDtcbiAgICBpbnN0YW5jZS5uYW1lID0gYCR7cG5hbWV9LSR7UENsYXNzLmluc3RhbmNlQ291bnR9YDsgLy8gZm9yIGUuZy4sIG1peHBhbmVsLTBcbiAgICBQQ2xhc3MuaW5zdGFuY2VDb3VudCsrO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIG9wdEluKG9wdGlvbnMpIHtcbiAgICB0aGlzLmluc3RhbmNlcy5mb3JFYWNoKGkgPT4gdGhpcy5pbml0KGkpKTtcbiAgICB0aGlzLl9jYWxsTWV0aG9kKCdvcHRJbicsIG9wdGlvbnMpO1xuICAgIHRoaXMuc2hvdWxkVHJhY2sgPSB0cnVlO1xuICB9XG5cbiAgb3B0T3V0KG9wdGlvbnMpIHtcbiAgICB0aGlzLl9jYWxsTWV0aG9kKCdvcHRPdXQnLCBvcHRpb25zKTtcbiAgICB0aGlzLnNob3VsZFRyYWNrID0gZmFsc2U7XG4gIH1cblxuICBoYXNPcHRlZE91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsbE1ldGhvZCgnaGFzT3B0ZWRPdXQnKTtcbiAgfVxuXG4gIGdldERpc3RpbmN0SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGxNZXRob2QoJ2dldERpc3RpbmN0SWQnKTtcbiAgfVxuXG4gIHRyYWNrKGV2ZW50LCBwcm9wZXJ0aWVzLCBpc09uZVRpbWVyKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFRyYWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEluIGNhc2UgdGhpcyBldmVudCBpcyBhIG9uZS10aW1lciwgbWFrZSBzdXJlIHRvIHRyYWNrIGl0IG9ubHkgb25jZSBwZXIgdmlld2VyIHNlc3Npb24uXG4gICAgaWYgKGlzT25lVGltZXIpIHtcbiAgICAgICAgY29uc3QgZXZlbnRXaXRoUHJvcHMgPSB7IGV2ZW50LCBwcm9wZXJ0aWVzIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGV2ZW50V2l0aFByb3BzKTtcblxuICAgICAgICAgICAgLy8gRXZlbnQgd2FzIGFscmVhZHkgdHJhY2tlZCBiZWZvcmUgLSBza2lwIGl0LlxuICAgICAgICAgICAgaWYgKHRoaXMub25lVGltZXJzW2tleV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25lVGltZXJzW2tleV0gPSB0cnVlOyAgIFxuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICAvLyBVbmFibGUgdG8gc3RyaW5naWZ5IGV2ZW50IChwcm9iYWJseSBiZWNhdXNlIG9mIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSAtIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KS5cbiAgICAgICAgICAgIC8vIERvbid0IGNyYXNoIGJlY2F1c2Ugb2YgaXQgLSBqdXN0IGlnbm9yZSBpc09uZVRpbWVyIGZsYWcgZm9yIHRoaXMgb25lLlxuICAgICAgICB9XG4gICAgfSAgICBcbiAgICBcbiAgICBpZiAodGhpcy5pbnN0YW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnRyYWNrQ2FjaGUucHVzaCh7IGV2ZW50LCBwcm9wZXJ0aWVzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jYWxsTWV0aG9kKCd0cmFjaycsIGV2ZW50LCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICBpZGVudGlmeShkaXN0aW5jdElkKSB7XG4gICAgdGhpcy5fY2FsbE1ldGhvZCgnaWRlbnRpZnknLCBkaXN0aW5jdElkKTtcbiAgfVxuXG4gIF9jYWxsTWV0aG9kKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gYXJnc1swXTtcbiAgICBjb25zdCByZXN0ID0gYXJncy5zbGljZSgxLCBhcmdzLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VzLm1hcChpbnN0ID0+ICh7XG4gICAgICBuYW1lOiBpbnN0Lm5hbWUsXG4gICAgICB2YWx1ZTogaW5zdFttZXRob2ROYW1lXSguLi5yZXN0KVxuICAgIH0pKTtcbiAgfVxufVxuXG5jb25zdCBpbnN0YW5jZSA9IG5ldyBWaWV3ZXJBbmFseXRpY3MoKTtcbmV4cG9ydCB7IGluc3RhbmNlIGFzIGFuYWx5dGljcyB9O1xuIl0sIm5hbWVzIjpbImxvZ2dlciIsIkFuYWx5dGljc1Byb3ZpZGVySW50ZXJmYWNlIiwiVmlld2VyQW5hbHl0aWNzIiwiY29uc3RydWN0b3IiLCJwcm92aWRlck1hcCIsImluc3RhbmNlcyIsInN1cGVyUHJvcHMiLCJzaG91bGRUcmFjayIsInRyYWNrQ2FjaGUiLCJvbmVUaW1lcnMiLCJyZWdpc3RlclByb3ZpZGVyIiwiUENsYXNzIiwiZXJyb3IiLCJuYW1lIiwibiIsInRvTG93ZXJDYXNlIiwiaXNQcm92aWRlclJlZ2lzdGVyZWQiLCJ3YXJuIiwiZGVmYXVsdEluc3RhbmNlIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0T3B0aW9ucyIsInB1c2giLCJpbml0IiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9yZWYiLCJldmVudCIsInByb3BlcnRpZXMiLCJ0cmFjayIsIlBDbGFzc09yUENsYXNzTmFtZSIsIl9QQ2xhc3NPclBDbGFzc05hbWUkbiIsInByb3ZpZGVySW5zdGFuY2UiLCJpbml0aWFsaXplZCIsInJlZ2lzdGVyIiwicHJvdmlkZXJOYW1lIiwib3B0aW9ucyIsInBuYW1lIiwiaW5zdGFuY2UiLCJFcnJvciIsImluc3RhbmNlQ291bnQiLCJvcHRJbiIsImkiLCJfY2FsbE1ldGhvZCIsIm9wdE91dCIsImhhc09wdGVkT3V0IiwiZ2V0RGlzdGluY3RJZCIsImlzT25lVGltZXIiLCJldmVudFdpdGhQcm9wcyIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiLCJfIiwiaWRlbnRpZnkiLCJkaXN0aW5jdElkIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJtZXRob2ROYW1lIiwicmVzdCIsInNsaWNlIiwibWFwIiwiaW5zdCIsInZhbHVlIiwiYW5hbHl0aWNzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/analytics/index.js\n"); /***/ }), /***/ "./src/analytics/interface.js": /*!************************************!*\ !*** ./src/analytics/interface.js ***! \************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AnalyticsProviderInterface: () => (/* binding */ AnalyticsProviderInterface)\n/* harmony export */ });\nclass AnalyticsProviderInterface {\n constructor() {let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.options = options;\n }\n /**\n * Called by ViewerAnalytics to initialize the provider library\n */\n init() {}\n\n /**\n * Called after init. This could be used to register super properties\n */\n register() {}\n static get name() {return null;} // to be overridden\n static get defaultOptions() {return {};} // to be overridden\n optIn(options) {}\n optOut(options) {}\n hasOptedOut() {}\n getDistinctId() {}\n track(event, properties) {}\n identify(distinctId) {}\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYW5hbHl0aWNzL2ludGVyZmFjZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8sTUFBTUEsMEJBQTBCLENBQUM7RUFDdkNDLFdBQVdBLENBQUEsRUFBZSxLQUFkQyxPQUFPLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUNELE9BQU8sR0FBR0EsT0FBTztFQUN2QjtFQUNBO0FBQ0Q7QUFDQTtFQUNDSSxJQUFJQSxDQUFBLEVBQUcsQ0FBQzs7RUFFUjtBQUNEO0FBQ0E7RUFDQ0MsUUFBUUEsQ0FBQSxFQUFHLENBQUM7RUFDWixXQUFXQyxJQUFJQSxDQUFBLEVBQUcsQ0FBRSxPQUFPLElBQUksQ0FBRSxDQUFDLENBQUM7RUFDbkMsV0FBV0MsY0FBY0EsQ0FBQSxFQUFHLENBQUUsT0FBTyxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUM7RUFDM0NDLEtBQUtBLENBQUNSLE9BQU8sRUFBRSxDQUFDO0VBQ2hCUyxNQUFNQSxDQUFDVCxPQUFPLEVBQUUsQ0FBQztFQUNqQlUsV0FBV0EsQ0FBQSxFQUFHLENBQUM7RUFDZkMsYUFBYUEsQ0FBQSxFQUFHLENBQUM7RUFDakJDLEtBQUtBLENBQUNDLEtBQUssRUFBRUMsVUFBVSxFQUFFLENBQUM7RUFDMUJDLFFBQVFBLENBQUNDLFVBQVUsRUFBRSxDQUFDO0FBQ3ZCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2FuYWx5dGljcy9pbnRlcmZhY2UuanM/ZTE4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQW5hbHl0aWNzUHJvdmlkZXJJbnRlcmZhY2Uge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHR9XG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgVmlld2VyQW5hbHl0aWNzIHRvIGluaXRpYWxpemUgdGhlIHByb3ZpZGVyIGxpYnJhcnlcblx0ICovXG5cdGluaXQoKSB7fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYWZ0ZXIgaW5pdC4gVGhpcyBjb3VsZCBiZSB1c2VkIHRvIHJlZ2lzdGVyIHN1cGVyIHByb3BlcnRpZXNcblx0ICovXG5cdHJlZ2lzdGVyKCkge30gXG5cdHN0YXRpYyBnZXQgbmFtZSgpIHsgcmV0dXJuIG51bGw7IH0gLy8gdG8gYmUgb3ZlcnJpZGRlblxuXHRzdGF0aWMgZ2V0IGRlZmF1bHRPcHRpb25zKCkgeyByZXR1cm4ge307IH0gLy8gdG8gYmUgb3ZlcnJpZGRlblxuXHRvcHRJbihvcHRpb25zKSB7fVxuXHRvcHRPdXQob3B0aW9ucykge31cblx0aGFzT3B0ZWRPdXQoKSB7fVxuXHRnZXREaXN0aW5jdElkKCkge31cblx0dHJhY2soZXZlbnQsIHByb3BlcnRpZXMpIHt9XG5cdGlkZW50aWZ5KGRpc3RpbmN0SWQpIHt9XG59XG4iXSwibmFtZXMiOlsiQW5hbHl0aWNzUHJvdmlkZXJJbnRlcmZhY2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJpbml0IiwicmVnaXN0ZXIiLCJuYW1lIiwiZGVmYXVsdE9wdGlvbnMiLCJvcHRJbiIsIm9wdE91dCIsImhhc09wdGVkT3V0IiwiZ2V0RGlzdGluY3RJZCIsInRyYWNrIiwiZXZlbnQiLCJwcm9wZXJ0aWVzIiwiaWRlbnRpZnkiLCJkaXN0aW5jdElkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/analytics/interface.js\n"); /***/ }), /***/ "./src/compat.js": /*!***********************!*\ !*** ./src/compat.js ***! \***********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ObjectAssign: () => (/* binding */ ObjectAssign),\n/* harmony export */ disableDocumentTouchSafari: () => (/* binding */ disableDocumentTouchSafari),\n/* harmony export */ enableDocumentTouchSafari: () => (/* binding */ enableDocumentTouchSafari),\n/* harmony export */ exitFullscreen: () => (/* binding */ exitFullscreen),\n/* harmony export */ fullscreenElement: () => (/* binding */ fullscreenElement),\n/* harmony export */ getAndroidVersion: () => (/* binding */ getAndroidVersion),\n/* harmony export */ getGlobal: () => (/* reexport safe */ _global__WEBPACK_IMPORTED_MODULE_0__.getGlobal),\n/* harmony export */ getIOSVersion: () => (/* binding */ getIOSVersion),\n/* harmony export */ inFullscreen: () => (/* binding */ inFullscreen),\n/* harmony export */ isAndroidDevice: () => (/* binding */ isAndroidDevice),\n/* harmony export */ isBrowser: () => (/* binding */ isBrowser),\n/* harmony export */ isChrome: () => (/* binding */ isChrome),\n/* harmony export */ isFirefox: () => (/* binding */ isFirefox),\n/* harmony export */ isFullscreenAvailable: () => (/* binding */ isFullscreenAvailable),\n/* harmony export */ isFullscreenEnabled: () => (/* binding */ isFullscreenEnabled),\n/* harmony export */ isIE11: () => (/* binding */ isIE11),\n/* harmony export */ isIE11Only: () => (/* binding */ isIE11Only),\n/* harmony export */ isIOSDevice: () => (/* binding */ isIOSDevice),\n/* harmony export */ isMac: () => (/* binding */ isMac),\n/* harmony export */ isMobileDevice: () => (/* binding */ isMobileDevice),\n/* harmony export */ isNodeJS: () => (/* binding */ isNodeJS),\n/* harmony export */ isPhoneFormFactor: () => (/* binding */ isPhoneFormFactor),\n/* harmony export */ isSafari: () => (/* binding */ isSafari),\n/* harmony export */ isTouchDevice: () => (/* binding */ isTouchDevice),\n/* harmony export */ isWindows: () => (/* binding */ isWindows),\n/* harmony export */ launchFullscreen: () => (/* binding */ launchFullscreen),\n/* harmony export */ touchStartToClick: () => (/* binding */ touchStartToClick)\n/* harmony export */ });\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./global */ \"./src/global.js\");\nvar _navigator$platform;\n\n\nconst _window = (0,_global__WEBPACK_IMPORTED_MODULE_0__.getGlobal)();\nconst _document = _window && _window.document;\n\n\n\nconst isBrowser = typeof navigator !== \"undefined\";\n\nconst isNodeJS = function () {\n return !isBrowser;\n};\n\nlet isIE11 = isBrowser && !!navigator.userAgent.match(/Edge|Trident\\/7\\./);\n\n// Although the naming is misleading, isIE11 contains Edge too for some legacy reason.\n// For backward compatibility, instead of renaming `isIE11` to `isIEOrEdge`, I just added `isIE11Only`.\nlet isIE11Only = isBrowser && !!navigator.userAgent.match(/Trident\\/7\\./);\n\n// Launch full screen on the given element with the available method\nfunction launchFullscreen(element, options) {\n if (element.requestFullscreen) {\n element.requestFullscreen(options);\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen(options);\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen(options);\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen(options);\n }\n};\n\n// Exit full screen with the available method\nfunction exitFullscreen(_document) {\n if (!inFullscreen(_document)) {\n return;\n }\n if (_document.exitFullscreen) {\n _document.exitFullscreen();\n } else if (_document.mozCancelFullScreen) {\n _document.mozCancelFullScreen();\n } else if (_document.webkitExitFullscreen) {\n _document.webkitExitFullscreen();\n } else if (_document.msExitFullscreen) {\n _document.msExitFullscreen();\n }\n};\n\n// Determines if the browser is in full screen\nfunction inFullscreen(_document) {\n\n // Special case for Ms-Edge that has webkitIsFullScreen with correct value\n // and fullscreenEnabled with wrong value (thanks MS)\n\n if (\"webkitIsFullScreen\" in _document) return !!_document.webkitIsFullScreen;\n if (\"fullscreenElement\" in _document) return !!_document.fullscreenElement;\n if (\"mozFullScreenElement\" in _document) return !!_document.mozFullScreenElement;\n if (\"msFullscreenElement\" in _document) return !!_document.msFullscreenElement;\n\n return !!_document.querySelector(\".viewer-fill-browser\"); // Fallback for iPad\n};\n\nfunction fullscreenElement(_document) {\n return _document.fullscreenElement || _document.mozFullScreenElement || _document.webkitFullscreenElement || _document.msFullscreenElement;\n};\n\nfunction isFullscreenAvailable(element) {\n return element.requestFullscreen || element.mozRequestFullScreen || element.webkitRequestFullscreen || element.msRequestFullscreen;\n};\n\n/**\n * Returns true if full screen mode is enabled. \n * @param {Document} _document\n * @return {Boolean} - true if full screen mode is enabled false otherwise.\n */\nfunction isFullscreenEnabled(_document) {\n return (\n _document.fullscreenEnabled ||\n _document.webkitFullscreenEnabled ||\n _document.mozFullScreenEnabled ||\n _document.msFullscreenEnabled);\n\n}\n\n// Get the IOS version through user agent.\n// Return the version string of IOS, e.g. 14.1.1, 15.4 ... or empty string if version couldn't be detected\n// User agents can be changed and thus might be inaccurate or incompatible at some point, but this pattern\n// has been stable at least since IOS 5\nfunction getIOSVersion(ua) {\n ua = ua || navigator.userAgent;\n var match = ua.match(/OS ((\\d+)_(\\d+)(_(\\d+))?) like Mac OS X/);\n if (!match && isIOSDevice()) {\n // On IPadOS Safari requests the desktop version by default with a MacOS user.\n // The major version seems to be reliable, but the minor version might be incorrect.\n match = ua.match(/\\/((\\d+)\\.(\\d+)(\\.\\d)?) Safari\\//);\n }\n\n return match ? match[1].replace('_', '.') : \"\";\n};\n\n// Get the version of the android device through user agent.\n// Return the version string of android device, e.g. 4.4, 5.0...\nfunction getAndroidVersion(ua) {\n ua = ua || navigator.userAgent;\n var match = ua.match(/Android\\s([0-9\\.]*)/);\n return match ? match[1] : false;\n};\n\n// Determine if this is a touch or notouch device.\nfunction isTouchDevice() {\n return typeof window !== 'undefined' && ('ontouchstart' in window || navigator.maxTouchPoints > 0);\n};\n\n// Since iOS 13, the iPad identifies itself as a desktop, so the only way to reliably detect is to search for multitouch capabilities\n// (insofar as no other Apple device implements it)\n// It also returns different values in a worker so we need to look in the platform as well to distinguish from a regular Mac\nconst _isIOSDevice = isBrowser && (/ip(ad|hone|od)/.test(navigator.userAgent.toLowerCase()) ||\nnavigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 ||\n/^ip(ad|hone|od)$/.test((_navigator$platform = navigator.platform) === null || _navigator$platform === void 0 ? void 0 : _navigator$platform.toLowerCase()));\nfunction isIOSDevice() {\n return _isIOSDevice;\n}\n\nconst _isAndroidDevice = isBrowser && navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nfunction isAndroidDevice() {\n return _isAndroidDevice;\n}\n\nfunction isMobileDevice() {\n if (!isBrowser) return false;\n return isIOSDevice() || isAndroidDevice();\n};\n\nfunction isPhoneFormFactor() {\n return (\n isMobileDevice() && (\n _window.matchMedia('(max-width: 750px)').matches || _window.matchMedia('(max-height: 750px)').matches));\n\n}\n\nfunction isSafari() {\n if (!isBrowser) return false;\n var _ua = navigator.userAgent.toLowerCase();\n return _ua.indexOf(\"safari\") !== -1 && _ua.indexOf(\"chrome\") === -1;\n};\n\nfunction isFirefox() {\n if (!isBrowser) return false;\n var _ua = navigator.userAgent.toLowerCase();\n return _ua.indexOf(\"firefox\") !== -1;\n};\n\nfunction isChrome() {\n if (!isBrowser) return false;\n var _ua = navigator.userAgent.toLowerCase();\n return _ua.indexOf(\"chrome\") !== -1;\n};\n\nfunction isMac() {\n if (!isBrowser) return false;\n var _ua = navigator.userAgent.toLowerCase();\n return _ua.indexOf(\"mac os\") !== -1 && !isIOSDevice();\n};\n\nfunction isWindows() {\n if (!isBrowser) return false;\n var _ua = navigator.userAgent.toLowerCase();\n return _ua.indexOf(\"win32\") !== -1 || _ua.indexOf(\"windows\") !== -1;\n};\n\nfunction ObjectAssign(des, src) {\n for (var key in src) {\n if (src.hasOwnProperty(key))\n des[key] = src[key];\n }\n return des;\n};\n\n// Hack to work around Safari's use of pinch and pan inside the viewer canvas.\nfunction disableTouchSafari(event) {\n var xOff = _window.hasOwnProperty(\"pageXOffset\") ? _window.pageXOffset : _document.documentElement.scrollLeft;\n var yOff = _window.hasOwnProperty(\"pageYOffset\") ? _window.pageYOffset : _document.documentElement.scrollTop;\n\n // event.pageX and event.pageY returned undefined through Chrome console device mode\n var pageX = typeof event.pageX === \"undefined\" ? event.changedTouches[0].pageX : event.pageX;\n var pageY = typeof event.pageY === \"undefined\" ? event.changedTouches[0].pageY : event.pageY;\n\n // If we aren't inside the canvas, then allow default propagation of the event\n var element = _document.elementFromPoint(pageX - xOff, pageY - yOff);\n if (!element || element.nodeName !== 'CANVAS')\n return true;\n // If it's a CANVAS, check that it's owned by us\n if (element.getAttribute('data-viewer-canvas') !== 'true')\n return true;\n // Inside the canvas, prevent the event from propagating to Safari'safely\n // standard handlers, which will pan and zoom the page.\n event.preventDefault();\n return false;\n}\n\n// Hack to work around Safari's use of pinch and pan inside the viewer canvas.\nfunction disableDocumentTouchSafari() {\n if (isMobileDevice() && isSafari()) {\n // Safari mobile disable default touch handling inside viewer canvas\n // Use capture to make sure Safari doesn't capture the touches and prevent\n // us from disabling them.\n _document.documentElement.addEventListener('touchstart', disableTouchSafari, true);\n _document.documentElement.addEventListener('touchmove', disableTouchSafari, true);\n _document.documentElement.addEventListener('touchcanceled', disableTouchSafari, true);\n _document.documentElement.addEventListener('touchend', disableTouchSafari, true);\n }\n};\n\n// Hack to work around Safari's use of pinch and pan inside the viewer canvas.\n// This method is not being invoked explicitly.\nfunction enableDocumentTouchSafari() {\n if (isMobileDevice() && isSafari()) {\n // Safari mobile disable default touch handling inside viewer canvas\n // Use capture to make sure Safari doesn't capture the touches and prevent\n // us from disabling them.\n _document.documentElement.removeEventListener('touchstart', disableTouchSafari, true);\n _document.documentElement.removeEventListener('touchmove', disableTouchSafari, true);\n _document.documentElement.removeEventListener('touchcanceled', disableTouchSafari, true);\n _document.documentElement.removeEventListener('touchend', disableTouchSafari, true);\n }\n};\n\n\n// Convert touchstart event to click to remove the delay between the touch and\n// the click event which is sent after touchstart with about 300ms deley.\n// Should be used in UI elements on touch devices.\nfunction touchStartToClick(e) {\n // Buttons that activate fullscreen are a special case. The HTML5 fullscreen spec\n // requires the original user gesture signal to avoid a security issue. See LMV-2396 and LMV-2326\n if (e.target.className && (e.target.className.indexOf(\"fullscreen\") > -1 ||\n e.target.className.indexOf(\"webvr\") > -1))\n return;\n e.preventDefault(); // Stops the firing of delayed click event.\n e.stopPropagation();\n e.target.click(); // Maps to immediate click.\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcGF0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ3FDOztBQUVyQyxNQUFNQyxPQUFPLEdBQUdELGtEQUFTLENBQUMsQ0FBQztBQUMzQixNQUFNRSxTQUFTLEdBQUdELE9BQU8sSUFBSUEsT0FBTyxDQUFDRSxRQUFROztBQUV4Qjs7QUFFZCxNQUFNQyxTQUFTLEdBQUksT0FBT0MsU0FBUyxLQUFLLFdBQVk7O0FBRXBELE1BQU1DLFFBQVEsR0FBRyxTQUFBQSxDQUFBLEVBQVc7RUFDL0IsT0FBTyxDQUFDRixTQUFTO0FBQ3JCLENBQUM7O0FBRU0sSUFBSUcsTUFBTSxHQUFHSCxTQUFTLElBQUksQ0FBQyxDQUFDQyxTQUFTLENBQUNHLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDLG1CQUFtQixDQUFDOztBQUVqRjtBQUNBO0FBQ08sSUFBSUMsVUFBVSxHQUFHTixTQUFTLElBQUksQ0FBQyxDQUFDQyxTQUFTLENBQUNHLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDLGNBQWMsQ0FBQzs7QUFFaEY7QUFDTyxTQUFTRSxnQkFBZ0JBLENBQUNDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO0VBQy9DLElBQUlELE9BQU8sQ0FBQ0UsaUJBQWlCLEVBQUU7SUFDM0JGLE9BQU8sQ0FBQ0UsaUJBQWlCLENBQUNELE9BQU8sQ0FBQztFQUN0QyxDQUFDLE1BQU0sSUFBSUQsT0FBTyxDQUFDRyxvQkFBb0IsRUFBRTtJQUNyQ0gsT0FBTyxDQUFDRyxvQkFBb0IsQ0FBQ0YsT0FBTyxDQUFDO0VBQ3pDLENBQUMsTUFBTSxJQUFJRCxPQUFPLENBQUNJLHVCQUF1QixFQUFFO0lBQ3hDSixPQUFPLENBQUNJLHVCQUF1QixDQUFDSCxPQUFPLENBQUM7RUFDNUMsQ0FBQyxNQUFNLElBQUlELE9BQU8sQ0FBQ0ssbUJBQW1CLEVBQUU7SUFDcENMLE9BQU8sQ0FBQ0ssbUJBQW1CLENBQUNKLE9BQU8sQ0FBQztFQUN4QztBQUNKLENBQUM7O0FBRUQ7QUFDTyxTQUFTSyxjQUFjQSxDQUFDaEIsU0FBUyxFQUFFO0VBQ3RDLElBQUksQ0FBQ2lCLFlBQVksQ0FBQ2pCLFNBQVMsQ0FBQyxFQUFFO0lBQzFCO0VBQ0o7RUFDQSxJQUFJQSxTQUFTLENBQUNnQixjQUFjLEVBQUU7SUFDMUJoQixTQUFTLENBQUNnQixjQUFjLENBQUMsQ0FBQztFQUM5QixDQUFDLE1BQU0sSUFBSWhCLFNBQVMsQ0FBQ2tCLG1CQUFtQixFQUFFO0lBQ3RDbEIsU0FBUyxDQUFDa0IsbUJBQW1CLENBQUMsQ0FBQztFQUNuQyxDQUFDLE1BQU0sSUFBSWxCLFNBQVMsQ0FBQ21CLG9CQUFvQixFQUFFO0lBQ3ZDbkIsU0FBUyxDQUFDbUIsb0JBQW9CLENBQUMsQ0FBQztFQUNwQyxDQUFDLE1BQU0sSUFBSW5CLFNBQVMsQ0FBQ29CLGdCQUFnQixFQUFFO0lBQ25DcEIsU0FBUyxDQUFDb0IsZ0JBQWdCLENBQUMsQ0FBQztFQUNoQztBQUNKLENBQUM7O0FBRUQ7QUFDTyxTQUFTSCxZQUFZQSxDQUFDakIsU0FBUyxFQUFDOztFQUVuQztFQUNBOztFQUVBLElBQUksb0JBQW9CLElBQUlBLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBRUEsU0FBUyxDQUFDcUIsa0JBQW1CO0VBQzlFLElBQUksbUJBQW1CLElBQUlyQixTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUVBLFNBQVMsQ0FBQ3NCLGlCQUFrQjtFQUM1RSxJQUFJLHNCQUFzQixJQUFJdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFFQSxTQUFTLENBQUN1QixvQkFBcUI7RUFDbEYsSUFBSSxxQkFBcUIsSUFBSXZCLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBRUEsU0FBUyxDQUFDd0IsbUJBQW9COztFQUVoRixPQUFPLENBQUMsQ0FBRXhCLFNBQVMsQ0FBQ3lCLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBRSxDQUFDLENBQUM7QUFDaEUsQ0FBQzs7QUFFTSxTQUFTSCxpQkFBaUJBLENBQUN0QixTQUFTLEVBQUU7RUFDekMsT0FBT0EsU0FBUyxDQUFDc0IsaUJBQWlCLElBQUl0QixTQUFTLENBQUN1QixvQkFBb0IsSUFBSXZCLFNBQVMsQ0FBQzBCLHVCQUF1QixJQUFJMUIsU0FBUyxDQUFDd0IsbUJBQW1CO0FBQzlJLENBQUM7O0FBRU0sU0FBU0cscUJBQXFCQSxDQUFDakIsT0FBTyxFQUFFO0VBQzNDLE9BQU9BLE9BQU8sQ0FBQ0UsaUJBQWlCLElBQUlGLE9BQU8sQ0FBQ0csb0JBQW9CLElBQUlILE9BQU8sQ0FBQ0ksdUJBQXVCLElBQUlKLE9BQU8sQ0FBQ0ssbUJBQW1CO0FBQ3RJLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNhLG1CQUFtQkEsQ0FBQzVCLFNBQVMsRUFBRTtFQUMzQztJQUNJQSxTQUFTLENBQUM2QixpQkFBaUI7SUFDM0I3QixTQUFTLENBQUM4Qix1QkFBdUI7SUFDakM5QixTQUFTLENBQUMrQixvQkFBb0I7SUFDOUIvQixTQUFTLENBQUNnQyxtQkFBbUI7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsYUFBYUEsQ0FBQ0MsRUFBRSxFQUFFO0VBQzlCQSxFQUFFLEdBQUdBLEVBQUUsSUFBSS9CLFNBQVMsQ0FBQ0csU0FBUztFQUM5QixJQUFJQyxLQUFLLEdBQUcyQixFQUFFLENBQUMzQixLQUFLLENBQUMseUNBQXlDLENBQUM7RUFDL0QsSUFBSSxDQUFDQSxLQUFLLElBQUk0QixXQUFXLENBQUMsQ0FBQyxFQUFFO0lBQ3pCO0lBQ0E7SUFDQTVCLEtBQUssR0FBRzJCLEVBQUUsQ0FBQzNCLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQztFQUN4RDs7RUFFQSxPQUFPQSxLQUFLLEdBQUdBLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzZCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUNsRCxDQUFDOztBQUVEO0FBQ0E7QUFDTyxTQUFTQyxpQkFBaUJBLENBQUNILEVBQUUsRUFBRTtFQUNsQ0EsRUFBRSxHQUFHQSxFQUFFLElBQUkvQixTQUFTLENBQUNHLFNBQVM7RUFDOUIsSUFBSUMsS0FBSyxHQUFHMkIsRUFBRSxDQUFDM0IsS0FBSyxDQUFDLHFCQUFxQixDQUFDO0VBQzNDLE9BQU9BLEtBQUssR0FBR0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7QUFDbkMsQ0FBQzs7QUFFRDtBQUNPLFNBQVMrQixhQUFhQSxDQUFBLEVBQUc7RUFDNUIsT0FBUSxPQUFPQyxNQUFNLEtBQUssV0FBVyxLQUFLLGNBQWMsSUFBSUEsTUFBTSxJQUFJcEMsU0FBUyxDQUFDcUMsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN2RyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLFlBQVksR0FBR3ZDLFNBQVMsS0FBSyxnQkFBZ0IsQ0FBQ3dDLElBQUksQ0FBQ3ZDLFNBQVMsQ0FBQ0csU0FBUyxDQUFDcUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMvRHhDLFNBQVMsQ0FBQ3lDLFFBQVEsS0FBSyxVQUFVLElBQUl6QyxTQUFTLENBQUNxQyxjQUFjLEdBQUcsQ0FBRTtBQUNsRSxrQkFBa0IsQ0FBQ0UsSUFBSSxFQUFBRyxtQkFBQSxHQUFDMUMsU0FBUyxDQUFDeUMsUUFBUSxjQUFBQyxtQkFBQSx1QkFBbEJBLG1CQUFBLENBQW9CRixXQUFXLENBQUMsQ0FBQyxDQUFFLENBQUM7QUFDakYsU0FBU1IsV0FBV0EsQ0FBQSxFQUFHO0VBQzFCLE9BQU9NLFlBQVk7QUFDdkI7O0FBRUEsTUFBTUssZ0JBQWdCLEdBQUc1QyxTQUFTLElBQUtDLFNBQVMsQ0FBQ0csU0FBUyxDQUFDcUMsV0FBVyxDQUFDLENBQUMsQ0FBQ0ksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBRTtBQUM1RixTQUFTQyxlQUFlQSxDQUFBLEVBQUc7RUFDOUIsT0FBT0YsZ0JBQWdCO0FBQzNCOztBQUVPLFNBQVNHLGNBQWNBLENBQUEsRUFBRztFQUM3QixJQUFJLENBQUMvQyxTQUFTLEVBQUUsT0FBTyxLQUFLO0VBQzVCLE9BQU9pQyxXQUFXLENBQUMsQ0FBQyxJQUFJYSxlQUFlLENBQUMsQ0FBQztBQUM3QyxDQUFDOztBQUVNLFNBQVNFLGlCQUFpQkEsQ0FBQSxFQUFHO0VBQ2hDO0lBQ0lELGNBQWMsQ0FBQyxDQUFDO0lBQ2ZsRCxPQUFPLENBQUNvRCxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQ0MsT0FBTyxJQUFJckQsT0FBTyxDQUFDb0QsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUNDLE9BQU8sQ0FBQzs7QUFFL0c7O0FBRU8sU0FBU0MsUUFBUUEsQ0FBQSxFQUFHO0VBQ3ZCLElBQUksQ0FBQ25ELFNBQVMsRUFBRSxPQUFPLEtBQUs7RUFDNUIsSUFBSW9ELEdBQUcsR0FBR25ELFNBQVMsQ0FBQ0csU0FBUyxDQUFDcUMsV0FBVyxDQUFDLENBQUM7RUFDM0MsT0FBU1csR0FBRyxDQUFDUCxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQU1PLEdBQUcsQ0FBQ1AsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBRTtBQUM1RSxDQUFDOztBQUVNLFNBQVNRLFNBQVNBLENBQUEsRUFBRztFQUN4QixJQUFJLENBQUNyRCxTQUFTLEVBQUUsT0FBTyxLQUFLO0VBQzVCLElBQUlvRCxHQUFHLEdBQUduRCxTQUFTLENBQUNHLFNBQVMsQ0FBQ3FDLFdBQVcsQ0FBQyxDQUFDO0VBQzNDLE9BQVFXLEdBQUcsQ0FBQ1AsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxDQUFDOztBQUVNLFNBQVNTLFFBQVFBLENBQUEsRUFBRztFQUN2QixJQUFJLENBQUN0RCxTQUFTLEVBQUUsT0FBTyxLQUFLO0VBQzVCLElBQUlvRCxHQUFHLEdBQUduRCxTQUFTLENBQUNHLFNBQVMsQ0FBQ3FDLFdBQVcsQ0FBQyxDQUFDO0VBQzNDLE9BQVFXLEdBQUcsQ0FBQ1AsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDOztBQUVNLFNBQVNVLEtBQUtBLENBQUEsRUFBRztFQUNwQixJQUFJLENBQUN2RCxTQUFTLEVBQUUsT0FBTyxLQUFLO0VBQzVCLElBQUlvRCxHQUFHLEdBQUduRCxTQUFTLENBQUNHLFNBQVMsQ0FBQ3FDLFdBQVcsQ0FBQyxDQUFDO0VBQzNDLE9BQVFXLEdBQUcsQ0FBQ1AsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFLLENBQUNaLFdBQVcsQ0FBQyxDQUFDO0FBQzNELENBQUM7O0FBRU0sU0FBU3VCLFNBQVNBLENBQUEsRUFBRztFQUN4QixJQUFJLENBQUN4RCxTQUFTLEVBQUUsT0FBTyxLQUFLO0VBQzVCLElBQUlvRCxHQUFHLEdBQUduRCxTQUFTLENBQUNHLFNBQVMsQ0FBQ3FDLFdBQVcsQ0FBQyxDQUFDO0VBQzNDLE9BQVNXLEdBQUcsQ0FBQ1AsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJTyxHQUFHLENBQUNQLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekUsQ0FBQzs7QUFFTSxTQUFTWSxZQUFZQSxDQUFDQyxHQUFHLEVBQUVDLEdBQUcsRUFBRTtFQUNuQyxLQUFLLElBQUlDLEdBQUcsSUFBSUQsR0FBRyxFQUFFO0lBQ2pCLElBQUlBLEdBQUcsQ0FBQ0UsY0FBYyxDQUFDRCxHQUFHLENBQUM7SUFDdkJGLEdBQUcsQ0FBQ0UsR0FBRyxDQUFDLEdBQUdELEdBQUcsQ0FBQ0MsR0FBRyxDQUFDO0VBQzNCO0VBQ0EsT0FBT0YsR0FBRztBQUNkLENBQUM7O0FBRUQ7QUFDQSxTQUFTSSxrQkFBa0JBLENBQUNDLEtBQUssRUFBRTtFQUMvQixJQUFJQyxJQUFJLEdBQUduRSxPQUFPLENBQUNnRSxjQUFjLENBQUMsYUFBYSxDQUFDLEdBQUdoRSxPQUFPLENBQUNvRSxXQUFXLEdBQUduRSxTQUFTLENBQUNvRSxlQUFlLENBQUNDLFVBQVU7RUFDN0csSUFBSUMsSUFBSSxHQUFHdkUsT0FBTyxDQUFDZ0UsY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUFHaEUsT0FBTyxDQUFDd0UsV0FBVyxHQUFHdkUsU0FBUyxDQUFDb0UsZUFBZSxDQUFDSSxTQUFTOztFQUU1RztFQUNBLElBQUlDLEtBQUssR0FBRyxPQUFPUixLQUFLLENBQUNRLEtBQUssS0FBSyxXQUFXLEdBQUdSLEtBQUssQ0FBQ1MsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDRCxLQUFLLEdBQUdSLEtBQUssQ0FBQ1EsS0FBSztFQUM1RixJQUFJRSxLQUFLLEdBQUcsT0FBT1YsS0FBSyxDQUFDVSxLQUFLLEtBQUssV0FBVyxHQUFHVixLQUFLLENBQUNTLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxHQUFHVixLQUFLLENBQUNVLEtBQUs7O0VBRTVGO0VBQ0EsSUFBSWpFLE9BQU8sR0FBR1YsU0FBUyxDQUFDNEUsZ0JBQWdCLENBQUNILEtBQUssR0FBR1AsSUFBSSxFQUFFUyxLQUFLLEdBQUdMLElBQUksQ0FBQztFQUNwRSxJQUFJLENBQUM1RCxPQUFPLElBQUlBLE9BQU8sQ0FBQ21FLFFBQVEsS0FBSyxRQUFRO0VBQ3pDLE9BQU8sSUFBSTtFQUNmO0VBQ0EsSUFBSW5FLE9BQU8sQ0FBQ29FLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLE1BQU07RUFDckQsT0FBTyxJQUFJO0VBQ2Y7RUFDQTtFQUNBYixLQUFLLENBQUNjLGNBQWMsQ0FBQyxDQUFDO0VBQ3RCLE9BQU8sS0FBSztBQUNoQjs7QUFFQTtBQUNPLFNBQVNDLDBCQUEwQkEsQ0FBQSxFQUFHO0VBQ3pDLElBQUkvQixjQUFjLENBQUMsQ0FBQyxJQUFJSSxRQUFRLENBQUMsQ0FBQyxFQUFFO0lBQ2hDO0lBQ0E7SUFDQTtJQUNBckQsU0FBUyxDQUFDb0UsZUFBZSxDQUFDYSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUVqQixrQkFBa0IsRUFBRSxJQUFJLENBQUM7SUFDbEZoRSxTQUFTLENBQUNvRSxlQUFlLENBQUNhLGdCQUFnQixDQUFDLFdBQVcsRUFBRWpCLGtCQUFrQixFQUFFLElBQUksQ0FBQztJQUNqRmhFLFNBQVMsQ0FBQ29FLGVBQWUsQ0FBQ2EsZ0JBQWdCLENBQUMsZUFBZSxFQUFFakIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDO0lBQ3JGaEUsU0FBUyxDQUFDb0UsZUFBZSxDQUFDYSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUVqQixrQkFBa0IsRUFBRSxJQUFJLENBQUM7RUFDcEY7QUFDSixDQUFDOztBQUVEO0FBQ0E7QUFDTyxTQUFTa0IseUJBQXlCQSxDQUFBLEVBQUc7RUFDeEMsSUFBSWpDLGNBQWMsQ0FBQyxDQUFDLElBQUlJLFFBQVEsQ0FBQyxDQUFDLEVBQUU7SUFDaEM7SUFDQTtJQUNBO0lBQ0FyRCxTQUFTLENBQUNvRSxlQUFlLENBQUNlLG1CQUFtQixDQUFDLFlBQVksRUFBRW5CLGtCQUFrQixFQUFFLElBQUksQ0FBQztJQUNyRmhFLFNBQVMsQ0FBQ29FLGVBQWUsQ0FBQ2UsbUJBQW1CLENBQUMsV0FBVyxFQUFFbkIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDO0lBQ3BGaEUsU0FBUyxDQUFDb0UsZUFBZSxDQUFDZSxtQkFBbUIsQ0FBQyxlQUFlLEVBQUVuQixrQkFBa0IsRUFBRSxJQUFJLENBQUM7SUFDeEZoRSxTQUFTLENBQUNvRSxlQUFlLENBQUNlLG1CQUFtQixDQUFDLFVBQVUsRUFBRW5CLGtCQUFrQixFQUFFLElBQUksQ0FBQztFQUN2RjtBQUNKLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNPLFNBQVNvQixpQkFBaUJBLENBQUNDLENBQUMsRUFBRTtFQUNqQztFQUNBO0VBQ0EsSUFBSUEsQ0FBQyxDQUFDQyxNQUFNLENBQUNDLFNBQVMsS0FBS0YsQ0FBQyxDQUFDQyxNQUFNLENBQUNDLFNBQVMsQ0FBQ3hDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDakVzQyxDQUFDLENBQUNDLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDeEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzVDO0VBQ0pzQyxDQUFDLENBQUNOLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBRTtFQUNyQk0sQ0FBQyxDQUFDRyxlQUFlLENBQUMsQ0FBQztFQUNuQkgsQ0FBQyxDQUFDQyxNQUFNLENBQUNHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBSTtBQUN6QiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9jb21wYXQuanM/MjgxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gJy4vZ2xvYmFsJztcblxuY29uc3QgX3dpbmRvdyA9IGdldEdsb2JhbCgpO1xuY29uc3QgX2RvY3VtZW50ID0gX3dpbmRvdyAmJiBfd2luZG93LmRvY3VtZW50O1xuXG5leHBvcnQgeyBnZXRHbG9iYWwgfTtcblxuZXhwb3J0IGNvbnN0IGlzQnJvd3NlciA9ICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiKTtcblxuZXhwb3J0IGNvbnN0IGlzTm9kZUpTID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICFpc0Jyb3dzZXI7XG59O1xuXG5leHBvcnQgbGV0IGlzSUUxMSA9IGlzQnJvd3NlciAmJiAhIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2V8VHJpZGVudFxcLzdcXC4vKTtcblxuLy8gQWx0aG91Z2ggdGhlIG5hbWluZyBpcyBtaXNsZWFkaW5nLCBpc0lFMTEgY29udGFpbnMgRWRnZSB0b28gZm9yIHNvbWUgbGVnYWN5IHJlYXNvbi5cbi8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpbnN0ZWFkIG9mIHJlbmFtaW5nIGBpc0lFMTFgIHRvIGBpc0lFT3JFZGdlYCwgSSBqdXN0IGFkZGVkIGBpc0lFMTFPbmx5YC5cbmV4cG9ydCBsZXQgaXNJRTExT25seSA9IGlzQnJvd3NlciAmJiAhIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1RyaWRlbnRcXC83XFwuLyk7XG5cbi8vIExhdW5jaCBmdWxsIHNjcmVlbiBvbiB0aGUgZ2l2ZW4gZWxlbWVudCB3aXRoIHRoZSBhdmFpbGFibGUgbWV0aG9kXG5leHBvcnQgZnVuY3Rpb24gbGF1bmNoRnVsbHNjcmVlbihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKGVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbihvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgZWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbihvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbihvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtZW50Lm1zUmVxdWVzdEZ1bGxzY3JlZW4ob3B0aW9ucyk7XG4gICAgfVxufTtcblxuLy8gRXhpdCBmdWxsIHNjcmVlbiB3aXRoIHRoZSBhdmFpbGFibGUgbWV0aG9kXG5leHBvcnQgZnVuY3Rpb24gZXhpdEZ1bGxzY3JlZW4oX2RvY3VtZW50KSB7XG4gICAgaWYgKCFpbkZ1bGxzY3JlZW4oX2RvY3VtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChfZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgX2RvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfSBlbHNlIGlmIChfZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgICBfZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoX2RvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIF9kb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoX2RvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgX2RvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKTtcbiAgICB9XG59O1xuXG4vLyBEZXRlcm1pbmVzIGlmIHRoZSBicm93c2VyIGlzIGluIGZ1bGwgc2NyZWVuXG5leHBvcnQgZnVuY3Rpb24gaW5GdWxsc2NyZWVuKF9kb2N1bWVudCl7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIE1zLUVkZ2UgdGhhdCBoYXMgd2Via2l0SXNGdWxsU2NyZWVuIHdpdGggY29ycmVjdCB2YWx1ZVxuICAgIC8vIGFuZCBmdWxsc2NyZWVuRW5hYmxlZCB3aXRoIHdyb25nIHZhbHVlICh0aGFua3MgTVMpXG5cbiAgICBpZiAoXCJ3ZWJraXRJc0Z1bGxTY3JlZW5cIiBpbiBfZG9jdW1lbnQpIHJldHVybiAhIShfZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuKTtcbiAgICBpZiAoXCJmdWxsc2NyZWVuRWxlbWVudFwiIGluIF9kb2N1bWVudCkgcmV0dXJuICEhKF9kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCk7XG4gICAgaWYgKFwibW96RnVsbFNjcmVlbkVsZW1lbnRcIiBpbiBfZG9jdW1lbnQpIHJldHVybiAhIShfZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnQpO1xuICAgIGlmIChcIm1zRnVsbHNjcmVlbkVsZW1lbnRcIiBpbiBfZG9jdW1lbnQpIHJldHVybiAhIShfZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudCk7XG5cbiAgICByZXR1cm4gISEoX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIudmlld2VyLWZpbGwtYnJvd3NlclwiKSk7IC8vIEZhbGxiYWNrIGZvciBpUGFkXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZnVsbHNjcmVlbkVsZW1lbnQoX2RvY3VtZW50KSB7XG4gICAgcmV0dXJuIF9kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCB8fCBfZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnQgfHwgX2RvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IHx8IF9kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsbHNjcmVlbkF2YWlsYWJsZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4gfHwgZWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbiB8fCBlbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIHx8IGVsZW1lbnQubXNSZXF1ZXN0RnVsbHNjcmVlbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGZ1bGwgc2NyZWVuIG1vZGUgaXMgZW5hYmxlZC4gXG4gKiBAcGFyYW0ge0RvY3VtZW50fSBfZG9jdW1lbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IC0gdHJ1ZSBpZiBmdWxsIHNjcmVlbiBtb2RlIGlzIGVuYWJsZWQgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxsc2NyZWVuRW5hYmxlZChfZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBfZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWQgfHxcbiAgICAgICAgX2RvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkIHx8XG4gICAgICAgIF9kb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICBfZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZFxuICAgICk7XG59XG5cbi8vIEdldCB0aGUgSU9TIHZlcnNpb24gdGhyb3VnaCB1c2VyIGFnZW50LlxuLy8gUmV0dXJuIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiBJT1MsIGUuZy4gMTQuMS4xLCAxNS40IC4uLiBvciBlbXB0eSBzdHJpbmcgaWYgdmVyc2lvbiBjb3VsZG4ndCBiZSBkZXRlY3RlZFxuLy8gVXNlciBhZ2VudHMgY2FuIGJlIGNoYW5nZWQgYW5kIHRodXMgbWlnaHQgYmUgaW5hY2N1cmF0ZSBvciBpbmNvbXBhdGlibGUgYXQgc29tZSBwb2ludCwgYnV0IHRoaXMgcGF0dGVyblxuLy8gaGFzIGJlZW4gc3RhYmxlIGF0IGxlYXN0IHNpbmNlIElPUyA1XG5leHBvcnQgZnVuY3Rpb24gZ2V0SU9TVmVyc2lvbih1YSkge1xuICAgIHVhID0gdWEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICB2YXIgbWF0Y2ggPSB1YS5tYXRjaCgvT1MgKChcXGQrKV8oXFxkKykoXyhcXGQrKSk/KSBsaWtlIE1hYyBPUyBYLyk7XG4gICAgaWYgKCFtYXRjaCAmJiBpc0lPU0RldmljZSgpKSB7XG4gICAgICAgIC8vIE9uIElQYWRPUyBTYWZhcmkgcmVxdWVzdHMgdGhlIGRlc2t0b3AgdmVyc2lvbiBieSBkZWZhdWx0IHdpdGggYSBNYWNPUyB1c2VyLlxuICAgICAgICAvLyBUaGUgbWFqb3IgdmVyc2lvbiBzZWVtcyB0byBiZSByZWxpYWJsZSwgYnV0IHRoZSBtaW5vciB2ZXJzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC5cbiAgICAgICAgbWF0Y2ggPSB1YS5tYXRjaCgvXFwvKChcXGQrKVxcLihcXGQrKShcXC5cXGQpPykgU2FmYXJpXFwvLyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0ucmVwbGFjZSgnXycsICcuJykgOiBcIlwiO1xufTtcblxuLy8gR2V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBhbmRyb2lkIGRldmljZSB0aHJvdWdoIHVzZXIgYWdlbnQuXG4vLyBSZXR1cm4gdGhlIHZlcnNpb24gc3RyaW5nIG9mIGFuZHJvaWQgZGV2aWNlLCBlLmcuIDQuNCwgNS4wLi4uXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5kcm9pZFZlcnNpb24odWEpIHtcbiAgICB1YSA9IHVhIHx8IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgdmFyIG1hdGNoID0gdWEubWF0Y2goL0FuZHJvaWRcXHMoWzAtOVxcLl0qKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogZmFsc2U7XG59O1xuXG4vLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHRvdWNoIG9yIG5vdG91Y2ggZGV2aWNlLlxuZXhwb3J0IGZ1bmN0aW9uIGlzVG91Y2hEZXZpY2UoKSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDApKTtcbn07XG5cbi8vIFNpbmNlIGlPUyAxMywgdGhlIGlQYWQgaWRlbnRpZmllcyBpdHNlbGYgYXMgYSBkZXNrdG9wLCBzbyB0aGUgb25seSB3YXkgdG8gcmVsaWFibHkgZGV0ZWN0IGlzIHRvIHNlYXJjaCBmb3IgbXVsdGl0b3VjaCBjYXBhYmlsaXRpZXNcbi8vIChpbnNvZmFyIGFzIG5vIG90aGVyIEFwcGxlIGRldmljZSBpbXBsZW1lbnRzIGl0KVxuLy8gSXQgYWxzbyByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgaW4gYSB3b3JrZXIgc28gd2UgbmVlZCB0byBsb29rIGluIHRoZSBwbGF0Zm9ybSBhcyB3ZWxsIHRvIGRpc3Rpbmd1aXNoIGZyb20gYSByZWd1bGFyIE1hY1xuY29uc3QgX2lzSU9TRGV2aWNlID0gaXNCcm93c2VyICYmICgvaXAoYWR8aG9uZXxvZCkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ01hY0ludGVsJyAmJiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAxKSBcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgvXmlwKGFkfGhvbmV8b2QpJC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0/LnRvTG93ZXJDYXNlKCkpKSk7XG5leHBvcnQgZnVuY3Rpb24gaXNJT1NEZXZpY2UoKSB7XG4gICAgcmV0dXJuIF9pc0lPU0RldmljZTtcbn1cblxuY29uc3QgX2lzQW5kcm9pZERldmljZSA9IGlzQnJvd3NlciAmJiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2FuZHJvaWQnKSAhPT0gLTEpO1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW5kcm9pZERldmljZSgpIHtcbiAgICByZXR1cm4gX2lzQW5kcm9pZERldmljZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9iaWxlRGV2aWNlKCkge1xuICAgIGlmICghaXNCcm93c2VyKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGlzSU9TRGV2aWNlKCkgfHwgaXNBbmRyb2lkRGV2aWNlKCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQaG9uZUZvcm1GYWN0b3IoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgaXNNb2JpbGVEZXZpY2UoKSAmJlxuICAgICAgICAoX3dpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA3NTBweCknKS5tYXRjaGVzIHx8IF93aW5kb3cubWF0Y2hNZWRpYSgnKG1heC1oZWlnaHQ6IDc1MHB4KScpLm1hdGNoZXMpXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICAgIGlmICghaXNCcm93c2VyKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIF91YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKChfdWEuaW5kZXhPZihcInNhZmFyaVwiKSAhPT0gLTEpICYmIChfdWEuaW5kZXhPZihcImNocm9tZVwiKSA9PT0gLTEpKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpcmVmb3goKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgX3VhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoX3VhLmluZGV4T2YoXCJmaXJlZm94XCIpICE9PSAtMSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDaHJvbWUoKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgX3VhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoX3VhLmluZGV4T2YoXCJjaHJvbWVcIikgIT09IC0xKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hYygpIHtcbiAgICBpZiAoIWlzQnJvd3NlcikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBfdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChfdWEuaW5kZXhPZihcIm1hYyBvc1wiKSAhPT0gLTEpICYmICFpc0lPU0RldmljZSgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93cygpIHtcbiAgICBpZiAoIWlzQnJvd3NlcikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBfdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuICAoX3VhLmluZGV4T2YoXCJ3aW4zMlwiKSAhPT0gLTEgfHwgX3VhLmluZGV4T2YoXCJ3aW5kb3dzXCIpICE9PSAtMSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gT2JqZWN0QXNzaWduKGRlcywgc3JjKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgICBpZiAoc3JjLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICBkZXNba2V5XSA9IHNyY1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gZGVzO1xufTtcblxuLy8gSGFjayB0byB3b3JrIGFyb3VuZCBTYWZhcmkncyB1c2Ugb2YgcGluY2ggYW5kIHBhbiBpbnNpZGUgdGhlIHZpZXdlciBjYW52YXMuXG5mdW5jdGlvbiBkaXNhYmxlVG91Y2hTYWZhcmkoZXZlbnQpIHtcbiAgICB2YXIgeE9mZiA9IF93aW5kb3cuaGFzT3duUHJvcGVydHkoXCJwYWdlWE9mZnNldFwiKSA/IF93aW5kb3cucGFnZVhPZmZzZXQgOiBfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdmFyIHlPZmYgPSBfd2luZG93Lmhhc093blByb3BlcnR5KFwicGFnZVlPZmZzZXRcIikgPyBfd2luZG93LnBhZ2VZT2Zmc2V0IDogX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAvLyBldmVudC5wYWdlWCBhbmQgZXZlbnQucGFnZVkgcmV0dXJuZWQgdW5kZWZpbmVkIHRocm91Z2ggQ2hyb21lIGNvbnNvbGUgZGV2aWNlIG1vZGVcbiAgICB2YXIgcGFnZVggPSB0eXBlb2YgZXZlbnQucGFnZVggPT09IFwidW5kZWZpbmVkXCIgPyBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCA6IGV2ZW50LnBhZ2VYO1xuICAgIHZhciBwYWdlWSA9IHR5cGVvZiBldmVudC5wYWdlWSA9PT0gXCJ1bmRlZmluZWRcIiA/IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZIDogZXZlbnQucGFnZVk7XG5cbiAgICAvLyBJZiB3ZSBhcmVuJ3QgaW5zaWRlIHRoZSBjYW52YXMsIHRoZW4gYWxsb3cgZGVmYXVsdCBwcm9wYWdhdGlvbiBvZiB0aGUgZXZlbnRcbiAgICB2YXIgZWxlbWVudCA9IF9kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHBhZ2VYIC0geE9mZiwgcGFnZVkgLSB5T2ZmKTtcbiAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlTmFtZSAhPT0gJ0NBTlZBUycpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIElmIGl0J3MgYSBDQU5WQVMsIGNoZWNrIHRoYXQgaXQncyBvd25lZCBieSB1c1xuICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS12aWV3ZXItY2FudmFzJykgIT09ICd0cnVlJylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gSW5zaWRlIHRoZSBjYW52YXMsIHByZXZlbnQgdGhlIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgdG8gU2FmYXJpJ3NhZmVseVxuICAgIC8vIHN0YW5kYXJkIGhhbmRsZXJzLCB3aGljaCB3aWxsIHBhbiBhbmQgem9vbSB0aGUgcGFnZS5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gSGFjayB0byB3b3JrIGFyb3VuZCBTYWZhcmkncyB1c2Ugb2YgcGluY2ggYW5kIHBhbiBpbnNpZGUgdGhlIHZpZXdlciBjYW52YXMuXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZURvY3VtZW50VG91Y2hTYWZhcmkoKSB7XG4gICAgaWYgKGlzTW9iaWxlRGV2aWNlKCkgJiYgaXNTYWZhcmkoKSkge1xuICAgICAgICAvLyBTYWZhcmkgbW9iaWxlIGRpc2FibGUgZGVmYXVsdCB0b3VjaCBoYW5kbGluZyBpbnNpZGUgdmlld2VyIGNhbnZhc1xuICAgICAgICAvLyBVc2UgY2FwdHVyZSB0byBtYWtlIHN1cmUgU2FmYXJpIGRvZXNuJ3QgY2FwdHVyZSB0aGUgdG91Y2hlcyBhbmQgcHJldmVudFxuICAgICAgICAvLyB1cyBmcm9tIGRpc2FibGluZyB0aGVtLlxuICAgICAgICBfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBkaXNhYmxlVG91Y2hTYWZhcmksIHRydWUpO1xuICAgICAgICBfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGRpc2FibGVUb3VjaFNhZmFyaSwgdHJ1ZSk7XG4gICAgICAgIF9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWxlZCcsIGRpc2FibGVUb3VjaFNhZmFyaSwgdHJ1ZSk7XG4gICAgICAgIF9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBkaXNhYmxlVG91Y2hTYWZhcmksIHRydWUpO1xuICAgIH1cbn07XG5cbi8vIEhhY2sgdG8gd29yayBhcm91bmQgU2FmYXJpJ3MgdXNlIG9mIHBpbmNoIGFuZCBwYW4gaW5zaWRlIHRoZSB2aWV3ZXIgY2FudmFzLlxuLy8gVGhpcyBtZXRob2QgaXMgbm90IGJlaW5nIGludm9rZWQgZXhwbGljaXRseS5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVEb2N1bWVudFRvdWNoU2FmYXJpKCkge1xuICAgIGlmIChpc01vYmlsZURldmljZSgpICYmIGlzU2FmYXJpKCkpIHtcbiAgICAgICAgLy8gU2FmYXJpIG1vYmlsZSBkaXNhYmxlIGRlZmF1bHQgdG91Y2ggaGFuZGxpbmcgaW5zaWRlIHZpZXdlciBjYW52YXNcbiAgICAgICAgLy8gVXNlIGNhcHR1cmUgdG8gbWFrZSBzdXJlIFNhZmFyaSBkb2Vzbid0IGNhcHR1cmUgdGhlIHRvdWNoZXMgYW5kIHByZXZlbnRcbiAgICAgICAgLy8gdXMgZnJvbSBkaXNhYmxpbmcgdGhlbS5cbiAgICAgICAgX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZGlzYWJsZVRvdWNoU2FmYXJpLCB0cnVlKTtcbiAgICAgICAgX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBkaXNhYmxlVG91Y2hTYWZhcmksIHRydWUpO1xuICAgICAgICBfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsZWQnLCBkaXNhYmxlVG91Y2hTYWZhcmksIHRydWUpO1xuICAgICAgICBfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZGlzYWJsZVRvdWNoU2FmYXJpLCB0cnVlKTtcbiAgICB9XG59O1xuXG5cbi8vIENvbnZlcnQgdG91Y2hzdGFydCBldmVudCB0byBjbGljayB0byByZW1vdmUgdGhlIGRlbGF5IGJldHdlZW4gdGhlIHRvdWNoIGFuZFxuLy8gdGhlIGNsaWNrIGV2ZW50IHdoaWNoIGlzIHNlbnQgYWZ0ZXIgdG91Y2hzdGFydCB3aXRoIGFib3V0IDMwMG1zIGRlbGV5LlxuLy8gU2hvdWxkIGJlIHVzZWQgaW4gVUkgZWxlbWVudHMgb24gdG91Y2ggZGV2aWNlcy5cbmV4cG9ydCBmdW5jdGlvbiB0b3VjaFN0YXJ0VG9DbGljayhlKSB7XG4gICAgLy8gQnV0dG9ucyB0aGF0IGFjdGl2YXRlIGZ1bGxzY3JlZW4gYXJlIGEgc3BlY2lhbCBjYXNlLiBUaGUgSFRNTDUgZnVsbHNjcmVlbiBzcGVjXG4gICAgLy8gcmVxdWlyZXMgdGhlIG9yaWdpbmFsIHVzZXIgZ2VzdHVyZSBzaWduYWwgdG8gYXZvaWQgYSBzZWN1cml0eSBpc3N1ZS4gIFNlZSBMTVYtMjM5NiBhbmQgTE1WLTIzMjZcbiAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lICYmIChlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImZ1bGxzY3JlZW5cIikgPiAtMVxuICAgICAgICB8fCBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcIndlYnZyXCIpID4gLTEpKVxuICAgICAgICByZXR1cm47XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAgLy8gU3RvcHMgdGhlIGZpcmluZyBvZiBkZWxheWVkIGNsaWNrIGV2ZW50LlxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS50YXJnZXQuY2xpY2soKTsgICAgLy8gTWFwcyB0byBpbW1lZGlhdGUgY2xpY2suXG59XG5cbiJdLCJuYW1lcyI6WyJnZXRHbG9iYWwiLCJfd2luZG93IiwiX2RvY3VtZW50IiwiZG9jdW1lbnQiLCJpc0Jyb3dzZXIiLCJuYXZpZ2F0b3IiLCJpc05vZGVKUyIsImlzSUUxMSIsInVzZXJBZ2VudCIsIm1hdGNoIiwiaXNJRTExT25seSIsImxhdW5jaEZ1bGxzY3JlZW4iLCJlbGVtZW50Iiwib3B0aW9ucyIsInJlcXVlc3RGdWxsc2NyZWVuIiwibW96UmVxdWVzdEZ1bGxTY3JlZW4iLCJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiIsIm1zUmVxdWVzdEZ1bGxzY3JlZW4iLCJleGl0RnVsbHNjcmVlbiIsImluRnVsbHNjcmVlbiIsIm1vekNhbmNlbEZ1bGxTY3JlZW4iLCJ3ZWJraXRFeGl0RnVsbHNjcmVlbiIsIm1zRXhpdEZ1bGxzY3JlZW4iLCJ3ZWJraXRJc0Z1bGxTY3JlZW4iLCJmdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50IiwibXNGdWxsc2NyZWVuRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsImlzRnVsbHNjcmVlbkF2YWlsYWJsZSIsImlzRnVsbHNjcmVlbkVuYWJsZWQiLCJmdWxsc2NyZWVuRW5hYmxlZCIsIndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkIiwibW96RnVsbFNjcmVlbkVuYWJsZWQiLCJtc0Z1bGxzY3JlZW5FbmFibGVkIiwiZ2V0SU9TVmVyc2lvbiIsInVhIiwiaXNJT1NEZXZpY2UiLCJyZXBsYWNlIiwiZ2V0QW5kcm9pZFZlcnNpb24iLCJpc1RvdWNoRGV2aWNlIiwid2luZG93IiwibWF4VG91Y2hQb2ludHMiLCJfaXNJT1NEZXZpY2UiLCJ0ZXN0IiwidG9Mb3dlckNhc2UiLCJwbGF0Zm9ybSIsIl9uYXZpZ2F0b3IkcGxhdGZvcm0iLCJfaXNBbmRyb2lkRGV2aWNlIiwiaW5kZXhPZiIsImlzQW5kcm9pZERldmljZSIsImlzTW9iaWxlRGV2aWNlIiwiaXNQaG9uZUZvcm1GYWN0b3IiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImlzU2FmYXJpIiwiX3VhIiwiaXNGaXJlZm94IiwiaXNDaHJvbWUiLCJpc01hYyIsImlzV2luZG93cyIsIk9iamVjdEFzc2lnbiIsImRlcyIsInNyYyIsImtleSIsImhhc093blByb3BlcnR5IiwiZGlzYWJsZVRvdWNoU2FmYXJpIiwiZXZlbnQiLCJ4T2ZmIiwicGFnZVhPZmZzZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGxMZWZ0IiwieU9mZiIsInBhZ2VZT2Zmc2V0Iiwic2Nyb2xsVG9wIiwicGFnZVgiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2VZIiwiZWxlbWVudEZyb21Qb2ludCIsIm5vZGVOYW1lIiwiZ2V0QXR0cmlidXRlIiwicHJldmVudERlZmF1bHQiLCJkaXNhYmxlRG9jdW1lbnRUb3VjaFNhZmFyaSIsImFkZEV2ZW50TGlzdGVuZXIiLCJlbmFibGVEb2N1bWVudFRvdWNoU2FmYXJpIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRvdWNoU3RhcnRUb0NsaWNrIiwiZSIsInRhcmdldCIsImNsYXNzTmFtZSIsInN0b3BQcm9wYWdhdGlvbiIsImNsaWNrIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/compat.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/common/InputStream.js": /*!******************************************************!*\ !*** ./src/file-loaders/lmvtk/common/InputStream.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ InputStream: () => (/* binding */ InputStream)\n/* harmony export */ });\n/* harmony import */ var _StringUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./StringUtils */ \"./src/file-loaders/lmvtk/common/StringUtils.js\");\n\n\n\"use strict\";\n\n//We will use these shared memory arrays to\n//convert from bytes to the desired data type.\nvar convBuf = new ArrayBuffer(8);\nvar convUint8 = new Uint8Array(convBuf);\nvar convUint16 = new Uint16Array(convBuf);\nvar convInt32 = new Int32Array(convBuf);\nvar convUint32 = new Uint32Array(convBuf);\nvar convFloat32 = new Float32Array(convBuf);\nvar convFloat64 = new Float64Array(convBuf);\n\n\n/** @constructor */\nfunction InputStream(buf) {\n this.buffer = buf;\n this.offset = 0;\n this.byteLength = buf.length;\n}\n\n\nInputStream.prototype.seek = function (off) {\n this.offset = off;\n};\n\nInputStream.prototype.getBytes = function (len) {\n var ret = new Uint8Array(this.buffer.buffer, this.offset, len);\n this.offset += len;\n return ret;\n};\n\nInputStream.prototype.getVarints = function () {\n var b;\n var value = 0;\n var shiftBy = 0;\n do {\n b = this.buffer[this.offset++];\n value |= (b & 0x7f) << shiftBy;\n shiftBy +=7 ;\n } while (b & 0x80);\n return value;\n};\n\nInputStream.prototype.getUint8=f unction () {\n return this.buffer[this.offset++];\n};\n\nInputStream.prototype.getUint16=f unction () {\n convUint8[0]=t his.buffer[this.offset++];\n convUint8[1]=t his.buffer[this.offset++];\n return convUint16[0];\n};\n\nInputStream.prototype.getInt16=f unction () {\n var tmp=t his.getUint16();\n //make negative integer if the ushort is negative\n if (tmp> 0x7fff)\n tmp = tmp | 0xffff0000;\n return tmp;\n};\n\nInputStream.prototype.getInt32 = function () {\n var src = this.buffer;\n var dst = convUint8;\n var off = this.offset;\n dst[0] = src[off];\n dst[1] = src[off + 1];\n dst[2] = src[off + 2];\n dst[3] = src[off + 3];\n this.offset += 4;\n return convInt32[0];\n};\n\nInputStream.prototype.getUint32 = function () {\n var src = this.buffer;\n var dst = convUint8;\n var off = this.offset;\n dst[0] = src[off];\n dst[1] = src[off + 1];\n dst[2] = src[off + 2];\n dst[3] = src[off + 3];\n this.offset += 4;\n return convUint32[0];\n};\n\nInputStream.prototype.getFloat32 = function () {\n var src = this.buffer;\n var dst = convUint8;\n var off = this.offset;\n dst[0] = src[off];\n dst[1] = src[off + 1];\n dst[2] = src[off + 2];\n dst[3] = src[off + 3];\n this.offset += 4;\n return convFloat32[0];\n};\n\n//Specialized copy which copies 4 byte integers into 2-byte target.\n//Used for downcasting OCTM int32 index buffers to int16 index buffers,\n//in cases we know we don't need more (LMVTK guarantees 2 byte indices).\nInputStream.prototype.getIndicesArray = function (buffer, offset, numItems) {\n\n var src = this.buffer;\n var dst = new Uint8Array(buffer, offset, numItems * 2);\n var off = this.offset;\n\n for (var i = 0, iEnd = numItems * 2; i < iEnd; i +=2 ) {\n dst[i]=s rc[off];\n dst[i + 1]=s rc[off + 1];\n off +=4 ;\n }\n\n this.offset=o ff;\n};\n\nInputStream.prototype.getVector3Array=f unction (arr, numItems, startOffset, stride) {\n var src=t his.buffer;\n var off=t his.offset;\n\n //We cannot use Float32Array copying here because the\n //source stream is out of alignment\n var dst=n ew Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n\n if (stride===3 && startOffset===0 ) {\n var len=n umItems * 12;\n dst.set(src.subarray(off, off + len));\n this.offset +=l en;\n } else {\n\n stride *=4 ;\n var aoff=s tartOffset * 4;\n for (var i=0 ; i < numItems; i++) {\n for (var j=0 ; j < 12; j++) {\n dst[aoff + j]=s rc[off++];\n }\n aoff +=s tride;\n }\n\n this.offset=o ff;\n }\n};\n\nInputStream.prototype.getVector2Array=f unction (arr, numItems, startOffset, stride) {\n var src=t his.buffer;\n var dst=n ew Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n var off=t his.offset;\n\n stride *=4 ;\n var aoff=s tartOffset * 4;\n for (var i=0 ; i < numItems; i++) {\n for (var j=0 ; j < 8; j++) {\n dst[aoff + j]=s rc[off++];\n }\n aoff +=s tride;\n }\n\n this.offset=o ff;\n};\n\nInputStream.prototype.getVector4=f unction (arr, offset) {\n var src=t his.buffer;\n var dst=c onvUint8;\n var off=t his.offset;\n var conv=c onvFloat32;\n\n for (var j=0 ; j < 4; j++) {\n dst[0]=s rc[off];\n dst[1]=s rc[off + 1];\n dst[2]=s rc[off + 2];\n dst[3]=s rc[off + 3];\n arr[offset + j]=c onv[0];\n off +=4 ;\n }\n\n this.offset=o ff;\n};\n\nInputStream.prototype.getFloat64=f unction () {\n var src=t his.buffer;\n var dst=c onvUint8;\n var off=t his.offset;\n for (var i=0 ; i < 8; i++)\n dst[i]=s rc[off + i];\n this.offset +=8 ;\n return convFloat64[0];\n};\n\n\n\nInputStream.prototype.getString=f unction (len) {\n var res=( 0,_StringUtils__WEBPACK_IMPORTED_MODULE_0__.utf8ArrayToString)(this.buffer, this.offset, len);\n this.offset +=l en;\n return res;\n};\n\nInputStream.prototype.reset=f unction (buf) {\n this.buffer=b uf;\n this.offset=0 ;\n this.byteLength=b uf.length;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9JbnB1dFN0cmVhbS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrRDs7QUFFbEQsWUFBWTs7QUFFWjtBQUNBO0FBQ0EsSUFBSUMsT0FBTyxHQUFHLElBQUlDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsSUFBSUMsU0FBUyxHQUFHLElBQUlDLFVBQVUsQ0FBQ0gsT0FBTyxDQUFDO0FBQ3ZDLElBQUlJLFVBQVUsR0FBRyxJQUFJQyxXQUFXLENBQUNMLE9BQU8sQ0FBQztBQUN6QyxJQUFJTSxTQUFTLEdBQUcsSUFBSUMsVUFBVSxDQUFDUCxPQUFPLENBQUM7QUFDdkMsSUFBSVEsVUFBVSxHQUFHLElBQUlDLFdBQVcsQ0FBQ1QsT0FBTyxDQUFDO0FBQ3pDLElBQUlVLFdBQVcsR0FBRyxJQUFJQyxZQUFZLENBQUNYLE9BQU8sQ0FBQztBQUMzQyxJQUFJWSxXQUFXLEdBQUcsSUFBSUMsWUFBWSxDQUFDYixPQUFPLENBQUM7OztBQUczQztBQUNPLFNBQVNjLFdBQVdBLENBQUNDLEdBQUcsRUFBRTtFQUM3QixJQUFJLENBQUNDLE1BQU0sR0FBR0QsR0FBRztFQUNqQixJQUFJLENBQUNFLE1BQU0sR0FBRyxDQUFDO0VBQ2YsSUFBSSxDQUFDQyxVQUFVLEdBQUdILEdBQUcsQ0FBQ0ksTUFBTTtBQUNoQzs7O0FBR0FMLFdBQVcsQ0FBQ00sU0FBUyxDQUFDQyxJQUFJLEdBQUcsVUFBU0MsR0FBRyxFQUFFO0VBQ3ZDLElBQUksQ0FBQ0wsTUFBTSxHQUFHSyxHQUFHO0FBQ3JCLENBQUM7O0FBRURSLFdBQVcsQ0FBQ00sU0FBUyxDQUFDRyxRQUFRLEdBQUcsVUFBU0MsR0FBRyxFQUFFO0VBQzNDLElBQUlDLEdBQUcsR0FBRyxJQUFJdEIsVUFBVSxDQUFDLElBQUksQ0FBQ2EsTUFBTSxDQUFDQSxNQUFNLEVBQUUsSUFBSSxDQUFDQyxNQUFNLEVBQUVPLEdBQUcsQ0FBQztFQUM5RCxJQUFJLENBQUNQLE1BQU0sSUFBSU8sR0FBRztFQUNsQixPQUFPQyxHQUFHO0FBQ2QsQ0FBQzs7QUFFRFgsV0FBVyxDQUFDTSxTQUFTLENBQUNNLFVBQVUsR0FBRyxZQUFZO0VBQzNDLElBQUlDLENBQUM7RUFDTCxJQUFJQyxLQUFLLEdBQUcsQ0FBQztFQUNiLElBQUlDLE9BQU8sR0FBRyxDQUFDO0VBQ2YsR0FBRztJQUNDRixDQUFDLEdBQUcsSUFBSSxDQUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUUsQ0FBQztJQUM5QlcsS0FBSyxJQUFJLENBQUNELENBQUMsR0FBRyxJQUFJLEtBQUtFLE9BQU87SUFDOUJBLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLENBQUMsUUFBUUYsQ0FBQyxHQUFHLElBQUk7RUFDakIsT0FBT0MsS0FBSztBQUNoQixDQUFDOztBQUVEZCxXQUFXLENBQUNNLFNBQVMsQ0FBQ1UsUUFBUSxHQUFHLFlBQVc7RUFDeEMsT0FBTyxJQUFJLENBQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUNDLE1BQU0sRUFBRSxDQUFDO0FBQ3JDLENBQUM7O0FBRURILFdBQVcsQ0FBQ00sU0FBUyxDQUFDVyxTQUFTLEdBQUcsWUFBVztFQUN6QzdCLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNjLE1BQU0sQ0FBQyxJQUFJLENBQUNDLE1BQU0sRUFBRSxDQUFDO0VBQ3pDZixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDYyxNQUFNLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUUsQ0FBQztFQUN6QyxPQUFPYixVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7O0FBRURVLFdBQVcsQ0FBQ00sU0FBUyxDQUFDWSxRQUFRLEdBQUcsWUFBVztFQUN4QyxJQUFJQyxHQUFHLEdBQUcsSUFBSSxDQUFDRixTQUFTLENBQUMsQ0FBQztFQUMxQjtFQUNBLElBQUlFLEdBQUcsR0FBRyxNQUFNO0VBQ1pBLEdBQUcsR0FBR0EsR0FBRyxHQUFHLFVBQVU7RUFDMUIsT0FBT0EsR0FBRztBQUNkLENBQUM7O0FBRURuQixXQUFXLENBQUNNLFNBQVMsQ0FBQ2MsUUFBUSxHQUFHLFlBQVc7RUFDeEMsSUFBSUMsR0FBRyxHQUFHLElBQUksQ0FBQ25CLE1BQU07RUFDckIsSUFBSW9CLEdBQUcsR0FBR2xDLFNBQVM7RUFDbkIsSUFBSW9CLEdBQUcsR0FBRyxJQUFJLENBQUNMLE1BQU07RUFDckJtQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2IsR0FBRyxDQUFDO0VBQ2pCYyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2IsR0FBRyxHQUFDLENBQUMsQ0FBQztFQUNuQmMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNiLEdBQUcsR0FBQyxDQUFDLENBQUM7RUFDbkJjLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0QsR0FBRyxDQUFDYixHQUFHLEdBQUMsQ0FBQyxDQUFDO0VBQ25CLElBQUksQ0FBQ0wsTUFBTSxJQUFJLENBQUM7RUFDaEIsT0FBT1gsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDOztBQUVEUSxXQUFXLENBQUNNLFNBQVMsQ0FBQ2lCLFNBQVMsR0FBRyxZQUFXO0VBQ3pDLElBQUlGLEdBQUcsR0FBRyxJQUFJLENBQUNuQixNQUFNO0VBQ3JCLElBQUlvQixHQUFHLEdBQUdsQyxTQUFTO0VBQ25CLElBQUlvQixHQUFHLEdBQUcsSUFBSSxDQUFDTCxNQUFNO0VBQ3JCbUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNiLEdBQUcsQ0FBQztFQUNqQmMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNiLEdBQUcsR0FBQyxDQUFDLENBQUM7RUFDbkJjLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0QsR0FBRyxDQUFDYixHQUFHLEdBQUMsQ0FBQyxDQUFDO0VBQ25CYyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2IsR0FBRyxHQUFDLENBQUMsQ0FBQztFQUNuQixJQUFJLENBQUNMLE1BQU0sSUFBSSxDQUFDO0VBQ2hCLE9BQU9ULFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsQ0FBQzs7QUFFRE0sV0FBVyxDQUFDTSxTQUFTLENBQUNrQixVQUFVLEdBQUcsWUFBVztFQUMxQyxJQUFJSCxHQUFHLEdBQUcsSUFBSSxDQUFDbkIsTUFBTTtFQUNyQixJQUFJb0IsR0FBRyxHQUFHbEMsU0FBUztFQUNuQixJQUFJb0IsR0FBRyxHQUFHLElBQUksQ0FBQ0wsTUFBTTtFQUNyQm1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0QsR0FBRyxDQUFDYixHQUFHLENBQUM7RUFDakJjLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0QsR0FBRyxDQUFDYixHQUFHLEdBQUMsQ0FBQyxDQUFDO0VBQ25CYyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2IsR0FBRyxHQUFDLENBQUMsQ0FBQztFQUNuQmMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNiLEdBQUcsR0FBQyxDQUFDLENBQUM7RUFDbkIsSUFBSSxDQUFDTCxNQUFNLElBQUksQ0FBQztFQUNoQixPQUFPUCxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0FJLFdBQVcsQ0FBQ00sU0FBUyxDQUFDbUIsZUFBZSxHQUFHLFVBQVN2QixNQUFNLEVBQUVDLE1BQU0sRUFBRXVCLFFBQVEsRUFBRTs7RUFFdkUsSUFBSUwsR0FBRyxHQUFHLElBQUksQ0FBQ25CLE1BQU07RUFDckIsSUFBSW9CLEdBQUcsR0FBRyxJQUFJakMsVUFBVSxDQUFDYSxNQUFNLEVBQUVDLE1BQU0sRUFBRXVCLFFBQVEsR0FBQyxDQUFDLENBQUM7RUFDcEQsSUFBSWxCLEdBQUcsR0FBRyxJQUFJLENBQUNMLE1BQU07O0VBRXJCLEtBQUssSUFBSXdCLENBQUMsR0FBRSxDQUFDLEVBQUVDLElBQUksR0FBQ0YsUUFBUSxHQUFDLENBQUMsRUFBRUMsQ0FBQyxHQUFDQyxJQUFJLEVBQUVELENBQUMsSUFBRSxDQUFDLEVBQUU7SUFDMUNMLEdBQUcsQ0FBQ0ssQ0FBQyxDQUFDLEdBQUdOLEdBQUcsQ0FBQ2IsR0FBRyxDQUFDO0lBQ2pCYyxHQUFHLENBQUNLLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBR04sR0FBRyxDQUFDYixHQUFHLEdBQUMsQ0FBQyxDQUFDO0lBQ3JCQSxHQUFHLElBQUksQ0FBQztFQUNaOztFQUVBLElBQUksQ0FBQ0wsTUFBTSxHQUFHSyxHQUFHO0FBQ3JCLENBQUM7O0FBRURSLFdBQVcsQ0FBQ00sU0FBUyxDQUFDdUIsZUFBZSxHQUFHLFVBQVNDLEdBQUcsRUFBRUosUUFBUSxFQUFFSyxXQUFXLEVBQUVDLE1BQU0sRUFBRTtFQUNqRixJQUFJWCxHQUFHLEdBQUcsSUFBSSxDQUFDbkIsTUFBTTtFQUNyQixJQUFJTSxHQUFHLEdBQUcsSUFBSSxDQUFDTCxNQUFNOztFQUVyQjtFQUNBO0VBQ0EsSUFBSW1CLEdBQUcsR0FBRyxJQUFJakMsVUFBVSxDQUFDeUMsR0FBRyxDQUFDNUIsTUFBTSxFQUFFNEIsR0FBRyxDQUFDRyxVQUFVLEVBQUVILEdBQUcsQ0FBQzFCLFVBQVUsQ0FBQzs7RUFFcEUsSUFBSTRCLE1BQU0sS0FBSyxDQUFDLElBQUlELFdBQVcsS0FBSyxDQUFDLEVBQUU7SUFDbkMsSUFBSXJCLEdBQUcsR0FBR2dCLFFBQVEsR0FBQyxFQUFFO0lBQ3JCSixHQUFHLENBQUNZLEdBQUcsQ0FBQ2IsR0FBRyxDQUFDYyxRQUFRLENBQUMzQixHQUFHLEVBQUVBLEdBQUcsR0FBQ0UsR0FBRyxDQUFDLENBQUM7SUFDbkMsSUFBSSxDQUFDUCxNQUFNLElBQUlPLEdBQUc7RUFDdEIsQ0FBQyxNQUFNOztJQUVIc0IsTUFBTSxJQUFJLENBQUM7SUFDWCxJQUFJSSxJQUFJLEdBQUdMLFdBQVcsR0FBRyxDQUFDO0lBQzFCLEtBQUssSUFBSUosQ0FBQyxHQUFDLENBQUMsRUFBRUEsQ0FBQyxHQUFDRCxRQUFRLEVBQUVDLENBQUMsRUFBRSxFQUFFO01BQzNCLEtBQUssSUFBSVUsQ0FBQyxHQUFDLENBQUMsRUFBRUEsQ0FBQyxHQUFDLEVBQUUsRUFBRUEsQ0FBQyxFQUFFLEVBQUU7UUFDckJmLEdBQUcsQ0FBQ2MsSUFBSSxHQUFDQyxDQUFDLENBQUMsR0FBR2hCLEdBQUcsQ0FBQ2IsR0FBRyxFQUFFLENBQUM7TUFDNUI7TUFDQTRCLElBQUksSUFBSUosTUFBTTtJQUNsQjs7SUFFQSxJQUFJLENBQUM3QixNQUFNLEdBQUdLLEdBQUc7RUFDckI7QUFDSixDQUFDOztBQUVEUixXQUFXLENBQUNNLFNBQVMsQ0FBQ2dDLGVBQWUsR0FBRyxVQUFTUixHQUFHLEVBQUVKLFFBQVEsRUFBRUssV0FBVyxFQUFFQyxNQUFNLEVBQUU7RUFDakYsSUFBSVgsR0FBRyxHQUFHLElBQUksQ0FBQ25CLE1BQU07RUFDckIsSUFBSW9CLEdBQUcsR0FBRyxJQUFJakMsVUFBVSxDQUFDeUMsR0FBRyxDQUFDNUIsTUFBTSxFQUFFNEIsR0FBRyxDQUFDRyxVQUFVLEVBQUVILEdBQUcsQ0FBQzFCLFVBQVUsQ0FBQztFQUNwRSxJQUFJSSxHQUFHLEdBQUcsSUFBSSxDQUFDTCxNQUFNOztFQUVyQjZCLE1BQU0sSUFBSSxDQUFDO0VBQ1gsSUFBSUksSUFBSSxHQUFHTCxXQUFXLEdBQUcsQ0FBQztFQUMxQixLQUFLLElBQUlKLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ0QsUUFBUSxFQUFFQyxDQUFDLEVBQUUsRUFBRTtJQUMzQixLQUFLLElBQUlVLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsRUFBRSxFQUFFO01BQ3BCZixHQUFHLENBQUNjLElBQUksR0FBQ0MsQ0FBQyxDQUFDLEdBQUdoQixHQUFHLENBQUNiLEdBQUcsRUFBRSxDQUFDO0lBQzVCO0lBQ0E0QixJQUFJLElBQUlKLE1BQU07RUFDbEI7O0VBRUEsSUFBSSxDQUFDN0IsTUFBTSxHQUFHSyxHQUFHO0FBQ3JCLENBQUM7O0FBRURSLFdBQVcsQ0FBQ00sU0FBUyxDQUFDaUMsVUFBVSxHQUFHLFVBQVNULEdBQUcsRUFBRTNCLE1BQU0sRUFBRTtFQUNyRCxJQUFJa0IsR0FBRyxHQUFHLElBQUksQ0FBQ25CLE1BQU07RUFDckIsSUFBSW9CLEdBQUcsR0FBR2xDLFNBQVM7RUFDbkIsSUFBSW9CLEdBQUcsR0FBRyxJQUFJLENBQUNMLE1BQU07RUFDckIsSUFBSXFDLElBQUksR0FBRzVDLFdBQVc7O0VBRXRCLEtBQUssSUFBSXlDLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsRUFBRSxFQUFFO0lBQ3BCZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2IsR0FBRyxDQUFDO0lBQ2pCYyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2IsR0FBRyxHQUFDLENBQUMsQ0FBQztJQUNuQmMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNiLEdBQUcsR0FBQyxDQUFDLENBQUM7SUFDbkJjLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0QsR0FBRyxDQUFDYixHQUFHLEdBQUMsQ0FBQyxDQUFDO0lBQ25Cc0IsR0FBRyxDQUFDM0IsTUFBTSxHQUFDa0MsQ0FBQyxDQUFDLEdBQUdHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkJoQyxHQUFHLElBQUksQ0FBQztFQUNaOztFQUVBLElBQUksQ0FBQ0wsTUFBTSxHQUFHSyxHQUFHO0FBQ3JCLENBQUM7O0FBRURSLFdBQVcsQ0FBQ00sU0FBUyxDQUFDbUMsVUFBVSxHQUFHLFlBQVc7RUFDMUMsSUFBSXBCLEdBQUcsR0FBRyxJQUFJLENBQUNuQixNQUFNO0VBQ3JCLElBQUlvQixHQUFHLEdBQUdsQyxTQUFTO0VBQ25CLElBQUlvQixHQUFHLEdBQUcsSUFBSSxDQUFDTCxNQUFNO0VBQ3JCLEtBQUssSUFBSXdCLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsRUFBRTtFQUNsQkwsR0FBRyxDQUFDSyxDQUFDLENBQUMsR0FBR04sR0FBRyxDQUFDYixHQUFHLEdBQUNtQixDQUFDLENBQUM7RUFDdkIsSUFBSSxDQUFDeEIsTUFBTSxJQUFJLENBQUM7RUFDaEIsT0FBT0wsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN6QixDQUFDOzs7O0FBSURFLFdBQVcsQ0FBQ00sU0FBUyxDQUFDb0MsU0FBUyxHQUFHLFVBQVNoQyxHQUFHLEVBQUU7RUFDNUMsSUFBSWlDLEdBQUcsR0FBRzFELCtEQUFpQixDQUFDLElBQUksQ0FBQ2lCLE1BQU0sRUFBRSxJQUFJLENBQUNDLE1BQU0sRUFBRU8sR0FBRyxDQUFDO0VBQzFELElBQUksQ0FBQ1AsTUFBTSxJQUFJTyxHQUFHO0VBQ2xCLE9BQU9pQyxHQUFHO0FBQ2QsQ0FBQzs7QUFFRDNDLFdBQVcsQ0FBQ00sU0FBUyxDQUFDc0MsS0FBSyxHQUFHLFVBQVUzQyxHQUFHLEVBQUU7RUFDekMsSUFBSSxDQUFDQyxNQUFNLEdBQUdELEdBQUc7RUFDakIsSUFBSSxDQUFDRSxNQUFNLEdBQUcsQ0FBQztFQUNmLElBQUksQ0FBQ0MsVUFBVSxHQUFHSCxHQUFHLENBQUNJLE1BQU07QUFDaEMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvY29tbW9uL0lucHV0U3RyZWFtLmpzPzJjYWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRmOEFycmF5VG9TdHJpbmcgfSBmcm9tICcuL1N0cmluZ1V0aWxzJztcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vV2Ugd2lsbCB1c2UgdGhlc2Ugc2hhcmVkIG1lbW9yeSBhcnJheXMgdG9cbi8vY29udmVydCBmcm9tIGJ5dGVzIHRvIHRoZSBkZXNpcmVkIGRhdGEgdHlwZS5cbnZhciBjb252QnVmID0gbmV3IEFycmF5QnVmZmVyKDgpO1xudmFyIGNvbnZVaW50OCA9IG5ldyBVaW50OEFycmF5KGNvbnZCdWYpO1xudmFyIGNvbnZVaW50MTYgPSBuZXcgVWludDE2QXJyYXkoY29udkJ1Zik7XG52YXIgY29udkludDMyID0gbmV3IEludDMyQXJyYXkoY29udkJ1Zik7XG52YXIgY29udlVpbnQzMiA9IG5ldyBVaW50MzJBcnJheShjb252QnVmKTtcbnZhciBjb252RmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkoY29udkJ1Zik7XG52YXIgY29udkZsb2F0NjQgPSBuZXcgRmxvYXQ2NEFycmF5KGNvbnZCdWYpO1xuXG5cbi8qKiBAY29uc3RydWN0b3IgKi9cbmV4cG9ydCBmdW5jdGlvbiBJbnB1dFN0cmVhbShidWYpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZjtcbiAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgdGhpcy5ieXRlTGVuZ3RoID0gYnVmLmxlbmd0aDtcbn1cblxuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uKG9mZikge1xuICAgIHRoaXMub2Zmc2V0ID0gb2ZmO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmdldEJ5dGVzID0gZnVuY3Rpb24obGVuKSB7XG4gICAgdmFyIHJldCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmJ1ZmZlciwgdGhpcy5vZmZzZXQsIGxlbik7XG4gICAgdGhpcy5vZmZzZXQgKz0gbGVuO1xuICAgIHJldHVybiByZXQ7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0VmFyaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYjtcbiAgICB2YXIgdmFsdWUgPSAwO1xuICAgIHZhciBzaGlmdEJ5ID0gMDtcbiAgICBkbyB7XG4gICAgICAgIGIgPSB0aGlzLmJ1ZmZlclt0aGlzLm9mZnNldCsrXTtcbiAgICAgICAgdmFsdWUgfD0gKGIgJiAweDdmKSA8PCBzaGlmdEJ5O1xuICAgICAgICBzaGlmdEJ5ICs9IDc7XG4gICAgfSB3aGlsZSAoYiAmIDB4ODApO1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRVaW50OCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlclt0aGlzLm9mZnNldCsrXTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRVaW50MTYgPSBmdW5jdGlvbigpIHtcbiAgICBjb252VWludDhbMF0gPSB0aGlzLmJ1ZmZlclt0aGlzLm9mZnNldCsrXTtcbiAgICBjb252VWludDhbMV0gPSB0aGlzLmJ1ZmZlclt0aGlzLm9mZnNldCsrXTtcbiAgICByZXR1cm4gY29udlVpbnQxNlswXTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRJbnQxNiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0bXAgPSB0aGlzLmdldFVpbnQxNigpO1xuICAgIC8vbWFrZSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIHRoZSB1c2hvcnQgaXMgbmVnYXRpdmVcbiAgICBpZiAodG1wID4gMHg3ZmZmKVxuICAgICAgICB0bXAgPSB0bXAgfCAweGZmZmYwMDAwO1xuICAgIHJldHVybiB0bXA7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0SW50MzIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3JjID0gdGhpcy5idWZmZXI7XG4gICAgdmFyIGRzdCA9IGNvbnZVaW50ODtcbiAgICB2YXIgb2ZmID0gdGhpcy5vZmZzZXQ7XG4gICAgZHN0WzBdID0gc3JjW29mZl07XG4gICAgZHN0WzFdID0gc3JjW29mZisxXTtcbiAgICBkc3RbMl0gPSBzcmNbb2ZmKzJdO1xuICAgIGRzdFszXSA9IHNyY1tvZmYrM107XG4gICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICByZXR1cm4gY29udkludDMyWzBdO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmdldFVpbnQzMiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzcmMgPSB0aGlzLmJ1ZmZlcjtcbiAgICB2YXIgZHN0ID0gY29udlVpbnQ4O1xuICAgIHZhciBvZmYgPSB0aGlzLm9mZnNldDtcbiAgICBkc3RbMF0gPSBzcmNbb2ZmXTtcbiAgICBkc3RbMV0gPSBzcmNbb2ZmKzFdO1xuICAgIGRzdFsyXSA9IHNyY1tvZmYrMl07XG4gICAgZHN0WzNdID0gc3JjW29mZiszXTtcbiAgICB0aGlzLm9mZnNldCArPSA0O1xuICAgIHJldHVybiBjb252VWludDMyWzBdO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmdldEZsb2F0MzIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3JjID0gdGhpcy5idWZmZXI7XG4gICAgdmFyIGRzdCA9IGNvbnZVaW50ODtcbiAgICB2YXIgb2ZmID0gdGhpcy5vZmZzZXQ7XG4gICAgZHN0WzBdID0gc3JjW29mZl07XG4gICAgZHN0WzFdID0gc3JjW29mZisxXTtcbiAgICBkc3RbMl0gPSBzcmNbb2ZmKzJdO1xuICAgIGRzdFszXSA9IHNyY1tvZmYrM107XG4gICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICByZXR1cm4gY29udkZsb2F0MzJbMF07XG59O1xuXG4vL1NwZWNpYWxpemVkIGNvcHkgd2hpY2ggY29waWVzIDQgYnl0ZSBpbnRlZ2VycyBpbnRvIDItYnl0ZSB0YXJnZXQuXG4vL1VzZWQgZm9yIGRvd25jYXN0aW5nIE9DVE0gaW50MzIgaW5kZXggYnVmZmVycyB0byBpbnQxNiBpbmRleCBidWZmZXJzLFxuLy9pbiBjYXNlcyB3ZSBrbm93IHdlIGRvbid0IG5lZWQgbW9yZSAoTE1WVEsgZ3VhcmFudGVlcyAyIGJ5dGUgaW5kaWNlcykuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0SW5kaWNlc0FycmF5ID0gZnVuY3Rpb24oYnVmZmVyLCBvZmZzZXQsIG51bUl0ZW1zKSB7XG5cbiAgICB2YXIgc3JjID0gdGhpcy5idWZmZXI7XG4gICAgdmFyIGRzdCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBudW1JdGVtcyoyKTtcbiAgICB2YXIgb2ZmID0gdGhpcy5vZmZzZXQ7XG5cbiAgICBmb3IgKHZhciBpPSAwLCBpRW5kPW51bUl0ZW1zKjI7IGk8aUVuZDsgaSs9Mikge1xuICAgICAgICBkc3RbaV0gPSBzcmNbb2ZmXTtcbiAgICAgICAgZHN0W2krMV0gPSBzcmNbb2ZmKzFdO1xuICAgICAgICBvZmYgKz0gNDtcbiAgICB9XG5cbiAgICB0aGlzLm9mZnNldCA9IG9mZjtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRWZWN0b3IzQXJyYXkgPSBmdW5jdGlvbihhcnIsIG51bUl0ZW1zLCBzdGFydE9mZnNldCwgc3RyaWRlKSB7XG4gICAgdmFyIHNyYyA9IHRoaXMuYnVmZmVyO1xuICAgIHZhciBvZmYgPSB0aGlzLm9mZnNldDtcblxuICAgIC8vV2UgY2Fubm90IHVzZSBGbG9hdDMyQXJyYXkgY29weWluZyBoZXJlIGJlY2F1c2UgdGhlXG4gICAgLy9zb3VyY2Ugc3RyZWFtIGlzIG91dCBvZiBhbGlnbm1lbnRcbiAgICB2YXIgZHN0ID0gbmV3IFVpbnQ4QXJyYXkoYXJyLmJ1ZmZlciwgYXJyLmJ5dGVPZmZzZXQsIGFyci5ieXRlTGVuZ3RoKTtcblxuICAgIGlmIChzdHJpZGUgPT09IDMgJiYgc3RhcnRPZmZzZXQgPT09IDApIHtcbiAgICAgICAgdmFyIGxlbiA9IG51bUl0ZW1zKjEyO1xuICAgICAgICBkc3Quc2V0KHNyYy5zdWJhcnJheShvZmYsIG9mZitsZW4pKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gbGVuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgICAgc3RyaWRlICo9IDQ7XG4gICAgICAgIHZhciBhb2ZmID0gc3RhcnRPZmZzZXQgKiA0O1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8bnVtSXRlbXM7IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPDEyOyBqKyspIHtcbiAgICAgICAgICAgICAgICBkc3RbYW9mZitqXSA9IHNyY1tvZmYrK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhb2ZmICs9IHN0cmlkZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gb2ZmO1xuICAgIH1cbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRWZWN0b3IyQXJyYXkgPSBmdW5jdGlvbihhcnIsIG51bUl0ZW1zLCBzdGFydE9mZnNldCwgc3RyaWRlKSB7XG4gICAgdmFyIHNyYyA9IHRoaXMuYnVmZmVyO1xuICAgIHZhciBkc3QgPSBuZXcgVWludDhBcnJheShhcnIuYnVmZmVyLCBhcnIuYnl0ZU9mZnNldCwgYXJyLmJ5dGVMZW5ndGgpO1xuICAgIHZhciBvZmYgPSB0aGlzLm9mZnNldDtcblxuICAgIHN0cmlkZSAqPSA0O1xuICAgIHZhciBhb2ZmID0gc3RhcnRPZmZzZXQgKiA0O1xuICAgIGZvciAodmFyIGk9MDsgaTxudW1JdGVtczsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGo9MDsgajw4OyBqKyspIHtcbiAgICAgICAgICAgIGRzdFthb2ZmK2pdID0gc3JjW29mZisrXTtcbiAgICAgICAgfVxuICAgICAgICBhb2ZmICs9IHN0cmlkZTtcbiAgICB9XG5cbiAgICB0aGlzLm9mZnNldCA9IG9mZjtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRWZWN0b3I0ID0gZnVuY3Rpb24oYXJyLCBvZmZzZXQpIHtcbiAgICB2YXIgc3JjID0gdGhpcy5idWZmZXI7XG4gICAgdmFyIGRzdCA9IGNvbnZVaW50ODtcbiAgICB2YXIgb2ZmID0gdGhpcy5vZmZzZXQ7XG4gICAgdmFyIGNvbnYgPSBjb252RmxvYXQzMjtcblxuICAgIGZvciAodmFyIGo9MDsgajw0OyBqKyspIHtcbiAgICAgICAgZHN0WzBdID0gc3JjW29mZl07XG4gICAgICAgIGRzdFsxXSA9IHNyY1tvZmYrMV07XG4gICAgICAgIGRzdFsyXSA9IHNyY1tvZmYrMl07XG4gICAgICAgIGRzdFszXSA9IHNyY1tvZmYrM107XG4gICAgICAgIGFycltvZmZzZXQral0gPSBjb252WzBdO1xuICAgICAgICBvZmYgKz0gNDtcbiAgICB9XG5cbiAgICB0aGlzLm9mZnNldCA9IG9mZjtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRGbG9hdDY0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNyYyA9IHRoaXMuYnVmZmVyO1xuICAgIHZhciBkc3QgPSBjb252VWludDg7XG4gICAgdmFyIG9mZiA9IHRoaXMub2Zmc2V0O1xuICAgIGZvciAodmFyIGk9MDsgaTw4OyBpKyspXG4gICAgICAgIGRzdFtpXSA9IHNyY1tvZmYraV07XG4gICAgdGhpcy5vZmZzZXQgKz0gODtcbiAgICByZXR1cm4gY29udkZsb2F0NjRbMF07XG59O1xuXG5cblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmdldFN0cmluZyA9IGZ1bmN0aW9uKGxlbikge1xuICAgIHZhciByZXMgPSB1dGY4QXJyYXlUb1N0cmluZyh0aGlzLmJ1ZmZlciwgdGhpcy5vZmZzZXQsIGxlbik7XG4gICAgdGhpcy5vZmZzZXQgKz0gbGVuO1xuICAgIHJldHVybiByZXM7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoYnVmKSB7XG4gICAgdGhpcy5idWZmZXIgPSBidWY7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ1Zi5sZW5ndGg7XG59O1xuIl0sIm5hbWVzIjpbInV0ZjhBcnJheVRvU3RyaW5nIiwiY29udkJ1ZiIsIkFycmF5QnVmZmVyIiwiY29udlVpbnQ4IiwiVWludDhBcnJheSIsImNvbnZVaW50MTYiLCJVaW50MTZBcnJheSIsImNvbnZJbnQzMiIsIkludDMyQXJyYXkiLCJjb252VWludDMyIiwiVWludDMyQXJyYXkiLCJjb252RmxvYXQzMiIsIkZsb2F0MzJBcnJheSIsImNvbnZGbG9hdDY0IiwiRmxvYXQ2NEFycmF5IiwiSW5wdXRTdHJlYW0iLCJidWYiLCJidWZmZXIiLCJvZmZzZXQiLCJieXRlTGVuZ3RoIiwibGVuZ3RoIiwicHJvdG90eXBlIiwic2VlayIsIm9mZiIsImdldEJ5dGVzIiwibGVuIiwicmV0IiwiZ2V0VmFyaW50cyIsImIiLCJ2YWx1ZSIsInNoaWZ0QnkiLCJnZXRVaW50OCIsImdldFVpbnQxNiIsImdldEludDE2IiwidG1wIiwiZ2V0SW50MzIiLCJzcmMiLCJkc3QiLCJnZXRVaW50MzIiLCJnZXRGbG9hdDMyIiwiZ2V0SW5kaWNlc0FycmF5IiwibnVtSXRlbXMiLCJpIiwiaUVuZCIsImdldFZlY3RvcjNBcnJheSIsImFyciIsInN0YXJ0T2Zmc2V0Iiwic3RyaWRlIiwiYnl0ZU9mZnNldCIsInNldCIsInN1YmFycmF5IiwiYW9mZiIsImoiLCJnZXRWZWN0b3IyQXJyYXkiLCJnZXRWZWN0b3I0IiwiY29udiIsImdldEZsb2F0NjQiLCJnZXRTdHJpbmciLCJyZXMiLCJyZXNldCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/InputStream.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/common/NamedItemTree.js ": /*!********************************************************!*\ !*** ./src/file-loaders/lmvtk/common/NamedItemTree.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readNamedItemTree: ()=> (/* binding */ readNamedItemTree)\n/* harmony export */ });\n\n\nconst NodeType = {\n NI_Inner: 0,\n NI_Leaf: 1\n};\n\nfunction readUuid(pfr) {\n let uuid = ''; // uuid should be a 16 bytes long\n for (let i = 0; i < 16; i++) {\n const tempUuid=p fr.readU8();\n uuid=u uid + tempUuid;\n }\n return uuid;\n}\n\nfunction readNamedItemNode(pfr) {\n\n const name=p fr.readString();\n let uuid=r eadUuid(pfr);\n const type=p fr.readU8();\n\n if (type===N odeType.NI_Leaf) {\n const entry=p fr.readVarint();\n return { name: name, entry: entry, uuid };\n } else if (type===N odeType.NI_Inner) {\n const count=p fr.readVarint();\n const children=[ ];\n for (let i=0 ; i < count; i++) {\n const child=r eadNamedItemNode(pfr);\n children.push(child);\n }\n return { name: name, children: children };\n } else {\n return {};\n }\n}\n\nfunction readNamedItemTree(pfr) {\n if (pfr.seekToEntry) {\n pfr.seekToEntry(0);\n }\n return readNamedItemNode(pfr);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9OYW1lZEl0ZW1UcmVlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBYTs7QUFFYixNQUFNQSxRQUFRLEdBQUc7RUFDYkMsUUFBUSxFQUFHLENBQUM7RUFDWkMsT0FBTyxFQUFHO0FBQ2QsQ0FBQzs7QUFFRCxTQUFTQyxRQUFRQSxDQUFDQyxHQUFHLEVBQUM7RUFDbEIsSUFBSUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQ2YsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsRUFBRSxFQUFFQSxDQUFDLEVBQUUsRUFBRTtJQUN6QixNQUFNQyxRQUFRLEdBQUdILEdBQUcsQ0FBQ0ksTUFBTSxDQUFDLENBQUM7SUFDN0JILElBQUksR0FBR0EsSUFBSSxHQUFHRSxRQUFRO0VBQzFCO0VBQ0EsT0FBT0YsSUFBSTtBQUNmOztBQUVBLFNBQVNJLGlCQUFpQkEsQ0FBQ0wsR0FBRyxFQUFFOztFQUU1QixNQUFNTSxJQUFJLEdBQUdOLEdBQUcsQ0FBQ08sVUFBVSxDQUFDLENBQUM7RUFDN0IsSUFBSU4sSUFBSSxHQUFHRixRQUFRLENBQUNDLEdBQUcsQ0FBQztFQUN4QixNQUFNUSxJQUFJLEdBQUdSLEdBQUcsQ0FBQ0ksTUFBTSxDQUFDLENBQUM7O0VBRXpCLElBQUtJLElBQUksS0FBS1osUUFBUSxDQUFDRSxPQUFPLEVBQUc7SUFDN0IsTUFBTVcsS0FBSyxHQUFHVCxHQUFHLENBQUNVLFVBQVUsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sRUFBRUosSUFBSSxFQUFFQSxJQUFJLEVBQUVHLEtBQUssRUFBRUEsS0FBSyxFQUFFUixJQUFJLENBQUMsQ0FBQztFQUM3QyxDQUFDLE1BQU0sSUFBS08sSUFBSSxLQUFLWixRQUFRLENBQUNDLFFBQVEsRUFBRztJQUNyQyxNQUFNYyxLQUFLLEdBQUdYLEdBQUcsQ0FBQ1UsVUFBVSxDQUFDLENBQUM7SUFDOUIsTUFBTUUsUUFBUSxHQUFHLEVBQUU7SUFDbkIsS0FBSyxJQUFJVixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdTLEtBQUssRUFBRVQsQ0FBQyxFQUFFLEVBQUU7TUFDNUIsTUFBTVcsS0FBSyxHQUFHUixpQkFBaUIsQ0FBQ0wsR0FBRyxDQUFDO01BQ3BDWSxRQUFRLENBQUNFLElBQUksQ0FBQ0QsS0FBSyxDQUFDO0lBQ3hCO0lBQ0EsT0FBTyxFQUFFUCxJQUFJLEVBQUVBLElBQUksRUFBRU0sUUFBUSxFQUFFQSxRQUFRLENBQUMsQ0FBQztFQUM3QyxDQUFDLE1BQU07SUFDSCxPQUFPLENBQUMsQ0FBQztFQUNiO0FBQ0o7O0FBRU8sU0FBU0csaUJBQWlCQSxDQUFDZixHQUFHLEVBQUU7RUFDbkMsSUFBR0EsR0FBRyxDQUFDZ0IsV0FBVyxFQUFFO0lBQ2hCaEIsR0FBRyxDQUFDZ0IsV0FBVyxDQUFDLENBQUMsQ0FBQztFQUN0QjtFQUNBLE9BQU9YLGlCQUFpQixDQUFDTCxHQUFHLENBQUM7QUFDakMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9OYW1lZEl0ZW1UcmVlLmpzPzJmNGMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IE5vZGVUeXBlID0ge1xuICAgIE5JX0lubmVyIDogMCxcbiAgICBOSV9MZWFmIDogMSxcbn07XG5cbmZ1bmN0aW9uIHJlYWRVdWlkKHBmcil7XG4gICAgbGV0IHV1aWQgPSAnJzsgLy8gdXVpZCBzaG91bGQgYmUgYSAxNiBieXRlcyBsb25nXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRlbXBVdWlkID0gcGZyLnJlYWRVOCgpO1xuICAgICAgICB1dWlkID0gdXVpZCArIHRlbXBVdWlkO1xuICAgIH1cbiAgICByZXR1cm4gdXVpZDtcbn1cblxuZnVuY3Rpb24gcmVhZE5hbWVkSXRlbU5vZGUocGZyKSB7XG5cbiAgICBjb25zdCBuYW1lID0gcGZyLnJlYWRTdHJpbmcoKTtcbiAgICBsZXQgdXVpZCA9IHJlYWRVdWlkKHBmcik7XG4gICAgY29uc3QgdHlwZSA9IHBmci5yZWFkVTgoKTtcblxuICAgIGlmICggdHlwZSA9PT0gTm9kZVR5cGUuTklfTGVhZiApIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBwZnIucmVhZFZhcmludCgpO1xuICAgICAgICByZXR1cm4geyBuYW1lOiBuYW1lLCBlbnRyeTogZW50cnksIHV1aWQgfTtcbiAgICB9IGVsc2UgaWYgKCB0eXBlID09PSBOb2RlVHlwZS5OSV9Jbm5lciApIHtcbiAgICAgICAgY29uc3QgY291bnQgPSBwZnIucmVhZFZhcmludCgpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcmVhZE5hbWVkSXRlbU5vZGUocGZyKTtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5hbWU6IG5hbWUsIGNoaWxkcmVuOiBjaGlsZHJlbiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkTmFtZWRJdGVtVHJlZShwZnIpIHtcbiAgICBpZihwZnIuc2Vla1RvRW50cnkpIHtcbiAgICAgICAgcGZyLnNlZWtUb0VudHJ5KDApO1xuICAgIH1cbiAgICByZXR1cm4gcmVhZE5hbWVkSXRlbU5vZGUocGZyKTtcbn1cbiJdLCJuYW1lcyI6WyJOb2RlVHlwZSIsIk5JX0lubmVyIiwiTklfTGVhZiIsInJlYWRVdWlkIiwicGZyIiwidXVpZCIsImkiLCJ0ZW1wVXVpZCIsInJlYWRVOCIsInJlYWROYW1lZEl0ZW1Ob2RlIiwibmFtZSIsInJlYWRTdHJpbmciLCJ0eXBlIiwiZW50cnkiLCJyZWFkVmFyaW50IiwiY291bnQiLCJjaGlsZHJlbiIsImNoaWxkIiwicHVzaCIsInJlYWROYW1lZEl0ZW1UcmVlIiwic2Vla1RvRW50cnkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/NamedItemTree.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/common/OverrideSets.js ": /*!*******************************************************!*\ !*** ./src/file-loaders/lmvtk/common/OverrideSets.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readOverrideSet: ()=> (/* binding */ readOverrideSet)\n/* harmony export */ });\n\n\nconst OverrideSetParts = {\n OS_DefaultMaterial: 1,\n OS_DefaultFlags: 2,\n OS_MaterialOverrides: 4,\n OS_FlagOverrides: 8\n};\n\nfunction readDbIdSet(pfr, fn) {\n const count = pfr.readVarint();\n let dbId = 0;\n for (let i = 0; i < count; ++i) {\n const delta=p fr.readVarint();\n dbId +=d elta;\n fn(dbId);\n }\n}\n\nfunction readOverrideSet(pfr, entry) {\n const tse=p fr.seekToEntry(entry);\n if (!tse)\n return null;\n\n const set={ };\n const parts=p fr.stream.getUint32();\n\n if (parts & OverrideSetParts.OS_DefaultMaterial) {\n set.defaultMaterialIndex=p fr.readVarint();\n set.defaultMaterialFlags=p fr.readU8();\n }\n\n if (parts & OverrideSetParts.OS_DefaultFlags) {\n set.defaultFlags=p fr.readVarint();\n }\n\n if (parts & OverrideSetParts.OS_MaterialOverrides) {\n set.materialOverrides=[ ];\n const count=p fr.readVarint();\n for (let i=0 ; i < count; ++i) {\n let matIdx=p fr.readVarint();\n readDbIdSet(pfr, function (dbId) {\n set.materialOverrides.push({ dbId: dbId, materialIndex: matIdx });\n });\n }\n }\n\n if (parts & OverrideSetParts.OS_FlagOverrides) {\n set.flagOverrides=[ ];\n const count=p fr.readVarint();\n for (let i=0 ; i < count; ++i) {\n let flags=p fr.readVarint();\n readDbIdSet(pfr, function (dbId) {\n set.flagOverrides.push({ dbId: dbId, flags: flags });\n });\n }\n }\n\n return set;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9PdmVycmlkZVNldHMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFhOztBQUViLE1BQU1BLGdCQUFnQixHQUFHO0VBQ3JCQyxrQkFBa0IsRUFBRSxDQUFDO0VBQ3JCQyxlQUFlLEVBQUUsQ0FBQztFQUNsQkMsb0JBQW9CLEVBQUUsQ0FBQztFQUN2QkMsZ0JBQWdCLEVBQUU7QUFDdEIsQ0FBQzs7QUFFRCxTQUFTQyxXQUFXQSxDQUFDQyxHQUFHLEVBQUVDLEVBQUUsRUFBRTtFQUMxQixNQUFNQyxLQUFLLEdBQUdGLEdBQUcsQ0FBQ0csVUFBVSxDQUFDLENBQUM7RUFDOUIsSUFBSUMsSUFBSSxHQUFHLENBQUM7RUFDWixLQUFJLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0gsS0FBSyxFQUFFLEVBQUVHLENBQUMsRUFBRTtJQUMzQixNQUFNQyxLQUFLLEdBQUdOLEdBQUcsQ0FBQ0csVUFBVSxDQUFDLENBQUM7SUFDOUJDLElBQUksSUFBSUUsS0FBSztJQUNiTCxFQUFFLENBQUNHLElBQUksQ0FBQztFQUNaO0FBQ0o7O0FBRU8sU0FBU0csZUFBZUEsQ0FBQ1AsR0FBRyxFQUFFUSxLQUFLLEVBQUU7RUFDeEMsTUFBTUMsR0FBRyxHQUFHVCxHQUFHLENBQUNVLFdBQVcsQ0FBQ0YsS0FBSyxDQUFDO0VBQ2xDLElBQUksQ0FBQ0MsR0FBRztFQUNKLE9BQU8sSUFBSTs7RUFFZixNQUFNRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ2QsTUFBTUMsS0FBSyxHQUFHWixHQUFHLENBQUNhLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDLENBQUM7O0VBRXBDLElBQUlGLEtBQUssR0FBR2xCLGdCQUFnQixDQUFDQyxrQkFBa0IsRUFBRTtJQUM3Q2dCLEdBQUcsQ0FBQ0ksb0JBQW9CLEdBQUdmLEdBQUcsQ0FBQ0csVUFBVSxDQUFDLENBQUM7SUFDM0NRLEdBQUcsQ0FBQ0ssb0JBQW9CLEdBQUdoQixHQUFHLENBQUNpQixNQUFNLENBQUMsQ0FBQztFQUMzQzs7RUFFQSxJQUFJTCxLQUFLLEdBQUdsQixnQkFBZ0IsQ0FBQ0UsZUFBZSxFQUFFO0lBQzFDZSxHQUFHLENBQUNPLFlBQVksR0FBR2xCLEdBQUcsQ0FBQ0csVUFBVSxDQUFDLENBQUM7RUFDdkM7O0VBRUEsSUFBSVMsS0FBSyxHQUFHbEIsZ0JBQWdCLENBQUNHLG9CQUFvQixFQUFFO0lBQy9DYyxHQUFHLENBQUNRLGlCQUFpQixHQUFHLEVBQUU7SUFDMUIsTUFBTWpCLEtBQUssR0FBR0YsR0FBRyxDQUFDRyxVQUFVLENBQUMsQ0FBQztJQUM5QixLQUFJLElBQUlFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0gsS0FBSyxFQUFFLEVBQUVHLENBQUMsRUFBRTtNQUMzQixJQUFJZSxNQUFNLEdBQUdwQixHQUFHLENBQUNHLFVBQVUsQ0FBQyxDQUFDO01BQzdCSixXQUFXLENBQUNDLEdBQUcsRUFBRSxVQUFTSSxJQUFJLEVBQUU7UUFDNUJPLEdBQUcsQ0FBQ1EsaUJBQWlCLENBQUNFLElBQUksQ0FBQyxFQUFDakIsSUFBSSxFQUFFQSxJQUFJLEVBQUVrQixhQUFhLEVBQUVGLE1BQU0sRUFBQyxDQUFDO01BQ25FLENBQUMsQ0FBQztJQUNOO0VBQ0o7O0VBRUEsSUFBSVIsS0FBSyxHQUFHbEIsZ0JBQWdCLENBQUNJLGdCQUFnQixFQUFFO0lBQzNDYSxHQUFHLENBQUNZLGFBQWEsR0FBRyxFQUFFO0lBQ3RCLE1BQU1yQixLQUFLLEdBQUdGLEdBQUcsQ0FBQ0csVUFBVSxDQUFDLENBQUM7SUFDOUIsS0FBSSxJQUFJRSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdILEtBQUssRUFBRSxFQUFFRyxDQUFDLEVBQUU7TUFDM0IsSUFBSW1CLEtBQUssR0FBR3hCLEdBQUcsQ0FBQ0csVUFBVSxDQUFDLENBQUM7TUFDNUJKLFdBQVcsQ0FBQ0MsR0FBRyxFQUFFLFVBQVNJLElBQUksRUFBRTtRQUM1Qk8sR0FBRyxDQUFDWSxhQUFhLENBQUNGLElBQUksQ0FBQyxFQUFDakIsSUFBSSxFQUFFQSxJQUFJLEVBQUVvQixLQUFLLEVBQUVBLEtBQUssRUFBQyxDQUFDO01BQ3RELENBQUMsQ0FBQztJQUNOO0VBQ0o7O0VBRUEsT0FBT2IsR0FBRztBQUNkIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9jb21tb24vT3ZlcnJpZGVTZXRzLmpzPzc0YjEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IE92ZXJyaWRlU2V0UGFydHMgPSB7XG4gICAgT1NfRGVmYXVsdE1hdGVyaWFsOiAxLFxuICAgIE9TX0RlZmF1bHRGbGFnczogMixcbiAgICBPU19NYXRlcmlhbE92ZXJyaWRlczogNCxcbiAgICBPU19GbGFnT3ZlcnJpZGVzOiA4XG59O1xuXG5mdW5jdGlvbiByZWFkRGJJZFNldChwZnIsIGZuKSB7XG4gICAgY29uc3QgY291bnQgPSBwZnIucmVhZFZhcmludCgpO1xuICAgIGxldCBkYklkID0gMDtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICBjb25zdCBkZWx0YSA9IHBmci5yZWFkVmFyaW50KCk7XG4gICAgICAgIGRiSWQgKz0gZGVsdGE7XG4gICAgICAgIGZuKGRiSWQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdmVycmlkZVNldChwZnIsIGVudHJ5KSB7XG4gICAgY29uc3QgdHNlID0gcGZyLnNlZWtUb0VudHJ5KGVudHJ5KTtcbiAgICBpZiAoIXRzZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2V0ID0ge307XG4gICAgY29uc3QgcGFydHMgPSBwZnIuc3RyZWFtLmdldFVpbnQzMigpO1xuXG4gICAgaWYgKHBhcnRzICYgT3ZlcnJpZGVTZXRQYXJ0cy5PU19EZWZhdWx0TWF0ZXJpYWwpIHtcbiAgICAgICAgc2V0LmRlZmF1bHRNYXRlcmlhbEluZGV4ID0gcGZyLnJlYWRWYXJpbnQoKTtcbiAgICAgICAgc2V0LmRlZmF1bHRNYXRlcmlhbEZsYWdzID0gcGZyLnJlYWRVOCgpO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cyAmIE92ZXJyaWRlU2V0UGFydHMuT1NfRGVmYXVsdEZsYWdzKSB7XG4gICAgICAgIHNldC5kZWZhdWx0RmxhZ3MgPSBwZnIucmVhZFZhcmludCgpO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cyAmIE92ZXJyaWRlU2V0UGFydHMuT1NfTWF0ZXJpYWxPdmVycmlkZXMpIHtcbiAgICAgICAgc2V0Lm1hdGVyaWFsT3ZlcnJpZGVzID0gW107XG4gICAgICAgIGNvbnN0IGNvdW50ID0gcGZyLnJlYWRWYXJpbnQoKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICAgIGxldCBtYXRJZHggPSBwZnIucmVhZFZhcmludCgpO1xuICAgICAgICAgICAgcmVhZERiSWRTZXQocGZyLCBmdW5jdGlvbihkYklkKSB7XG4gICAgICAgICAgICAgICAgc2V0Lm1hdGVyaWFsT3ZlcnJpZGVzLnB1c2goe2RiSWQ6IGRiSWQsIG1hdGVyaWFsSW5kZXg6IG1hdElkeH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFydHMgJiBPdmVycmlkZVNldFBhcnRzLk9TX0ZsYWdPdmVycmlkZXMpIHtcbiAgICAgICAgc2V0LmZsYWdPdmVycmlkZXMgPSBbXTtcbiAgICAgICAgY29uc3QgY291bnQgPSBwZnIucmVhZFZhcmludCgpO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgICAgbGV0IGZsYWdzID0gcGZyLnJlYWRWYXJpbnQoKTtcbiAgICAgICAgICAgIHJlYWREYklkU2V0KHBmciwgZnVuY3Rpb24oZGJJZCkge1xuICAgICAgICAgICAgICAgIHNldC5mbGFnT3ZlcnJpZGVzLnB1c2goe2RiSWQ6IGRiSWQsIGZsYWdzOiBmbGFnc30pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHNldDtcbn1cbiJdLCJuYW1lcyI6WyJPdmVycmlkZVNldFBhcnRzIiwiT1NfRGVmYXVsdE1hdGVyaWFsIiwiT1NfRGVmYXVsdEZsYWdzIiwiT1NfTWF0ZXJpYWxPdmVycmlkZXMiLCJPU19GbGFnT3ZlcnJpZGVzIiwicmVhZERiSWRTZXQiLCJwZnIiLCJmbiIsImNvdW50IiwicmVhZFZhcmludCIsImRiSWQiLCJpIiwiZGVsdGEiLCJyZWFkT3ZlcnJpZGVTZXQiLCJlbnRyeSIsInRzZSIsInNlZWtUb0VudHJ5Iiwic2V0IiwicGFydHMiLCJzdHJlYW0iLCJnZXRVaW50MzIiLCJkZWZhdWx0TWF0ZXJpYWxJbmRleCIsImRlZmF1bHRNYXRlcmlhbEZsYWdzIiwicmVhZFU4IiwiZGVmYXVsdEZsYWdzIiwibWF0ZXJpYWxPdmVycmlkZXMiLCJtYXRJZHgiLCJwdXNoIiwibWF0ZXJpYWxJbmRleCIsImZsYWdPdmVycmlkZXMiLCJmbGFncyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/OverrideSets.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/common/PackReader.js ": /*!*****************************************************!*\ !*** ./src/file-loaders/lmvtk/common/PackReader.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PackFileReader: ()=> (/* binding */ PackFileReader)\n/* harmony export */ });\n/* harmony import */ var _InputStream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InputStream */ \"./src/file-loaders/lmvtk/common/InputStream.js\");\n/* harmony import */ var _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../wgs/scene/LmvMatrix4 */ \"./src/wgs/scene/LmvMatrix4.js\");\n\n\n\n\"use strict\";\n\n/** @constructor */\nfunction PackFileReader(data)\n{\n var stream = this.stream = new _InputStream__WEBPACK_IMPORTED_MODULE_0__.InputStream(data);\n\n var len = stream.getInt32();\n this.type = stream.getString(len);\n this.version = stream.getInt32();\n\n this.types = null;\n this.entryOffsets = [];\n\n //read the table of contents\n {\n var offset = stream.offset;\n\n // Jump to file footer.\n stream.seek(stream.byteLength - 8);\n\n // Jump to toc.\n var tocOffset = stream.getUint32();\n this.typesOffset = stream.getUint32();\n\n // Populate type sets.\n stream.seek(this.typesOffset);\n var typesCount = this.readU32V();\n this.types = [];\n for (var i = 0; i < typesCount; ++i)\n this.types.push({\n \ "entryClass\": this.readString(),\n \ "entryType\": this.readString(),\n \ "version\": this.readU32V()\n });\n\n // Populate data offset list.\n stream.seek(tocOffset);\n var entryCount=t his.readU32V();\n var dso=t his.entryOffsets;\n for (let i=0 ; i < entryCount; ++i)\n dso.push(stream.getUint32());\n\n // Restore sanity of the world.\n stream.seek(offset);\n }\n}\n\nPackFileReader.prototype.readVarint=f unction () {\n var b;\n var value=0 ;\n var shiftBy=0 ;\n do {\n b=t his.stream.getUint8();\n value |=( b & 0x7f) << shiftBy;\n shiftBy +=7 ;\n } while (b & 0x80);\n return value;\n};\nPackFileReader.prototype.readU32V=P ackFileReader.prototype.readVarint;\n\nPackFileReader.prototype.readU16=f unction () {\n return this.stream.getUint16();\n};\n\nPackFileReader.prototype.readU8=f unction () {\n return this.stream.getUint8();\n};\n\nPackFileReader.prototype.readString=f unction () {\n return this.stream.getString(this.readU32V());\n};\n\nPackFileReader.prototype.readVector3f=f unction () {\n var s=t his.stream;\n return { x: s.getFloat32(), y: s.getFloat32(), z: s.getFloat32() };\n};\n\nPackFileReader.prototype.readF32=f unction () {\n return this.stream.getFloat32();\n};\n\nPackFileReader.prototype.readF64=f unction () {\n return this.stream.getFloat64();\n};\n\nPackFileReader.prototype.readVector3d=f unction () {\n\n var t={ x: 0, y: 0, z: 0 };\n\n return function () {\n var s=t his.stream;\n t.x=s .getFloat64();\n t.y=s .getFloat64();\n t.z=s .getFloat64();\n\n return t;\n };\n}();\n\nPackFileReader.prototype.readQuaternionf=f unction () {\n\n var q={ x: 0, y: 0, z: 0, w: 0 };\n\n return function () {\n var s=t his.stream;\n q.x=s .getFloat32();\n q.y=s .getFloat32();\n q.z=s .getFloat32();\n q.w=s .getFloat32();\n\n return q;\n };\n\n}();\n\nPackFileReader.prototype.readMatrix3f=f unction () {\n\n var _m=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_1__.LmvMatrix4();\n\n return function (dst) {\n if (!dst) dst=_ m;\n\n var s=t his.stream;\n dst.identity();\n for (var i=0 ; i < 3; ++i)\n for (var j=0 ; j < 3; ++j)\n dst.elements[4 * i + j]=s .getFloat32();\n\n return dst;\n };\n\n}();\n\n\n\nPackFileReader.prototype.readTransform=f unction () {\n\n var s={ x: 1, y: 1, z: 1 };\n var m=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_1__.LmvMatrix4(true);\n\n return function (entityIndex, buffer, offset, placementTransform, globalOffset, originalTranslation)\n {\n var stream=t his.stream;\n var t, q;\n\n var transformType=s tream.getUint8();\n\n switch (transformType) {\n\n case 4 /*TransformType.Identity*/:{\n m.identity();\n }break;\n case 0 /*TransformType.Translation*/:{\n t=t his.readVector3d();\n m.makeTranslation(t.x, t.y, t.z);\n }break;\n case 1 /*TransformType.RotationTranslation*/:{\n q=t his.readQuaternionf();\n t=t his.readVector3d();\n s.x=1 ;s.y=1 ;s.z=1 ;\n m.compose(t, q, s);\n }break;\n case 2 /*TransformType.UniformScaleRotationTranslation*/:{\n var scale=s tream.getFloat32();\n q=t his.readQuaternionf();\n t=t his.readVector3d();\n s.x=s cale;s.y=s cale;s.z=s cale;\n m.compose(t, q, s);\n }break;\n case 3 /*TransformType.AffineMatrix*/:{\n this.readMatrix3f(m);\n t=t his.readVector3d();\n m.setPosition(t);\n }break;\n default:\n break; //ERROR\n }\n\n //Report the original translation term to the caller, if they need it.\n //This is only required when reading fragment bounding boxes, where the translation\n //term of this matrix is subtracted from the bbox terms.\n if (originalTranslation) {\n originalTranslation[0]=m .elements[12];\n originalTranslation[1]=m .elements[13];\n originalTranslation[2]=m .elements[14];\n }\n\n //Apply any placement transform\n if (placementTransform) {\n m.multiplyMatrices(placementTransform, m);\n }\n\n //Apply global double precision offset on top\n if (globalOffset) {\n m.elements[12] -=g lobalOffset.x;\n m.elements[13] -=g lobalOffset.y;\n m.elements[14] -=g lobalOffset.z;\n }\n\n //Store result back into single precision matrix or array\n if (entityIndex !==u ndefined) {\n var src=m .elements;\n // Sometimes we don 't want to keep this data (e.g. when we are probing the fragment list\n // to find the data base id to fragment index mappings used for fragment filtering) so we\n // pass a null buffer and if that is the case, bail out here.\n if (!buffer) return;\n buffer[offset + 0] = src[0];buffer[offset + 1] = src[1];buffer[offset + 2] = src[2];\n buffer[offset + 3] = src[4];buffer[offset + 4] = src[5];buffer[offset + 5] = src[6];\n buffer[offset + 6] = src[8];buffer[offset + 7] = src[9];buffer[offset + 8] = src[10];\n buffer[offset + 9] = src[12];buffer[offset + 10] = src[13];buffer[offset + 11] = src[14];\n } else\n {\n return new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_1__.LmvMatrix4().copy(m);\n }\n };\n\n}();\n\nPackFileReader.prototype.getEntryCounts = function () {\n return this.entryOffsets.length;\n};\n\nPackFileReader.prototype.seekToEntry = function (entryIndex) {\n var count = this.getEntryCounts();\n if (entryIndex >= count)\n return null;\n\n // Read the type index and populate the entry data\n this.stream.seek(this.entryOffsets[entryIndex]);\n var typeIndex = this.stream.getUint32();\n if (typeIndex >= this.types.length)\n return null;\n\n return this.types[typeIndex];\n};\n\n\nPackFileReader.prototype.readPathID = function () {\n let s = this.stream;\n let path;\n\n //Construct a /-delimited string as the path to a node\n //TODO: in case we need a split representation (e.g. to follow paths), then\n //an array of numbers might be better to return from here.\n if (this.version < 2) {\n let pathLength = s.getUint16();\n if (!pathLength)\n return null;\n\n //The first number in a path ID is always zero (root)\n //so we skip adding it to the path string here.\n //Remove this section if that is not the case in the future.\n s.getUint16();\n if (pathLength == 1)\n return \"\";\n\n path = s.getUint16();\n for (let i = 2; i < pathLength; ++i) {\n path += \"/\" + s.getUint16();\n }\n } else\n {\n let pathLength = this.readU32V();\n if (!pathLength)\n return null;\n\n //The first number in a path ID is always zero (root)\n //so we skip adding it to the path string here.\n //Remove this section if that is not the case in the future.\n this.readU32V();\n if (pathLength == 1)\n return \"\";\n\n path = this.readU32V();\n for (let i = 2; i < pathLength; ++i) {\n path += \"/\" + this.readU32V();\n }\n }\n return path;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9QYWNrUmVhZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE0QztBQUNlOztBQUUzRCxZQUFZOztBQUVaO0FBQ08sU0FBU0UsY0FBY0EsQ0FBQ0MsSUFBSTtBQUNuQztFQUNJLElBQUlDLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU0sR0FBRyxJQUFJSixxREFBVyxDQUFDRyxJQUFJLENBQUM7O0VBRWhELElBQUlFLEdBQUcsR0FBR0QsTUFBTSxDQUFDRSxRQUFRLENBQUMsQ0FBQztFQUMzQixJQUFJLENBQUNDLElBQUksR0FBR0gsTUFBTSxDQUFDSSxTQUFTLENBQUNILEdBQUcsQ0FBQztFQUNqQyxJQUFJLENBQUNJLE9BQU8sR0FBR0wsTUFBTSxDQUFDRSxRQUFRLENBQUMsQ0FBQzs7RUFFaEMsSUFBSSxDQUFDSSxLQUFLLEdBQUcsSUFBSTtFQUNqQixJQUFJLENBQUNDLFlBQVksR0FBRyxFQUFFOztFQUV0QjtFQUNBO0lBQ0ksSUFBSUMsTUFBTSxHQUFHUixNQUFNLENBQUNRLE1BQU07O0lBRTFCO0lBQ0FSLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDVCxNQUFNLENBQUNVLFVBQVUsR0FBRyxDQUFDLENBQUM7O0lBRWxDO0lBQ0EsSUFBSUMsU0FBUyxHQUFHWCxNQUFNLENBQUNZLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQ0MsV0FBVyxHQUFHYixNQUFNLENBQUNZLFNBQVMsQ0FBQyxDQUFDOztJQUVyQztJQUNBWixNQUFNLENBQUNTLElBQUksQ0FBQyxJQUFJLENBQUNJLFdBQVcsQ0FBQztJQUM3QixJQUFJQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUNULEtBQUssR0FBRyxFQUFFO0lBQ2YsS0FBSyxJQUFJVSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLFVBQVUsRUFBRSxFQUFFRSxDQUFDO0lBQy9CLElBQUksQ0FBQ1YsS0FBSyxD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QUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDMkQsVUFBVTtJQUNYLE9BQU8sSUFBSTs7SUFFZjtJQUNBO0lBQ0E7SUFDQSxJQUFJLENBQUMzRCxRQUFRLENBQUMsQ0FBQztJQUNmLElBQUkyRCxVQUFVLElBQUksQ0FBQztJQUNmLE9BQU8sRUFBRTs7SUFFYkQsSUFBSSxHQUFHLElBQUksQ0FBQzFELFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHMEQsVUFBVSxFQUFFLEVBQUUxRCxDQUFDLEVBQUU7TUFDakN5RCxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQzFELFFBQVEsQ0FBQyxDQUFDO0lBQ2pDO0VBQ0o7RUFDQSxPQUFPMEQsSUFBSTtBQUNmLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9QYWNrUmVhZGVyLmpzPzQxMTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXRTdHJlYW0gfSBmcm9tICcuL0lucHV0U3RyZWFtJztcbmltcG9ydCB7IExtdk1hdHJpeDQgfSBmcm9tICcuLi8uLi8uLi93Z3Mvc2NlbmUvTG12TWF0cml4NCc7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vKiogQGNvbnN0cnVjdG9yICovXG5leHBvcnQgZnVuY3Rpb24gUGFja0ZpbGVSZWFkZXIoZGF0YSlcbntcbiAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW0gPSBuZXcgSW5wdXRTdHJlYW0oZGF0YSk7XG5cbiAgICB2YXIgbGVuID0gc3RyZWFtLmdldEludDMyKCk7XG4gICAgdGhpcy50eXBlID0gc3RyZWFtLmdldFN0cmluZyhsZW4pO1xuICAgIHRoaXMudmVyc2lvbiA9IHN0cmVhbS5nZXRJbnQzMigpO1xuXG4gICAgdGhpcy50eXBlcyA9IG51bGw7XG4gICAgdGhpcy5lbnRyeU9mZnNldHMgPSBbXTtcblxuICAgIC8vcmVhZCB0aGUgdGFibGUgb2YgY29udGVudHNcbiAgICB7XG4gICAgICAgIHZhciBvZmZzZXQgPSBzdHJlYW0ub2Zmc2V0O1xuXG4gICAgICAgIC8vIEp1bXAgdG8gZmlsZSBmb290ZXIuXG4gICAgICAgIHN0cmVhbS5zZWVrKHN0cmVhbS5ieXRlTGVuZ3RoIC0gOCk7XG5cbiAgICAgICAgLy8gSnVtcCB0byB0b2MuXG4gICAgICAgIHZhciB0b2NPZmZzZXQgPSBzdHJlYW0uZ2V0VWludDMyKCk7XG4gICAgICAgIHRoaXMudHlwZXNPZmZzZXQgPSBzdHJlYW0uZ2V0VWludDMyKCk7XG5cbiAgICAgICAgLy8gUG9wdWxhdGUgdHlwZSBzZXRzLlxuICAgICAgICBzdHJlYW0uc2Vlayh0aGlzLnR5cGVzT2Zmc2V0KTtcbiAgICAgICAgdmFyIHR5cGVzQ291bnQgPSB0aGlzLnJlYWRVMzJWKCk7XG4gICAgICAgIHRoaXMudHlwZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlc0NvdW50OyArK2kpXG4gICAgICAgICAgICB0aGlzLnR5cGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIFwiZW50cnlDbGFzc1wiOiB0aGlzLnJlYWRTdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBcImVudHJ5VHlwZVwiOiB0aGlzLnJlYWRTdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBcInZlcnNpb25cIjogdGhpcy5yZWFkVTMyVigpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBQb3B1bGF0ZSBkYXRhIG9mZnNldCBsaXN0LlxuICAgICAgICBzdHJlYW0uc2Vlayh0b2NPZmZzZXQpO1xuICAgICAgICB2YXIgZW50cnlDb3VudCA9IHRoaXMucmVhZFUzMlYoKTtcbiAgICAgICAgdmFyIGRzbyA9IHRoaXMuZW50cnlPZmZzZXRzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJ5Q291bnQ7ICsraSlcbiAgICAgICAgICAgIGRzby5wdXNoKHN0cmVhbS5nZXRVaW50MzIoKSk7XG5cbiAgICAgICAgLy8gUmVzdG9yZSBzYW5pdHkgb2YgdGhlIHdvcmxkLlxuICAgICAgICBzdHJlYW0uc2VlayhvZmZzZXQpO1xuICAgIH1cbn1cblxuUGFja0ZpbGVSZWFkZXIucHJvdG90eXBlLnJlYWRWYXJpbnQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYjtcbiAgICB2YXIgdmFsdWUgPSAwO1xuICAgIHZhciBzaGlmdEJ5ID0gMDtcbiAgICBkbyB7XG4gICAgICAgIGIgPSB0aGlzLnN0cmVhbS5nZXRVaW50OCgpO1xuICAgICAgICB2YWx1ZSB8PSAoYiAmIDB4N2YpIDw8IHNoaWZ0Qnk7XG4gICAgICAgIHNoaWZ0QnkgKz0gNztcbiAgICB9IHdoaWxlIChiICYgMHg4MCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblBhY2tGaWxlUmVhZGVyLnByb3RvdHlwZS5yZWFkVTMyViA9IFBhY2tGaWxlUmVhZGVyLnByb3RvdHlwZS5yZWFkVmFyaW50O1xuXG5QYWNrRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZFUxNiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW0uZ2V0VWludDE2KCk7XG59O1xuXG5QYWNrRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZFU4ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbS5nZXRVaW50OCgpO1xufTtcblxuUGFja0ZpbGVSZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW0uZ2V0U3RyaW5nKHRoaXMucmVhZFUzMlYoKSk7XG59O1xuXG5QYWNrRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZFZlY3RvcjNmID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zdHJlYW07XG4gICAgcmV0dXJuIHsgeDpzLmdldEZsb2F0MzIoKSwgeTpzLmdldEZsb2F0MzIoKSwgejpzLmdldEZsb2F0MzIoKX07XG59O1xuXG5QYWNrRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZEYzMiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW0uZ2V0RmxvYXQzMigpO1xufTtcblxuUGFja0ZpbGVSZWFkZXIucHJvdG90eXBlLnJlYWRGNjQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtLmdldEZsb2F0NjQoKTtcbn07XG5cblBhY2tGaWxlUmVhZGVyLnByb3RvdHlwZS5yZWFkVmVjdG9yM2QgPSAoZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgdCA9IHsgeDowLCB5OjAsIHo6MCB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICAgICAgdC54ID0gcy5nZXRGbG9hdDY0KCk7XG4gICAgICAgIHQueSA9IHMuZ2V0RmxvYXQ2NCgpO1xuICAgICAgICB0LnogPSBzLmdldEZsb2F0NjQoKTtcblxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xufSkoKTtcblxuUGFja0ZpbGVSZWFkZXIucHJvdG90eXBlLnJlYWRRdWF0ZXJuaW9uZiA9IChmdW5jdGlvbigpIHtcblxuICAgIHZhciBxID0geyB4OjAsIHk6MCwgejowLCB3OjAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICAgICAgcS54ID0gcy5nZXRGbG9hdDMyKCk7XG4gICAgICAgIHEueSA9IHMuZ2V0RmxvYXQzMigpO1xuICAgICAgICBxLnogPSBzLmdldEZsb2F0MzIoKTtcbiAgICAgICAgcS53ID0gcy5nZXRGbG9hdDMyKCk7XG5cbiAgICAgICAgcmV0dXJuIHE7XG4gICAgfTtcblxufSkoKTtcblxuUGFja0ZpbGVSZWFkZXIucHJvdG90eXBlLnJlYWRNYXRyaXgzZiA9IChmdW5jdGlvbigpIHtcblxuICAgIHZhciBfbSA9IG5ldyBMbXZNYXRyaXg0KCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oZHN0KSB7XG4gICAgICAgIGlmICghZHN0KSBkc3QgPSBfbTtcbiAgICAgICAgICAgIFxuICAgICAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgICAgICBkc3QuaWRlbnRpdHkoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7ICsrailcbiAgICAgICAgICAgICAgICBkc3QuZWxlbWVudHNbNCppK2pdID0gcy5nZXRGbG9hdDMyKCk7XG5cbiAgICAgICAgcmV0dXJuIGRzdDtcbiAgICB9O1xuXG59KSgpO1xuXG5cblxuUGFja0ZpbGVSZWFkZXIucHJvdG90eXBlLnJlYWRUcmFuc2Zvcm0gPSAoZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgcyA9IHsgeDoxLCB5OjEsIHo6MSB9O1xuICAgIHZhciBtID0gbmV3IExtdk1hdHJpeDQodHJ1ZSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oZW50aXR5SW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBwbGFjZW1lbnRUcmFuc2Zvcm0sIGdsb2JhbE9mZnNldCwgb3JpZ2luYWxUcmFuc2xhdGlvbilcbiAgICB7XG4gICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbTtcbiAgICAgICAgdmFyIHQsIHE7XG5cbiAgICAgICAgdmFyIHRyYW5zZm9ybVR5cGUgPSBzdHJlYW0uZ2V0VWludDgoKTtcblxuICAgICAgICBzd2l0Y2ggKHRyYW5zZm9ybVR5cGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNhc2UgNC8qVHJhbnNmb3JtVHlwZS5JZGVudGl0eSovOiB7XG4gICAgICAgICAgICAgICAgbS5pZGVudGl0eSgpO1xuICAgICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMC8qVHJhbnNmb3JtVHlwZS5UcmFuc2xhdGlvbiovOiB7XG4gICAgICAgICAgICAgICAgdCA9IHRoaXMucmVhZFZlY3RvcjNkKCk7XG4gICAgICAgICAgICAgICAgbS5tYWtlVHJhbnNsYXRpb24odC54LCB0LnksIHQueik7XG4gICAgICAgICAgICB9IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxLypUcmFuc2Zvcm1UeXBlLlJvdGF0aW9uVHJhbnNsYXRpb24qLzoge1xuICAgICAgICAgICAgICAgIHEgPSB0aGlzLnJlYWRRdWF0ZXJuaW9uZigpO1xuICAgICAgICAgICAgICAgIHQgPSB0aGlzLnJlYWRWZWN0b3IzZCgpO1xuICAgICAgICAgICAgICAgIHMueCA9IDE7cy55ID0gMTtzLnogPSAxO1xuICAgICAgICAgICAgICAgIG0uY29tcG9zZSh0LCBxLCBzKTtcbiAgICAgICAgICAgIH0gYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDIvKlRyYW5zZm9ybVR5cGUuVW5pZm9ybVNjYWxlUm90YXRpb25UcmFuc2xhdGlvbiovOiB7XG4gICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gc3RyZWFtLmdldEZsb2F0MzIoKTtcbiAgICAgICAgICAgICAgICBxID0gdGhpcy5yZWFkUXVhdGVybmlvbmYoKTtcbiAgICAgICAgICAgICAgICB0ID0gdGhpcy5yZWFkVmVjdG9yM2QoKTtcbiAgICAgICAgICAgICAgICBzLnggPSBzY2FsZTsgcy55ID0gc2NhbGU7IHMueiA9IHNjYWxlO1xuICAgICAgICAgICAgICAgIG0uY29tcG9zZSh0LCBxLCBzKTtcbiAgICAgICAgICAgIH0gYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDMvKlRyYW5zZm9ybVR5cGUuQWZmaW5lTWF0cml4Ki86IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWRNYXRyaXgzZihtKTtcbiAgICAgICAgICAgICAgICB0ID0gdGhpcy5yZWFkVmVjdG9yM2QoKTtcbiAgICAgICAgICAgICAgICBtLnNldFBvc2l0aW9uKHQpO1xuICAgICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vRVJST1JcbiAgICAgICAgfVxuXG4gICAgICAgIC8vUmVwb3J0IHRoZSBvcmlnaW5hbCB0cmFuc2xhdGlvbiB0ZXJtIHRvIHRoZSBjYWxsZXIsIGlmIHRoZXkgbmVlZCBpdC5cbiAgICAgICAgLy9UaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiByZWFkaW5nIGZyYWdtZW50IGJvdW5kaW5nIGJveGVzLCB3aGVyZSB0aGUgdHJhbnNsYXRpb25cbiAgICAgICAgLy90ZXJtIG9mIHRoaXMgbWF0cml4IGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgYmJveCB0ZXJtcy5cbiAgICAgICAgaWYgKG9yaWdpbmFsVHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgIG9yaWdpbmFsVHJhbnNsYXRpb25bMF0gPSBtLmVsZW1lbnRzWzEyXTtcbiAgICAgICAgICAgIG9yaWdpbmFsVHJhbnNsYXRpb25bMV0gPSBtLmVsZW1lbnRzWzEzXTtcbiAgICAgICAgICAgIG9yaWdpbmFsVHJhbnNsYXRpb25bMl0gPSBtLmVsZW1lbnRzWzE0XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vQXBwbHkgYW55IHBsYWNlbWVudCB0cmFuc2Zvcm1cbiAgICAgICAgaWYgKHBsYWNlbWVudFRyYW5zZm9ybSkge1xuICAgICAgICAgICAgbS5tdWx0aXBseU1hdHJpY2VzKHBsYWNlbWVudFRyYW5zZm9ybSwgbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL0FwcGx5IGdsb2JhbCBkb3VibGUgcHJlY2lzaW9uIG9mZnNldCBvbiB0b3BcbiAgICAgICAgaWYgKGdsb2JhbE9mZnNldCkge1xuICAgICAgICAgICAgbS5lbGVtZW50c1sxMl0gLT0gZ2xvYmFsT2Zmc2V0Lng7XG4gICAgICAgICAgICBtLmVsZW1lbnRzWzEzXSAtPSBnbG9iYWxPZmZzZXQueTtcbiAgICAgICAgICAgIG0uZWxlbWVudHNbMTRdIC09IGdsb2JhbE9mZnNldC56O1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TdG9yZSByZXN1bHQgYmFjayBpbnRvIHNpbmdsZSBwcmVjaXNpb24gbWF0cml4IG9yIGFycmF5XG4gICAgICAgIGlmIChlbnRpdHlJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgc3JjID0gbS5lbGVtZW50cztcbiAgICAgICAgICAgIC8vIFNvbWV0aW1lcyB3ZSBkb24ndCB3YW50IHRvIGtlZXAgdGhpcyBkYXRhIChlLmcuIHdoZW4gd2UgYXJlIHByb2JpbmcgdGhlIGZyYWdtZW50IGxpc3RcbiAgICAgICAgICAgIC8vIHRvIGZpbmQgdGhlIGRhdGEgYmFzZSBpZCB0byBmcmFnbWVudCBpbmRleCBtYXBwaW5ncyB1c2VkIGZvciBmcmFnbWVudCBmaWx0ZXJpbmcpIHNvIHdlXG4gICAgICAgICAgICAvLyBwYXNzIGEgbnVsbCBidWZmZXIgYW5kIGlmIHRoYXQgaXMgdGhlIGNhc2UsIGJhaWwgb3V0IGhlcmUuXG4gICAgICAgICAgICBpZiAoIWJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICAgICAgYnVmZmVyW29mZnNldCswXSA9IHNyY1swXTsgYnVmZmVyW29mZnNldCsxXSA9IHNyY1sxXTsgYnVmZmVyW29mZnNldCsyXSA9IHNyY1syXTtcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrM10gPSBzcmNbNF07IGJ1ZmZlcltvZmZzZXQrNF0gPSBzcmNbNV07IGJ1ZmZlcltvZmZzZXQrNV0gPSBzcmNbNl07XG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KzZdID0gc3JjWzhdOyBidWZmZXJbb2Zmc2V0KzddID0gc3JjWzldOyBidWZmZXJbb2Zmc2V0KzhdID0gc3JjWzEwXTtcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrOV0gPSBzcmNbMTJdOyBidWZmZXJbb2Zmc2V0KzEwXSA9IHNyY1sxM107IGJ1ZmZlcltvZmZzZXQrMTFdID0gc3JjWzE0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTG12TWF0cml4NCgpLmNvcHkobSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG59KSgpO1xuXG5QYWNrRmlsZVJlYWRlci5wcm90b3R5cGUuZ2V0RW50cnlDb3VudHMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyeU9mZnNldHMubGVuZ3RoO1xufTtcblxuUGFja0ZpbGVSZWFkZXIucHJvdG90eXBlLnNlZWtUb0VudHJ5ID0gZnVuY3Rpb24oZW50cnlJbmRleCkge1xuICAgIHZhciBjb3VudCA9IHRoaXMuZ2V0RW50cnlDb3VudHMoKTtcbiAgICBpZiAoZW50cnlJbmRleCA+PSBjb3VudClcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBSZWFkIHRoZSB0eXBlIGluZGV4IGFuZCBwb3B1bGF0ZSB0aGUgZW50cnkgZGF0YVxuICAgIHRoaXMuc3RyZWFtLnNlZWsodGhpcy5lbnRyeU9mZnNldHNbZW50cnlJbmRleF0pO1xuICAgIHZhciB0eXBlSW5kZXggPSB0aGlzLnN0cmVhbS5nZXRVaW50MzIoKTtcbiAgICBpZiAodHlwZUluZGV4ID49IHRoaXMudHlwZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLnR5cGVzW3R5cGVJbmRleF07XG59O1xuXG5cblBhY2tGaWxlUmVhZGVyLnByb3RvdHlwZS5yZWFkUGF0aElEID0gZnVuY3Rpb24oKSB7XG4gICAgbGV0IHMgPSB0aGlzLnN0cmVhbTtcbiAgICBsZXQgcGF0aDtcblxuICAgIC8vQ29uc3RydWN0IGEgLy1kZWxpbWl0ZWQgc3RyaW5nIGFzIHRoZSBwYXRoIHRvIGEgbm9kZVxuICAgIC8vVE9ETzogaW4gY2FzZSB3ZSBuZWVkIGEgc3BsaXQgcmVwcmVzZW50YXRpb24gKGUuZy4gdG8gZm9sbG93IHBhdGhzKSwgdGhlblxuICAgIC8vYW4gYXJyYXkgb2YgbnVtYmVycyBtaWdodCBiZSBiZXR0ZXIgdG8gcmV0dXJuIGZyb20gaGVyZS5cbiAgICBpZiAodGhpcy52ZXJzaW9uIDwgMikge1xuICAgICAgICBsZXQgcGF0aExlbmd0aCA9IHMuZ2V0VWludDE2KCk7XG4gICAgICAgIGlmICghcGF0aExlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIC8vVGhlIGZpcnN0IG51bWJlciBpbiBhIHBhdGggSUQgaXMgYWx3YXlzIHplcm8gKHJvb3QpXG4gICAgICAgIC8vc28gd2Ugc2tpcCBhZGRpbmcgaXQgdG8gdGhlIHBhdGggc3RyaW5nIGhlcmUuXG4gICAgICAgIC8vUmVtb3ZlIHRoaXMgc2VjdGlvbiBpZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSBpbiB0aGUgZnV0dXJlLlxuICAgICAgICBzLmdldFVpbnQxNigpO1xuICAgICAgICBpZiAocGF0aExlbmd0aCA9PSAxKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG5cbiAgICAgICAgcGF0aCA9IHMuZ2V0VWludDE2KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgcGF0aExlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBwYXRoICs9IFwiL1wiICsgcy5nZXRVaW50MTYoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IHBhdGhMZW5ndGggPSB0aGlzLnJlYWRVMzJWKCk7XG4gICAgICAgIGlmICghcGF0aExlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIC8vVGhlIGZpcnN0IG51bWJlciBpbiBhIHBhdGggSUQgaXMgYWx3YXlzIHplcm8gKHJvb3QpXG4gICAgICAgIC8vc28gd2Ugc2tpcCBhZGRpbmcgaXQgdG8gdGhlIHBhdGggc3RyaW5nIGhlcmUuXG4gICAgICAgIC8vUmVtb3ZlIHRoaXMgc2VjdGlvbiBpZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSBpbiB0aGUgZnV0dXJlLlxuICAgICAgICB0aGlzLnJlYWRVMzJWKCk7XG4gICAgICAgIGlmIChwYXRoTGVuZ3RoID09IDEpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcblxuICAgICAgICBwYXRoID0gdGhpcy5yZWFkVTMyVigpO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IHBhdGhMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcGF0aCArPSBcIi9cIiArIHRoaXMucmVhZFUzMlYoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn07XG4iXSwibmFtZXMiOlsiSW5wdXRTdHJlYW0iLCJMbXZNYXRyaXg0IiwiUGFja0ZpbGVSZWFkZXIiLCJkYXRhIiwic3RyZWFtIiwibGVuIiwiZ2V0SW50MzIiLCJ0eXBlIiwiZ2V0U3RyaW5nIiwidmVyc2lvbiIsInR5cGVzIiwiZW50cnlPZmZzZXRzIiwib2Zmc2V0Iiwic2VlayIsImJ5dGVMZW5ndGgiLCJ0b2NPZmZzZXQiLCJnZXRVaW50MzIiLCJ0eXBlc09mZnNldCIsInR5cGVzQ291bnQiLCJyZWFkVTMyViIsImkiLCJwdXNoIiwicmVhZFN0cmluZyIsImVudHJ5Q291bnQiLCJkc28iLCJwcm90b3R5cGUiLCJyZWFkVmFyaW50IiwiYiIsInZhbHVlIiwic2hpZnRCeSIsImdldFVpbnQ4IiwicmVhZFUxNiIsImdldFVpbnQxNiIsInJlYWRVOCIsInJlYWRWZWN0b3IzZiIsInMiLCJ4IiwiZ2V0RmxvYXQzMiIsInkiLCJ6IiwicmVhZEYzMiIsInJlYWRGNjQiLCJnZXRGbG9hdDY0IiwicmVhZFZlY3RvcjNkIiwidCIsInJlYWRRdWF0ZXJuaW9uZiIsInEiLCJ3IiwicmVhZE1hdHJpeDNmIiwiX20iLCJkc3QiLCJpZGVudGl0eSIsImoiLCJlbGVtZW50cyIsInJlYWRUcmFuc2Zvcm0iLCJtIiwiZW50aXR5SW5kZXgiLCJidWZmZXIiLCJwbGFjZW1lbnRUcmFuc2Zvcm0iLCJnbG9iYWxPZmZzZXQiLCJvcmlnaW5hbFRyYW5zbGF0aW9uIiwidHJhbnNmb3JtVHlwZSIsIm1ha2VUcmFuc2xhdGlvbiIsImNvbXBvc2UiLCJzY2FsZSIsInNldFBvc2l0aW9uIiwibXVsdGlwbHlNYXRyaWNlcyIsInVuZGVmaW5lZCIsInNyYyIsImNvcHkiLCJnZXRFbnRyeUNvdW50cyIsImxlbmd0aCIsInNlZWtUb0VudHJ5IiwiZW50cnlJbmRleCIsImNvdW50IiwidHlwZUluZGV4IiwicmVhZFBhdGhJRCIsInBhdGgiLCJwYXRoTGVuZ3RoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/PackReader.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/common/Propdb.js": /*!*************************************************!*\ !*** ./src/file-loaders/lmvtk/common/Propdb.js ***! \*************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PropertyDatabase: () => (/* binding */ PropertyDatabase)\n/* harmony export */ });\n/* harmony import */ var _common_StringUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/StringUtils */ \"./src/file-loaders/lmvtk/common/StringUtils.js\");\n/* harmony import */ var _common_SearchUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/SearchUtils */ \"./src/file-loaders/lmvtk/common/SearchUtils.js\");\n/* harmony import */ var _PropdbEnums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PropdbEnums */ \"./src/file-loaders/lmvtk/common/PropdbEnums.js\");\n\n\n\n\n\n\n//Inlined into enumObjectProperties below\n/*\nfunction readVarint(buf, offset) {\n var b;\n var value = 0;\n var shiftBy = 0;\n do {\n b = buf[offset[0]++];\n value |= (b & 0x7f) << shiftBy;\n shiftBy += 7;\n } while (b & 0x80);\n return value;\n}\n*/\n\n/**\n * The Property Database contains property information for each part of a model.\n * The data is read-only, since it has been packed to optimize memory footprint.\n * It's implemented as an Entity-Atribute-Value (EAV) set of tables.\n * LMV keeps the PropertyDatabase in a browser worker thread to prevent compute-intensive\n * methods to block the main browser UI thread.\n * Words \ "Attribute\" and \ "Property\" are use interchangeably.\n *\n * @param dbjsons\n * @class\n * @class\n */\nfunction PropertyDatabase(dbjsons) {\n\n \ "use strict\";\n\n var _this=t his;\n\n var _isV2=f alse;\n var _isVarint=f alse;\n\n //The property db json arrays.\n //Some of them are held unparsed in blob form\n //with helper arrays containing offsets into the blobs for each value to be parsed on demand\n var _attrs; // Array of arrays. Inner array is in the form [attrName(0), category(1), dataType(2), dataTypeContext(3), description(4), displayName(5), flags(6), precision(7) ] \n // See struct AttributeDef in https://git.autodesk.com/A360/platform-translation-propertydb/blob/master/propertydb/PropertyDatabase.h \n var _offsets;\n var _avs;\n var _valuesBlob;\n var _valuesOffsets;\n var _idsBlob;\n var _idsOffsets;\n\n //Cached ids of commonly used well known attributes (child, parent, name)\n var _childAttrId;\n var _parentAttrId;\n var _nameAttrId;\n var _instanceOfAttrId;\n var _viewableInAttrId;\n var _externalRefAttrId;\n var _nodeFlagsAttrId;\n var _layersAttrId;\n\n //Transient structures for detecting invalid cycles in buildObjectTree()\n var _processedIds;\n var _cyclesCount;\n\n // Used for memoizing recursive calls to getNodeNameAndChildren\n let _instanceNodeCache={ };\n\n //dbjsons is expected to be of the form\n //{ attrs: {filename1:x, filename2:y}, ids: {filename1:x... }, values: {... }, offsets: {... }, avs: {... } }\n //where each of the elements of each array is a pair of the original name and the unzipped *raw* byte\n //array buffer corresponding to the respective property database constituent. In the current implementation\n //each array is expected to only have one name-value element.\n\n\n //=========================================================================\n\n //The attribute definitions blob is considered small enough\n //to parse using regular APIs\n for (var p in dbjsons.attrs) {\n _attrs=( 0,_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.blobToJson)(dbjsons.attrs[p]);\n\n if (_attrs[0]===\ "pdb version 2\")\n _isV2=t rue;\n\n for (var i=1 ; i < _attrs.length; i++) {\n\n var attrName=_ attrs[i][0];\n switch (attrName) {\n case \ "Layer\":_layersAttrId=i ;break;\n default:break;\n }\n\n var category=_ attrs[i][1];\n\n switch (category) {\n case \ "__parent__\":_parentAttrId=i ;break;\n case \ "__child__\":_childAttrId=i ;break;\n case \ "__name__\":_nameAttrId=i ;break;\n case \ "__instanceof__\":_instanceOfAttrId=i ;break;\n case \ "__viewable_in__\":_viewableInAttrId=i ;break;\n case \ "__externalref__\":_externalRefAttrId=i ;break;\n case \ "__node_flags__\":_nodeFlagsAttrId=i ;break;\n default:break;\n }\n\n //As of V2, DbKey attribute values are stored directly into the AV array\n if (_isV2 && _attrs[i][2]===_ PropdbEnums__WEBPACK_IMPORTED_MODULE_2__.AttributeType.DbKey) {\n _attrs[i][6]=_ attrs[i][6] | _PropdbEnums__WEBPACK_IMPORTED_MODULE_2__.AttributeFlags.afDirectStorage;\n }\n }\n\n break; //currently we can only handle single property file (no chunking)\n }\n\n //manual parse of the attribute-value index pairs array\n for (let p in dbjsons.avs) {\n\n let buf=d bjsons.avs[p];\n\n if (buf[0]===\ "[\".charCodeAt(0)) {\n _avs=( 0,_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.parseIntArray)(dbjsons.avs[p], 0);\n } else {\n _avs=b uf;\n _isVarint=t rue;\n }\n\n delete dbjsons.avs; //don 't need this blob anymore\n\n break; //currently we can only handle single property file (no chunking)\n\n }\n\n\n //manual parse of the offsets array\n for (let p in dbjsons.offsets) {\n\n let buf = dbjsons.offsets[p];\n\n if (buf[0] === \"[\".charCodeAt(0)) {\n _offsets = (0,_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.parseIntArray)(buf, 1); //passing in 1 to reserve a spot for the sentinel value\n\n //just a sentinel value to make lookups for the last item easier\n _offsets[_offsets.length - 1] = _avs.length / 2;\n } else {\n _offsets = new Int32Array(buf.buffer, buf.byteOffset, buf.byteLength / 4);\n }\n\n delete dbjsons.offsets; //don't need this\n\n break; //currently we can only handle single property file (no chunking)\n\n }\n\n //Instead of parsing the values and ids arrays, find the\n //offset of each json item in the blob, and then we can\n //pick and parse specific items later on demand, without\n //parsing the potentially large json blob up front.\n for (let p in dbjsons.values) {\n _valuesBlob=d bjsons.values[p];\n _valuesOffsets=( 0,_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.findValueOffsets)(_valuesBlob);\n\n break; //currently we can only handle single property file (no chunking)\n\n }\n\n // Get externalIds from data blob. Unlike the other data, this one is optional\n // and may be loaded later or not at all to save memory.\n this.setIdsBlob=f unction (data) {\n // Just like for _valuesBlob: Find the offset to each value \n // but skip the full parse.\n _idsBlob=d ata;\n _idsOffsets=( 0,_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.findValueOffsets)(data);\n };\n\n //Set ids array (if available). Note that the ids array is\n //optional and LMV does not require them. (Just some extensions might do - like PushPins)\n for (let p in dbjsons.ids) {\n this.setIdsBlob(dbjsons.ids[p]);\n break; //currently we can only handle single property file (no chunking)\n }\n\n //=========================================================================\n\n /**\n * Obtains the number of database ids (dbIds) available. \n * These ids range betwee 1 (inclusive) up to getObjectCount() (exclusive).\n *\n * @returns {number}\n */\n this.getObjectCount=f unction () {\n return _offsets.length - 1;\n };\n\n this.getValueAt=f unction (valId) {\n return (0,_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.subBlobToJson)(_valuesBlob, _valuesOffsets[valId]);\n };\n\n //faster variant used for traversing the object hierarchy where\n //we know the data type of the value to be an integer\n this.getIntValueAt=f unction (valId) {\n return (0,_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.subBlobToJsonInt)(_valuesBlob, _valuesOffsets[valId]);\n };\n\n\n this.getIdAt=f unction (entId) {\n return (0,_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.subBlobToJson)(_idsBlob, _idsOffsets[entId]);\n };\n\n // Loading the (large) externalIDs can be skipped to save memory.\n this.externalIdsLoaded=f unction () {\n return Boolean(_idsBlob);\n };\n\n /**\n * Obtains the actual value of a property.\n *\n * @param {number} attrId - The attribute id\n * @param {number} valId - The value id\n * @param {boolean} [integerHint] - If true the return value will be casted to integer.\n *\n * @returns {*} \n */\n this.getAttrValue=f unction (attrId, valId, integerHint) {\n var attr=_ attrs[attrId];\n if (attr[6] & _PropdbEnums__WEBPACK_IMPORTED_MODULE_2__.AttributeFlags.afDirectStorage) {\n if (attr[2]===_ PropdbEnums__WEBPACK_IMPORTED_MODULE_2__.AttributeType.DbKey) {\n //db keys are stored directly in the EAV triplet\n return valId;\n }\n }\n\n return integerHint ? this.getIntValueAt(valId) : this.getValueAt(valId);\n };\n\n this._getObjectProperty=f unction (attrId, valId) {\n\n var attr=_ attrs[attrId];\n var displayName=a ttr[5] ? attr[5] : attr[0];\n var hidden=t his.attributeHidden(attrId);\n\n // type values match those in PropertyDatabase.h\n // See: https://git.autodesk.com/A360/platform-translation-propertydb/blob/master/propertydb/PropertyDatabase.h#L67\n return {\n displayName: displayName,\n displayValue: _this.getAttrValue(attrId, valId),\n displayCategory: attr[1],\n attributeName: attr[0],\n type: attr[2],\n units: attr[3],\n hidden: hidden,\n precision: attr[7] || 0\n };\n };\n\n /**\n * Obtains all properties for a given database id.\n *\n * @param {number} dbId - The database id\n * @param {string[]} [propFilter=null] - Array of property names to return values for. Use null for no filtering.\n * @param {boolean} [ignoreHidden=false] - true to ignore hidden properties.\n * @param {string[]} [propIgnored=null] - Array of property names to not include in the return value.\n *\n * @returns {object} consisting of attributes `name`, `dbId`, `properties` and `externalId`.\n */\n this.getObjectProperties=f unction (dbId, propFilter, ignoreHidden, propIgnored, categoryFilter) {\n var result={ \n \ "dbId\": dbId,\n \ "properties\": []\n };\n\n var needName=f alse;\n\n // Check if externalIds are wanted and available\n var filterContainsId=p ropFilter && propFilter.indexOf(\ "externalId\") !==- 1;\n var idsLoaded=t his.externalIdsLoaded();\n\n // If externalIds are explicitly addressed in the filter, we can assume that the caller expects\n // to have them in the result. So we should report an error if they are not loaded.\n if (filterContainsId && !idsLoaded) {\n console.error( 'Requesting externalID requires loading of the externalID table');\n }\n\n // We add externalIds to the result if...\n // 1. externalIds are in memory\n // 2. Either the filter includes externalIds or there is no filter\n var addExternalId=i dsLoaded && (!propFilter || filterContainsId);\n if (addExternalId) {\n result.externalId=t his.getIdAt(dbId);\n\n // If there are no other properties required, then just return.\n // Useful when we only care about fetching externalId-only data.\n if (propFilter && propFilter.length===1 ) {\n return result;\n }\n }\n\n var parentProps=n ull;\n\n //Loop over the attribute index - value index pairs for the objects\n //and for each one look up the attribute and the value in their\n //respective arrays.\n this.enumObjectProperties(dbId, function (attrId, valId) {\n if (attrId==_ instanceOfAttrId) {\n //Recursively resolve any common properties from the parent of this instance\n //NOTE: Here we explicitly ignore hidden properties, because we don 't \n //want the parent instance to override parent/child nodes and other structural \n //attributes. Specifically, Revit extraction has a bug where the model tree parent is \n //also instance prototype for its children, so we need to prevent the child\n //from gaining all its siblings as children of its own due to this inheritance.\n var res = _this.getObjectProperties(_this.getAttrValue(attrId, valId), propFilter, true /*ignoreHidden*/, propIgnored, categoryFilter);\n if (res && res.properties) {\n parentProps = res;\n }\n return;\n }\n\n var attr = _attrs[attrId];\n\n if (propFilter && propFilter.indexOf(attr[0]) === -1 && propFilter.indexOf(attr[5]) === -1)\n return;\n\n if (categoryFilter && categoryFilter.indexOf(attr[1]) === -1)\n return;\n\n if (propIgnored && (propIgnored.indexOf(attr[0]) > -1 || propIgnored.indexOf(attr[5]) > -1))\n return;\n\n if (attrId == _nameAttrId) {\n var val = _this.getAttrValue(attrId, valId);\n needName = true;\n result.name = val;\n } else\n {\n\n //skip structural attributes, we don't want those to display\n //NOTE: The list of structural attributes that we check explicitly is not marked\n //as hidden in older versions of the property database, so if we ever want to\n //add them to the result list, we have to explicitly set the hidden flag for those.\n var hidden=_ this.attributeHidden(attrId);\n if (ignoreHidden && hidden) {\n return;\n }\n\n var prop=_ this._getObjectProperty(attrId, valId);\n result.properties.push(prop);\n }\n });\n\n //Combine instance properties with any parent object properties\n if (parentProps) {\n var myProps={ };\n var rp=r esult.properties;\n for (let i=0 ; i < rp.length; i++) {\n myProps[rp[i].displayName]=1 ;\n }\n\n if (!result.name)\n result.name=p arentProps.name;\n\n var pp=p arentProps.properties;\n for (let i=0 ; i < pp.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(myProps, pp[i].displayName)) {\n rp.push(pp[i]);\n }\n }\n }\n\n if (categoryFilter && !result.properties.length)\n return null;\n\n if (propFilter && !result.properties.length && !addExternalId && !needName)\n return null;\n\n return result;\n };\n\n /**\n * Obtains a map between each database id (dbId) and their corresponding external-id.\n * The external-id is the identifier used by the source file. \n * Example: A translated Revit file has a wall with dbId=1, but in Revit (desktop application) the identifier of that wall is \ "Wall-06-some-guid-here\".\n *\n * @param {number[]} [extIdFilter] - Limits the result to only contain the ids in this array.\n *\n * @returns {object} map from dbId into external-id.\n */\n this.getExternalIdMapping=f unction (extIdFilter) {\n var mapping={ };\n if (_idsOffsets && 'length' in _idsOffsets) {// Check that it 's an indexable type\n for (var dbId = 1, len = _idsOffsets.length; dbId < len; ++dbId) {\n var externalId = this.getIdAt(dbId);\n if (!extIdFilter || extIdFilter[externalId] === true) {\n mapping[externalId] = dbId;\n }\n }\n }\n return mapping;\n };\n\n //Heuristically find the root node(s) of a scene\n //A root is a node that has children, has no (or null) parent and has a name.\n //There can be multiple nodes at the top level (e.g. Revit DWF), which is why\n //we should get the scene root with absolute certainty from the SVF instance tree,\n //but we would have to uncompress and parse that in -- something that is\n //not currently done. This is good enough for now (if pretty slow).\n this.findRootNodes = function () {\n\n var idroots = [];\n var idDetachedNodes = []; // These are nodes without a parent or child\n\n this.enumObjects(function (id) {\n var hasChild = false;\n var hasParent = false;\n var hasName = false;\n\n _this.enumObjectProperties(id, function (attrId, valId) {\n if (attrId == _parentAttrId) {\n if (_this.getAttrValue(attrId, valId, true)) //checks for null or zero parent id, in which case it's considered non-parent\n hasParent=t rue;\n } else if (attrId==_ childAttrId) {\n hasChild=t rue;\n } else\n if (attrId==_ nameAttrId) {\n hasName=t rue;\n }\n });\n\n if (hasName && !hasParent) {\n hasChild ? idroots.push(id) : idDetachedNodes.push(id);\n }\n });\n\n // Some dwfx files can have only detached nodes, in which case, we treat them as roots\n return idroots.length> 0 ? idroots : idDetachedNodes;\n };\n\n // Does the node have atleast one child?\n this.nodeHasChild = function (dbId) {\n let hasChild = false;\n\n this.enumObjectProperties(dbId, function (attrId) {\n if (attrId === _childAttrId) {\n hasChild = true;\n return true; // break from enumerating\n }\n });\n\n return hasChild;\n };\n\n\n //Gets the immediate children of a node with the given dbId\n this.getNodeNameAndChildren = function (node /* {dbId:X, name:\"\"} */, skipChildren) {\n\n var id = node.dbId;\n\n var children;\n var instanceOfValId;\n\n this.enumObjectProperties(id, function (attrId, valId) {\n var val;\n\n if (attrId === _parentAttrId) {\n\n //node.parent = this.getAttrValue(attrId, valId, true); //eventually we will needs this instead of setting parent pointer when creating children below.\n } else if (attrId == _childAttrId && !skipChildren) {val = _this.getAttrValue(attrId, valId, true);\n\n // avoid parent->child links to the same dbId\n if (val !== node.dbId) {\n var child = { dbId: val, parent: node.dbId };\n if (!children)\n children = [child];else\n\n children.push(child);\n }\n\n } else if (attrId === _nameAttrId) {\n node.name = _this.getAttrValue(attrId, valId); //name is necessary for GUI purposes, so add it to the node object explicitly\n } else if (attrId === _nodeFlagsAttrId) {\n node.flags = _this.getAttrValue(attrId, valId, true); //flags are necessary for GUI/selection purposes, so add them to the node object\n } else if (attrId === _instanceOfAttrId) {\n instanceOfValId = valId;\n }\n });\n\n //If this is an instance of another object,\n //try to get the object name/flags from there.\n //This is not done in the main loop above for performance reasons,\n //we only want to do the expensive thing of going up the object hierarchy\n //if the node does not actually have a name/flags attributes.\n if ((!node.name || !node.flags) && instanceOfValId) {\n const dbIdOfInstance = _this.getAttrValue(_instanceOfAttrId, instanceOfValId, true);\n\n // Check if the instance node already exists in cache.\n let tmp = _instanceNodeCache[dbIdOfInstance];\n\n if (!tmp) {\n // Fetch instance node and memoize it.\n _instanceNodeCache[dbIdOfInstance] = tmp = { dbId: dbIdOfInstance, name: null, flags: null };\n _this.getNodeNameAndChildren(tmp, true);\n }\n\n //Take the name from the prototype object if the instance doesn't have it\n if (tmp.name && !node.name)\n node.name = tmp.name;\n\n //Take the node flags from the prototype object if the instance doesn't have it\n if (typeof node.flags !== \"number\" && typeof tmp.flags === \"number\")\n node.flags = tmp.flags;\n }\n\n return children;\n };\n\n\n /**\n * @param fragToDbId\n * @private\n */\n function buildDbIdToFragMap(fragToDbId) {\n var ret = {};\n for (var i = 0, iEnd = fragToDbId.length; i < iEnd; i++) {\n\n var dbIds=f ragToDbId[i];\n\n //In 2D drawings, a single fragment (consolidation mesh)\n //can contain multiple objects with different dbIds.\n if (!Array.isArray(dbIds)) {\n dbIds=[ dbIds];\n }\n\n for (var j=0 ; j < dbIds.length; j++) {\n var dbId=d bIds[j];\n var frags=r et[dbId];\n if (frags===u ndefined) {\n //If it 's the first fragments for this dbid,\n //store the index directly -- most common case.\n ret[dbId] = i;\n } else\n if (!Array.isArray(frags)) {\n //otherwise put the fragments that\n //reference the dbid into an array\n ret[dbId] = [frags, i];\n } else\n {\n //already is an array\n frags.push(i);\n }\n }\n }\n\n return ret;\n }\n\n this.buildDbIdToFragMap = buildDbIdToFragMap;\n\n //Duplicated from InstanceTree.js\n var NODE_TYPE_ASSEMBLY = 0x0, // Real world object as assembly of sub-objects\n NODE_TYPE_GEOMETRY = 0x6; // Leaf geometry node\n\n //Builds a tree of nodes according to the parent/child hierarchy\n //stored in the property database, starting at the node with the given dbId\n this.buildObjectTree = function (rootId, //current node dbId\n fragToDbId, //array of fragId->dbId lookup\n maxDepth, /* returns max tree depth */\n nodeStorage)\n {\n\n //Build reverse lookup for dbId->fragId\n var dbToFragId;\n if (fragToDbId) {\n dbToFragId = buildDbIdToFragMap(fragToDbId);\n }\n\n _processedIds = {};\n _cyclesCount = 0;\n\n //Call recursive implementation\n var ret = this.buildObjectTreeRec(rootId, 0, dbToFragId, 0, maxDepth, nodeStorage);\n if (_cyclesCount > 0) {\n console.warn('Property database integrity not guaranteed ( ' + _cyclesCount + '). ');\n }\n\n _processedIds = null;\n\n // Clean cache\n _instanceNodeCache = {};\n\n return ret;\n };\n\n //Recursive helper for buildObjectTree\n this.buildObjectTreeRec = function (dbId, //current node dbId\n parent, //parent dbId\n dbToFrag, //map of dbId to fragmentIds\n depth, /* start at 0 */\n maxDepth, /* returns max tree depth */\n nodeStorage)\n {\n\n // Check for cycles in the tree.\n // There shouldn't be any cycles in the tree...\n if (_processedIds[dbId]) {\n _cyclesCount++;\n return 0;\n }\n\n _processedIds[dbId]=p arent || dbId;\n\n if (depth> maxDepth[0])\n maxDepth[0] = depth;\n\n var node = { dbId: dbId };\n var children = this.getNodeNameAndChildren(node);\n\n var childrenIds = [];\n\n if (children) {\n for (var j = 0; j < children.length; j++) {\n var childHasChildren=t his.buildObjectTreeRec(children[j].dbId, dbId, dbToFrag, depth + 1, maxDepth, nodeStorage);\n\n //For display purposes, prune children that are leafs without graphics\n //and add the rest to the node\n if (childHasChildren)\n childrenIds.push(children[j].dbId);\n }\n }\n\n var fragIds;\n\n //leaf node\n if (dbToFrag) {\n var frags=d bToFrag[dbId];\n if (frags !==u ndefined) {\n\n //if (childrenIds.length)\n // console.error(\ "Node that has both node children and fragment children!\", node.name, children, childrenIds, frags);\n\n if (!Array.isArray(frags))\n fragIds=[ frags];else\n\n fragIds=f rags;\n }\n }\n\n //Use default node flags in case none are set\n //This is not the best place to do this, but it 's\n //the last place where we can differentiate between \"not set\" and zero.\n var flags = node.flags || 0;\n if (flags === undefined) {\n if (fragIds && fragIds.length)\n flags = NODE_TYPE_GEOMETRY;else\n if (childrenIds.length)\n flags = NODE_TYPE_ASSEMBLY;else\n\n flags = 0; //??? Should not happen (those nodes are pruned above)\n }\n\n // Get child count (nodes + fragments)\n var childCount = childrenIds.length + (fragIds ? fragIds.length : 0);\n\n // Skip nodes that contain neither children nor any fragments\n if (childCount) {\n nodeStorage.setNode(dbId, parent, node.name, flags, childrenIds, fragIds);\n }\n\n return childCount;\n };\n\n /**\n * Given a text string, returns an array of individual words separated by\n * white spaces.\n * Will preserve white spacing within double quotes.\n *\n * @param {string} searchText - Text to search\n */\n this.getSearchTerms = function (searchText) {\n searchText = searchText.toLowerCase();\n //regex preserves double-quote delimited strings as phrases\n var searchTerms = searchText.match(/\"[^\"]+\"|[^\\s]+/g) || [];\n var i = searchTerms.length;\n while (i--) {\n searchTerms[i] = searchTerms[i].replace(/\"/g, \"\");\n }\n var searchList = [];\n for (i = 0; i < searchTerms.length; i++) {\n\n if (searchTerms[i].length > 1)\n searchList.push(searchTerms[i]);\n }\n return searchList;\n };\n\n /**\n * Searches the property database for a string.\n *\n * @param searchText\n * @param attributeNames\n * @param searchOptions\n * @returns Array of ids.\n * @private\n */\n this.bruteForceSearch = function (searchText, attributeNames, searchOptions) {\n\n const searchList = this.getSearchTerms(searchText);\n if (searchList.length === 0)\n return [];\n\n //For each search word, find matching IDs\n var results = [];\n\n const searchHidden = searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.searchHidden;\n const includeInherited = searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.includeInherited;\n // { x: [ a, b, c ]}, a,b,c are instances of x\n const inheritanceMap = {};\n\n for (let k = 0; k < searchList.length; k++) {\n var result = [];\n\n //Find all values that match the search text\n var matching_vals = [];\n for (var i = 0, iEnd = _valuesOffsets.length; i < iEnd; i++) {\n var val = this.getValueAt(i);\n if (val === null)\n continue;\n if (val.toString().toLowerCase().indexOf(searchList[k]) !== -1)\n matching_vals.push(i);\n }\n\n if (matching_vals.length === 0) {\n results.push(result);\n continue;\n }\n\n // values should be sorted at this point, but it doesn't hurt making sure they are.\n matching_vals.sort(function (a, b) {\n return a - b;\n });\n\n this.enumObjects(function (id) {\n\n _this.enumObjectProperties(id, function (attrId, valId) {\n\n if (includeInherited && attrId===_ instanceOfAttrId) {\n const pid=p arseInt(_this.getAttrValue(attrId, valId));\n inheritanceMap[pid]=i nheritanceMap[pid] || [];\n inheritanceMap[pid].push(id);\n }\n\n if (!searchHidden) {\n // skip hidden attributes\n var isHidden=_ this.attributeHidden(attrId);\n if (isHidden) {\n return;\n }\n }\n\n var iFound=( 0,_common_SearchUtils__WEBPACK_IMPORTED_MODULE_1__.binarySearch)(matching_vals, valId);\n if (iFound !==- 1) {\n //Check attribute name in case a restriction is passed in\n if (attributeNames && attributeNames.length && attributeNames.indexOf(_attrs[attrId][0])===- 1)\n return;\n\n result.push(id);\n return true;\n }\n });\n\n });\n\n results.push(result);\n }\n\n const addInheritedIds=( ids, inheritanceMap)=> {\n // traverse inheritance and add to ids list\n const seen = new Set(ids);\n for (let i = 0; i < ids.length; ++i) {\n const id=i ds[i];\n if (!(id in inheritanceMap)) continue;\n const cids=i nheritanceMap[id];\n for (let j=0 ; j < cids.length; ++j) {\n const cid=c ids[j];\n if (!seen.has(cid)) {\n ids.push(cid);\n seen.add(cid);\n }\n }\n }\n };\n\n if (results.length===1 ) {\n if (includeInherited) {\n addInheritedIds(results[0], inheritanceMap);\n }\n return results[0];\n }\n\n //If each search term resulted in hits, compute the intersection of the sets\n var map={ };\n var hits=r esults[0];\n for (let i=0 ; i < hits.length; i++)\n map[hits[i]]=1 ;\n\n\n for (let j=1 ; j < results.length; j++) {\n hits=r esults[j];\n var mapint={ };\n\n for (let i=0 ; i < hits.length; i++) {\n if (map[hits[i]]===1 )\n mapint[hits[i]]=1 ;\n }\n\n map=m apint;\n }\n\n result=[ ];\n for (let k in map) {\n result.push(parseInt(k));\n }\n\n if (includeInherited) {\n addInheritedIds(result, inheritanceMap);\n }\n\n return result;\n };\n\n\n /**\n * Given a property name, it returns an array of ids that contain it.\n *\n * @param {string} propertyName - Property name\n */\n this.bruteForceFind=f unction (propertyName) {\n\n var results=[ ];\n this.enumObjects(function (id) {\n\n var idContainsProperty=f alse;\n _this.enumObjectProperties(id, function (attrId) {\n\n var attr=_ attrs[attrId];\n var propName=a ttr[0];\n var displayName=a ttr[5];\n\n if (propName===p ropertyName || displayName===p ropertyName) {\n idContainsProperty=t rue;\n return true;\n }\n });\n\n if (idContainsProperty) {\n results.push(id);\n }\n\n });\n\n return results;\n };\n\n /**\n * Specialized function that returns:\n * {\n * 'layer-name-1': [id1, id2, ..., idN],\n * 'layer-name-2': [idX, idY, ..., idZ],\n * ...\n * }\n */\n this.getLayerToNodeIdMapping=f unction () {\n\n var results={ };\n this.enumObjects(function (id) {\n\n _this.enumObjectProperties(id, function (attrId, valId) {\n\n if (attrId !=_ layersAttrId)\n return;\n\n var val=_ this.getAttrValue(attrId, valId);\n if (!Array.isArray(results[val])) {\n results[val]=[ ];\n }\n results[val].push(id);\n return true;\n });\n\n });\n\n return results;\n };\n\n /**\n * Unpacks an attribute value into all available components.\n *\n * @param {number} attrId - The attribute id.\n *\n * @returns {object} containing `name`, `category`, `dataType`, `dataTypeContext`, `description`, `displayName` and `flags`.\n */\n this.getAttributeDef=f unction (attrId) {\n var _raw=_ attrs[attrId];\n return {\n //attrName(0), category(1), dataType(2), dataTypeContext(3), description(4), displayName(5), flags(6), precision(7)\n name: _raw[0],\n category: _raw[1],\n dataType: _raw[2],\n dataTypeContext: _raw[3],\n description: _raw[4],\n displayName: _raw[5],\n flags: _raw[6],\n precision: _raw.length> 7 ? _raw[7] : 0\n };\n };\n\n /**\n * Invokes a callback function for each attribute-id in the model.\n *\n * @example\n * pdb.enumAttributes(function(attrId, attrDef) {\n * // attrDef is an object\n * if (attrDef.name === 'name') {\n * return true; // return true to stop iteration.\n * }\n * })\n * \n * @param {Function} cb - Callback invoked\n */\n this.enumAttributes = function (cb) {\n for (var i = 1; i < _attrs.length; i++) {\n if (cb(i, this.getAttributeDef(i), _attrs[i]))\n break;\n }\n };\n\n\n //See API doc for this.enumObjectProperties below\n /**\n * @param dbId\n * @param cb\n * @private\n */\n function enumObjectPropertiesV1(dbId, cb) {\n //Start offset of this object 's properties in the Attribute-Values table\n let propStart = 2 * _offsets[dbId];\n\n //End offset of this object's properties in the Attribute-Values table\n let propEnd=2 * _offsets[dbId + 1];\n\n //Loop over the attribute index - value index pairs for the objects\n //and for each one look up the attribute and the value in their\n //respective arrays.\n for (let i=p ropStart; i < propEnd; i +=2 ) {\n let attrId=_ avs[i];\n let valId=_ avs[i + 1];\n\n if (cb(attrId, valId))\n break;\n }\n }\n\n //See API doc for this.enumObjectProperties below\n /**\n * @param dbId\n * @param cb\n * @private\n */\n function enumObjectPropertiesV2(dbId, cb) {\n //v2 variable length encoding. Offsets point into delta+varint encoded a-v pairs per object\n let offset=_ offsets[dbId];\n let propEnd=_ offsets[dbId + 1];\n let buf=_ avs;\n\n let a=0 ;\n while (offset < propEnd) {\n\n //Inlined version of readVarint\n let b=b uf[offset++];\n let value=b & 0x7f;\n let shiftBy=7 ;\n while (b & 0x80) {\n b=b uf[offset++];\n value |=( b & 0x7f) << shiftBy;\n shiftBy +=7 ;\n }\n\n //attribute ID is delta encoded from the previously seen attribute ID, add that back in\n a +=v alue;\n\n //Inlined version of readVarint\n b=b uf[offset++];\n value=b & 0x7f;\n shiftBy=7 ;\n while (b & 0x80) {\n b=b uf[offset++];\n value |=( b & 0x7f) << shiftBy;\n shiftBy +=7 ;\n }\n\n if (cb(a, value))\n break;\n }\n }\n\n /**\n * Iterates over all properties for a given database id and invokes the supplied callback function.\n *\n * @param {number} dbId - The attribute id.\n * @param {Function} cb - callback function, that receives 2 arguments: attribute-id (`attrId`) and value-id (`valId`). Have the function return `true` to abort iteration.\n *\n */\n this.enumObjectProperties=_ isVarint ? enumObjectPropertiesV2 : enumObjectPropertiesV1;\n\n\n let _instanceOfCache={ };\n\n //See API documentation in this.getPropertiesSubsetWithInheritance below\n /**\n * @param dbId\n * @param desiredAttrIds\n * @param dstValIds\n * @private\n */\n function getPropertiesSubsetWithInheritanceV1(dbId, desiredAttrIds, dstValIds) {\n\n //Start offset of this object 's properties in the Attribute-Values table\n let propStart = 2 * _offsets[dbId];\n\n //End offset of this object's properties in the Attribute-Values table\n let propEnd=2 * _offsets[dbId + 1];\n\n let res=[ ];\n let instanceOfVals=[ ];\n dstValIds=d stValIds || {};\n\n //Loop over the attribute index - value index pairs for the objects\n //and for each one look up the attribute and the value in their\n //respective arrays.\n for (let i=p ropStart; i < propEnd; i +=2 ) {\n let a=_ avs[i];\n let value=_ avs[i + 1];\n\n if (a===_ instanceOfAttrId) {\n //remember instanceof inheritance for later\n let iofDbId=_ this.getAttrValue(a, value);\n instanceOfVals.push(iofDbId);\n } else {\n if (!desiredAttrIds || desiredAttrIds[a]) {\n dstValIds[a]=v alue;\n res.push(a);\n res.push(value);\n }\n }\n }\n\n //Really, we only expect one instanceof inheritance, but\n //it 's theoretically possible to have several\n for (let i = 0; i < instanceOfVals.length; i++) {\n\n let iofDbId = instanceOfVals[i];\n\n let cached = _instanceOfCache[iofDbId];\n if (!cached) {\n _instanceOfCache[iofDbId] = cached = getPropertiesSubsetWithInheritanceV2(iofDbId);\n }\n\n for (let j = 0; j < cached.length; j += 2) {\n let a = cached[j];\n let v = cached[j + 1];\n\n if (desiredAttrIds && !desiredAttrIds[a]) {\n continue;\n }\n\n if (!dstValIds[a] && !_this.attributeHidden(a)) {\n dstValIds[a] = v;\n res.push(a);\n res.push(v);\n }\n }\n }\n\n return res;\n }\n\n //See API documentation in this.getPropertiesSubsetWithInheritance below\n /**\n * @param dbId\n * @param desiredAttrIds\n * @param dstValIds\n * @private\n */\n function getPropertiesSubsetWithInheritanceV2(dbId, desiredAttrIds, dstValIds) {\n\n //v2 variable length encoding. Offsets point into delta+varint encoded a-v pairs per object\n let offset = _offsets[dbId];\n let propEnd = _offsets[dbId + 1];\n let buf = _avs;\n\n let res = [];\n let instanceOfVals = [];\n dstValIds = dstValIds || {};\n\n let a = 0;\n while (offset < propEnd) {\n\n let b = buf[offset++];\n let value = b & 0x7f;\n let shiftBy = 7;\n while (b & 0x80) {\n b = buf[offset++];\n value |= (b & 0x7f) << shiftBy;\n shiftBy += 7;\n }\n\n //attribute ID is delta encoded from the previously seen attribute ID, add that back in\n a += value;\n\n b = buf[offset++];\n value = b & 0x7f;\n shiftBy = 7;\n while (b & 0x80) {\n b = buf[offset++];\n value |= (b & 0x7f) << shiftBy;\n shiftBy += 7;\n }\n\n if (a === _instanceOfAttrId) {\n //remember instanceof inheritance for later\n let iofDbId = _this.getAttrValue(a, value);\n instanceOfVals.push(iofDbId);\n } else {\n if (!desiredAttrIds || desiredAttrIds[a]) {\n dstValIds[a] = value;\n res.push(a);\n res.push(value);\n }\n }\n }\n\n //Really, we only expect one instanceof inheritance, but\n //it's theoretically possible to have several\n for (let i=0 ; i < instanceOfVals.length; i++) {\n\n let iofDbId=i nstanceOfVals[i];\n\n let cached=_ instanceOfCache[iofDbId];\n if (!cached) {\n _instanceOfCache[iofDbId]=c ached=g etPropertiesSubsetWithInheritanceV2(iofDbId);\n }\n\n for (let j=0 ; j < cached.length; j +=2 ) {\n let a=c ached[j];\n let v=c ached[j + 1];\n\n if (desiredAttrIds && !desiredAttrIds[a]) {\n continue;\n }\n\n if (!dstValIds[a] && !_this.attributeHidden(a)) {\n dstValIds[a]=v ;\n res.push(a);\n res.push(v);\n }\n }\n }\n\n return res;\n }\n\n /**\n * Given an object ID, returns the corresponding value IDs for the given list of attribute Ids.\n * Takes into account instance_of inheritance of properties.\n *\n * @param {number} dbId - Integer input object ID\n * @param {object} desiredAttrIds - An optional map of the requested attribute Ids, where desiredAttrIds[attrId] is \ "truthy\".\n * If not provided, all properties will be returned.\n * @param {object} dstValIds - A storage target map, such that dstValIds[attrId] will be the resulting value ID.\n * It is the responsibility of the caller to zero initialize this map.\n *\n * @returns {number[]} - A flat list of integers attributeId - valueId pairs. This is in addition to the dstValIds, for cases\n * where the object has mutliple properties of the same type, e.g. children, __viewable_in__, etc.\n */\n this.getPropertiesSubsetWithInheritance=_ isVarint ? getPropertiesSubsetWithInheritanceV2 : getPropertiesSubsetWithInheritanceV1;\n\n /**\n * Iterates over the property database and finds all layers.\n *\n * @returns {object}\n */\n this.findLayers=f unction () {\n\n // Same format as F2d.js::createLayerGroups()\n var ret={ name: 'root', id: 1, index: 1, children: [], isLayer: false, childCount: 0 };\n\n // Return early when no Layer attribute is present\n if (_layersAttrId===u ndefined) {\n return ret;\n }\n\n // Grab all Layer names\n var layers=[ ];\n var scope=t his;\n this.enumObjects(function (dbId) {\n scope.enumObjectProperties(dbId, function (attrId, valId) {\n if (attrId===_ layersAttrId) {\n var layerName=s cope.getValueAt(valId);\n if (layerName && layers.indexOf(layerName)===- 1) {\n layers.push(layerName);\n }\n // We found what we wanted=> skip remaining attribs for this object\n return true;\n }\n });\n });\n\n layers.sort(function (a, b) {\n return a.localeCompare(b, undefined, { sensitivity: 'base', numeric: true });\n });\n\n // Format output to match F2d.js::createLayerGroups()\n ret.childCount = layers.length;\n ret.children = layers.map(function (layerName, index) {\n return {\n name: layerName,\n index: index + 1,\n id: index + 1,\n isLayer: true\n };\n });\n\n return ret;\n };\n\n /**\n * Iterates over all database ids and invokes a callback function.\n *\n * @param {Function} cb - callback function. Receives a single parameter: the database-id. Have the function return true to abort iteration.\n * @param {number} fromId - starting id (inclusive)\n * @param {number} toId - end id (exclusive)\n *\n */\n this.enumObjects = function (cb, fromId, toId) {\n\n // For a given id, the range in _avs is specified by [offsets[id], _offsets[id+1]].\n // The last element in _offsets is just the range end of the final range.\n var idCount = _offsets.length - 1; //== this.getObjectCount()\n\n if (typeof fromId === \"number\") {\n fromId = Math.max(fromId, 1);\n } else {\n fromId = 1;\n }\n\n if (typeof toId === \"number\") {\n toId = Math.min(idCount, toId);\n } else {\n toId = idCount;\n }\n\n for (var id = fromId; id < toId; id++) {\n if (cb(id))\n break;\n }\n };\n\n this.getAttrChild=f unction () {\n return _childAttrId;\n };\n\n this.getAttrParent=f unction () {\n return _parentAttrId;\n };\n\n this.getAttrName=f unction () {\n return _nameAttrId;\n };\n\n this.getAttrLayers=f unction () {\n return _layersAttrId;\n };\n\n this.getAttrInstanceOf=f unction () {\n return _instanceOfAttrId;\n };\n\n this.getAttrViewableIn=f unction () {\n return _viewableInAttrId;\n };\n\n this.getAttrXref=f unction () {\n return _externalRefAttrId;\n };\n\n this.getAttrNodeFlags=f unction () {\n return _nodeFlagsAttrId;\n };\n\n /**\n * Checks whether an attribute is hidden or not.\n *\n * @param {number} attrId - The attribute id.\n *\n * @returns {boolean} - true if the attribute is a hidden one.\n */\n this.attributeHidden=f unction (attrId) {\n var _raw=_ attrs[attrId];\n var flags=_ raw[6];\n\n return flags & 1 /*afHidden*/ ||\n attrId==_ parentAttrId ||\n attrId==_ childAttrId ||\n attrId==_ viewableInAttrId ||\n attrId==_ externalRefAttrId;\n };\n\n this._attributeIsBlacklisted=f unction (attrId) {\n var _raw=_ attrs[attrId];\n var name=_ raw[0];\n var category=_ raw[1];\n\n // IFC/NWD files contains a “Source File” property which is typically\n // different between the two versions and cause DiffTool to return noisy diff.\n // Ignore it for diff calculation. \n if (Object.prototype.hasOwnProperty.call(_PropdbEnums__WEBPACK_IMPORTED_MODULE_2__.IFC_NWD_ITEM_PROPS_BLACKLISTED, category) && _PropdbEnums__WEBPACK_IMPORTED_MODULE_2__.IFC_NWD_ITEM_PROPS_BLACKLISTED[category].indexOf(name) !==- 1)\n return true;\n\n //Dimension properties were added at a later time, so\n //some diffs will fail when comparing a file with vs. file without those.\n //Anyway, it 's beter to skip those for diff purposes, since they can have numeric\n //noise and result in spurious diffs.\n //See also: https://git.autodesk.com/fluent/modeldb/commit/584d39d5f85a8d2954da557859bb52c224c402af\n if (Object.prototype.hasOwnProperty.call(_PropdbEnums__WEBPACK_IMPORTED_MODULE_2__.RVT_DIM_PROPS_BLACKLISTED, category) && _PropdbEnums__WEBPACK_IMPORTED_MODULE_2__.RVT_DIM_PROPS_BLACKLISTED[category].indexOf(name) !== -1)\n return true;\n\n return false;\n };\n\n /**\n * Checks whether an attribute must be excluded from Diff comparison.\n * @param {Object} propertyFilter - A key-value pair of category and property names to ignore from Diff\n * @param {number} attrId - The attribute id.\n */\n this._ignoreAttribute = function (propertyFilter, attrId) {\n var _raw = _attrs[attrId];\n var name = _raw[0];\n var category = _raw[1];\n\n return propertyFilter[category] && propertyFilter[category].has(name);\n };\n\n // Returns parent id of dbId or null if there is none. \n this.findParent = function (dbId) {\n\n let parent = null;\n _this.enumObjectProperties(dbId, function (attrId, valId) {\n if (attrId === _parentAttrId) {\n parent = _this.getAttrValue(attrId, valId, true);\n }\n });\n return parent;\n };\n\n // Helper function for _findDifferences.\n // Finds all attributeIds and valueIds - including inherited ones.\n // Results are pushed to 'result ' array as objects { attrId, valId }.\n // Hidden attributes are excluded.\n this._getAttributeAndValueIds = function (dbId, result, propertyFilter) {\n\n let avList = this.getPropertiesSubsetWithInheritance(dbId);\n let ignorePropertyFlag = propertyFilter && Object.keys(propertyFilter).length >= 1;\n\n //Convert result to array and sort by attrId so diff can work.\n for (let i = 0; i < avList.length; i += 2) {\n let a = avList[i];\n\n if (this._attributeIsBlacklisted(a) || this.attributeHidden(a))\n continue;\n\n // Exclude user-specified properties from diff\n if (ignorePropertyFlag && this._ignoreAttribute(propertyFilter, a))\n continue;\n\n result.push({\n attrId: a,\n valId: avList[i + 1]\n });\n }\n\n result.sort(function byIncAtribId(a, b) {\n return a.attrId - b.attrId;\n });\n };\n\n /* Finds all common dbIds of this and another db for which the properties are not identical.\n * Hidden attributes are excluded.\n * @param {PropertyDatabase} dbToCompare\n * @param {Object} [DiffOptions] diffOptions \n * @param {function(number)} [onProgress] gets progress values in percent\n * @returns {Object} \n * See PropDbLoader.diffProperties for details about diffOptions and return value.\n *\n * NOTE: Current implementation only supports Otg models.\n *\n * @private\n */\n this.findDifferences = function (dbToCompare, diffOptions, onProgress) {\n\n var result = {\n changedIds: []\n };\n\n // Optional: Restrict search to the given ids\n var dbIds = diffOptions && diffOptions.dbIds;\n\n // Optional: Collect details about which props have changed\n var listPropChanges = diffOptions && diffOptions.listPropChanges;\n if (listPropChanges) {\n result.propChanges = [];\n }\n\n //Optional : Collect user-specified properties to ignore for diff\n let propertyFilter = diffOptions && diffOptions.propertyFilter || {};\n\n var db1 = this;\n var db2 = dbToCompare;\n\n // Reused array of { attrId, valId } pairs.\n var propIds1 = [];\n var propIds2 = [];\n\n // To support instanceOf attributes, we need to recursively check parent attributes/values too. (see getAttributesAndValues)\n // Since the parent of subsequent dbId is often the same, we cache the parent attribs/values that we got from last call.\n // This avoids to do the same check several times and can make diff significantly faster.\n var cachedParentAttribs1 = { result: [], dbId: -1 };\n var cachedParentAttribs2 = { result: [], dbId: -1 };\n\n var diffObject = function (dbId) {\n\n // get sorted array of {attrIds, valIds} pairs for both objects\n var i1 = 0;\n var i2 = 0;\n propIds1.length = 0;\n propIds2.length = 0;\n\n db1._getAttributeAndValueIds(dbId, propIds1, propertyFilter, true, cachedParentAttribs1);\n db2._getAttributeAndValueIds(dbId, propIds2, propertyFilter, true, cachedParentAttribs2);\n\n if (!propIds1.length || !propIds2.length) {\n // If an array is empty, this dbId does only exist\n // in one of the two dbs, i.e, the whole object was added or removed.\n // We are only interested in prop changes of matching objects.\n return;\n }\n\n var changeFound = false;\n\n // array of prop changes for current dbId\n var propChanges = undefined;\n\n while (i1 < propIds1.length && i2 < propIds2.length) {\n\n // Note that some values may be undefined if one of the arrays ended.\n var elem1 = propIds1[i1];\n var elem2 = propIds2[i2];\n var a1 = elem1 && elem1.attrId;\n var v1 = elem1 && elem1.valId;\n var a2 = elem2 && elem2.attrId;\n var v2 = elem2 && elem2.valId;\n\n // If everything is equal, we are done with this attribute\n if (a1 === a2 && v1 === v2) {\n i1++;\n i2++;\n continue;\n }\n\n // If we get here, the current attribute has changed\n changeFound = true;\n\n // If no details are requested, we are done with this dbId\n if (!listPropChanges) {\n break;\n }\n\n // We exploit here that attributeIds in OTG are always sorted in ascending order\n // Therefore, if a1 > a2, we can safely assume that a1 does not exist in iterator2,\n // but possibly vice versa.\n var prop1Missing = a1 === undefined || a1 > a2;\n var prop2Missing = a2 === undefined || a2 > a1;\n\n var change = undefined;\n\n // Handle case that property has been added or removed\n if (prop1Missing) {\n\n // property was added in db2\n change = db2._getObjectProperty(a2, v2);\n change.displayValueB = change.displayValue;\n change.displayValue = undefined;\n\n // a2 has been detected as added. Skip it and continue.\n i2++;\n } else if (prop2Missing) {\n\n // property was removed in db2\n change = db1._getObjectProperty(a1, v1);\n change.displayValueB = undefined;\n\n // a1 has been detected as removed. Skip it and continue.\n i1++;\n } else {\n // attrib exists in both, but value has changed\n change = db1._getObjectProperty(a1, v1);\n change.displayValueB = _this.getAttrValue(a2, v2);\n\n i1++;\n i2++;\n }\n\n // If this is the first prop that change, alloc array for it\n if (!propChanges) {\n propChanges = [];\n }\n\n propChanges.push(change);\n }\n\n // Collect dbId of modified object\n if (changeFound) {\n result.changedIds.push(dbId);\n\n // collect correspondign prop change details\n if (listPropChanges) {\n result.propChanges.push(propChanges);\n }\n }\n };\n\n // Track progress\n var lastPercent = -1;\n var trackProgress = function (idsDone, idsTotal) {\n // Limit calls to 100 - otherwise it would slow-down everything.\n var percent = Math.floor(100 * idsDone / idsTotal);\n if (percent != lastPercent) {\n onProgress && onProgress(percent);\n lastPercent = percent;\n }\n };\n\n if (dbIds) {\n // diff selected set of Ids\n for (var i = 0; i < dbIds.length; i++) {\n let dbId = dbIds[i];\n diffObject(dbId);\n trackProgress(i, dbIds.length);\n }\n } else {\n // diff all objects\n // Note: We are only searching for common objects that changed. Therefore, the loop\n // runs only over dbIds that are within the valid range for both.\n var dbIdEnd = Math.min(db1.getObjectCount(), this.getObjectCount());\n for (let dbId = 1; dbId < dbIdEnd; dbId++) {\n diffObject(dbId);\n trackProgress(dbId, dbIdEnd);\n }\n }\n\n return result;\n };\n\n /**\n * Returns count of the number of attributes\n * @returns {number}\n */\n this.numberOfAttributes = function () {var _attrs2;\n return ((_attrs2 = _attrs) === null || _attrs2 === void 0 ? void 0 : _attrs2.length) ?? 0;\n };\n\n /**\n * Returns count of the number of values\n * @returns {number}\n */\n this.numberOfValues = function () {var _valuesOffsets2;\n return ((_valuesOffsets2 = _valuesOffsets) === null || _valuesOffsets2 === void 0 ? void 0 : _valuesOffsets2.length) ?? 0;\n };\n\n this.dtor = function () {\n _attrs = null;\n _offsets = null;\n _avs = null;\n _valuesBlob = null;\n _valuesOffsets = null;\n _idsBlob = null;\n _idsOffsets = null;\n\n _childAttrId = 0;\n _parentAttrId = 0;\n _nameAttrId = 0;\n _instanceOfAttrId = 0;\n _viewableInAttrId = 0;\n _externalRefAttrId = 0;\n _nodeFlagsAttrId = 0;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9Qcm9wZGIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDcUg7QUFDaEU7O0FBRW9FOztBQUV6SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNVLGdCQUFnQkEsQ0FBQ0MsT0FBTyxFQUFFOztFQUV0QyxZQUFZOztFQUVaLElBQUlDLEtBQUssR0FBRyxJQUFJOztFQUVoQixJQUFJQyxLQUFLLEdBQUcsS0FBSztFQUNqQixJQUFJQyxTQUFTLEdBQUcsS0FBSzs7RUFFckI7RUFDQTtFQUNBO0VBQ0EsSUFBSUMsTUFBTSxDQUFDLENBQUM7RUFDQTtFQUNaLElBQUlDLFFBQVE7RUFDWixJQUFJQyxJQUFJO0VBQ1IsSUFBSUMsV0FBVztFQUNmLElBQUlDLGNBQWM7RUFDbEIsSUFBSUMsUUFBUTtFQUNaLElBQUlDLFdBQVc7O0VBRWY7RUFDQSxJQUFJQyxZQUFZO0VBQ2hCLElBQUlDLGFBQWE7RUFDakIsSUFBSUMsV0FBVztFQUNmLElBQUlDLGlCQUFpQjtFQUNyQixJQUFJQyxpQkFBaUI7RUFDckIsSUFBSUMsa0JBQWtCO0VBQ3RCLElBQUlDLGdCQUFnQjtFQUNwQixJQUFJQyxhQUFhOztFQUVqQjtFQUNBLElBQUlDLGFBQWE7RUFDakIsSUFBSUMsWUFBWTs7RUFFaEI7RUFDQSxJQUFJQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7O0VBRTNCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztFQUdBOztFQUVBO0VBQ0E7RUFDQSxLQUFLLElBQUlDLENBQUMsSUFBSXRCLE9BQU8sQ0FBQ3VCLEtBQUssRUFBRTtJQUN6Qm5CLE1BQU0sR0FBR2YsK0RBQVUsQ0FBQ1csT0FBTyxDQUFDdUIsS0FBSyxDQUFDRCxDQUFDLENBQUMsQ0FB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QVcsR0FBRyxDQUFDO0lBQ2ZDLGlCQUFpQixHQUFHLENBQUM7SUFDckJDLGlCQUFpQixHQUFHLENBQUM7SUFDckJDLGtCQUFrQixHQUFHLENBQUM7SUFDdEJDLGdCQUFnQixHQUFHLENBQUM7RUFDeEIsQ0FBQztBQUNMIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9jb21tb24vUHJvcGRiLmpzP2Q5MDYiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBibG9iVG9Kc29uLCBwYXJzZUludEFycmF5LCBmaW5kVmFsdWVPZmZzZXRzLCBzdWJCbG9iVG9Kc29uLCBzdWJCbG9iVG9Kc29uSW50IH0gZnJvbSAnLi4vY29tbW9uL1N0cmluZ1V0aWxzJztcbmltcG9ydCB7IGJpbmFyeVNlYXJjaCB9IGZyb20gJy4uL2NvbW1vbi9TZWFyY2hVdGlscyc7XG5cbmltcG9ydCB7IEF0dHJpYnV0ZVR5cGUsIEF0dHJpYnV0ZUZsYWdzLCBSVlRfRElNX1BST1BTX0JMQUNLTElTVEVELCBJRkNfTldEX0lURU1fUFJPUFNfQkxBQ0tMSVNURUQgfSBmcm9tICcuL1Byb3BkYkVudW1zJztcblxuLy9JbmxpbmVkIGludG8gZW51bU9iamVjdFByb3BlcnRpZXMgYmVsb3dcbi8qXG5mdW5jdGlvbiByZWFkVmFyaW50KGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIGI7XG4gICAgdmFyIHZhbHVlID0gMDtcbiAgICB2YXIgc2hpZnRCeSA9IDA7XG4gICAgZG8ge1xuICAgICAgICBiID0gYnVmW29mZnNldFswXSsrXTtcbiAgICAgICAgdmFsdWUgfD0gKGIgJiAweDdmKSA8PCBzaGlmdEJ5O1xuICAgICAgICBzaGlmdEJ5ICs9IDc7XG4gICAgfSB3aGlsZSAoYiAmIDB4ODApO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbiovXG5cbi8qKlxuICogVGhlIFByb3BlcnR5IERhdGFiYXNlIGNvbnRhaW5zIHByb3BlcnR5IGluZm9ybWF0aW9uIGZvciBlYWNoIHBhcnQgb2YgYSBtb2RlbC5cbiAqIFRoZSBkYXRhIGlzIHJlYWQtb25seSwgc2luY2UgaXQgaGFzIGJlZW4gcGFja2VkIHRvIG9wdGltaXplIG1lbW9yeSBmb290cHJpbnQuXG4gKiBJdCdzIGltcGxlbWVudGVkIGFzIGFuIEVudGl0eS1BdHJpYnV0ZS1WYWx1ZSAoRUFWKSBzZXQgb2YgdGFibGVzLlxuICogTE1WIGtlZXBzIHRoZSBQcm9wZXJ0eURhdGFiYXNlIGluIGEgYnJvd3NlciB3b3JrZXIgdGhyZWFkIHRvIHByZXZlbnQgY29tcHV0ZS1pbnRlbnNpdmVcbiAqIG1ldGhvZHMgdG8gYmxvY2sgdGhlIG1haW4gYnJvd3NlciBVSSB0aHJlYWQuXG4gKiBXb3JkcyBcIkF0dHJpYnV0ZVwiIGFuZCBcIlByb3BlcnR5XCIgYXJlIHVzZSBpbnRlcmNoYW5nZWFibHkuXG4gKlxuICogQHBhcmFtIGRianNvbnNcbiAqIEBjbGFzc1xuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBQcm9wZXJ0eURhdGFiYXNlKGRianNvbnMpIHtcblxuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBfaXNWMiA9IGZhbHNlO1xuICAgIHZhciBfaXNWYXJpbnQgPSBmYWxzZTtcblxuICAgIC8vVGhlIHByb3BlcnR5IGRiIGpzb24gYXJyYXlzLlxuICAgIC8vU29tZSBvZiB0aGVtIGFyZSBoZWxkIHVucGFyc2VkIGluIGJsb2IgZm9ybVxuICAgIC8vd2l0aCBoZWxwZXIgYXJyYXlzIGNvbnRhaW5pbmcgb2Zmc2V0cyBpbnRvIHRoZSBibG9icyBmb3IgZWFjaCB2YWx1ZSB0byBiZSBwYXJzZWQgb24gZGVtYW5kXG4gICAgdmFyIF9hdHRyczsgLy8gQXJyYXkgb2YgYXJyYXlzLiBJbm5lciBhcnJheSBpcyBpbiB0aGUgZm9ybSBbYXR0ck5hbWUoMCksIGNhdGVnb3J5KDEpLCBkYXRhVHlwZSgyKSwgZGF0YVR5cGVDb250ZXh0KDMpLCBkZXNjcmlwdGlvbig0KSwgZGlzcGxheU5hbWUoNSksIGZsYWdzKDYpLCBwcmVjaXNpb24oNykgXSBcbiAgICAgICAgICAgICAgICAvLyBTZWUgc3RydWN0IEF0dHJpYnV0ZURlZiBpbiBodHRwczovL2dpdC5hdXRvZGVzay5jb20vQTM2MC9wbGF0Zm9ybS10cmFuc2xhdGlvbi1wcm9wZXJ0eWRiL2Jsb2IvbWFzdGVyL3Byb3BlcnR5ZGIvUHJvcGVydHlEYXRhYmFzZS5oIFxuICAgIHZhciBfb2Zmc2V0cztcbiAgICB2YXIgX2F2cztcbiAgICB2YXIgX3ZhbHVlc0Jsb2I7XG4gICAgdmFyIF92YWx1ZXNPZmZzZXRzO1xuICAgIHZhciBfaWRzQmxvYjtcbiAgICB2YXIgX2lkc09mZnNldHM7XG5cbiAgICAvL0NhY2hlZCBpZHMgb2YgY29tbW9ubHkgdXNlZCB3ZWxsIGtub3duIGF0dHJpYnV0ZXMgKGNoaWxkLCBwYXJlbnQsIG5hbWUpXG4gICAgdmFyIF9jaGlsZEF0dHJJZDtcbiAgICB2YXIgX3BhcmVudEF0dHJJZDtcbiAgICB2YXIgX25hbWVBdHRySWQ7XG4gICAgdmFyIF9pbnN0YW5jZU9mQXR0cklkO1xuICAgIHZhciBfdmlld2FibGVJbkF0dHJJZDtcbiAgICB2YXIgX2V4dGVybmFsUmVmQXR0cklkO1xuICAgIHZhciBfbm9kZUZsYWdzQXR0cklkO1xuICAgIHZhciBfbGF5ZXJzQXR0cklkO1xuXG4gICAgLy9UcmFuc2llbnQgc3RydWN0dXJlcyBmb3IgZGV0ZWN0aW5nIGludmFsaWQgY3ljbGVzIGluIGJ1aWxkT2JqZWN0VHJlZSgpXG4gICAgdmFyIF9wcm9jZXNzZWRJZHM7XG4gICAgdmFyIF9jeWNsZXNDb3VudDtcblxuICAgIC8vIFVzZWQgZm9yIG1lbW9pemluZyByZWN1cnNpdmUgY2FsbHMgdG8gZ2V0Tm9kZU5hbWVBbmRDaGlsZHJlblxuICAgIGxldCBfaW5zdGFuY2VOb2RlQ2FjaGUgPSB7fTtcblxuICAgIC8vZGJqc29ucyBpcyBleHBlY3RlZCB0byBiZSBvZiB0aGUgZm9ybVxuICAgIC8veyBhdHRyczoge2ZpbGVuYW1lMTp4LCBmaWxlbmFtZTI6eX0sIGlkczoge2ZpbGVuYW1lMTp4Li4uIH0sIHZhbHVlczogey4uLiB9LCBvZmZzZXRzOiB7Li4uIH0sIGF2czogey4uLiB9IH1cbiAgICAvL3doZXJlIGVhY2ggb2YgdGhlIGVsZW1lbnRzIG9mIGVhY2ggYXJyYXkgaXMgYSBwYWlyIG9mIHRoZSBvcmlnaW5hbCBuYW1lIGFuZCB0aGUgdW56aXBwZWQgKnJhdyogYnl0ZVxuICAgIC8vYXJyYXkgYnVmZmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc3BlY3RpdmUgcHJvcGVydHkgZGF0YWJhc2UgY29uc3RpdHVlbnQuIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uXG4gICAgLy9lYWNoIGFycmF5IGlzIGV4cGVjdGVkIHRvIG9ubHkgaGF2ZSBvbmUgbmFtZS12YWx1ZSBlbGVtZW50LlxuXG5cbiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8vVGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9ucyBibG9iIGlzIGNvbnNpZGVyZWQgc21hbGwgZW5vdWdoXG4gICAgLy90byBwYXJzZSB1c2luZyByZWd1bGFyIEFQSXNcbiAgICBmb3IgKHZhciBwIGluIGRianNvbnMuYXR0cnMpIHtcbiAgICAgICAgX2F0dHJzID0gYmxvYlRvSnNvbihkYmpzb25zLmF0dHJzW3BdKTtcblxuICAgICAgICBpZiAoX2F0dHJzWzBdID09PSBcInBkYiB2ZXJzaW9uIDJcIilcbiAgICAgICAgICAgIF9pc1YyID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaTxfYXR0cnMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICAgICAgdmFyIGF0dHJOYW1lID0gX2F0dHJzW2ldWzBdO1xuICAgICAgICAgICAgc3dpdGNoIChhdHRyTmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJMYXllclwiOiBfbGF5ZXJzQXR0cklkID0gaTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjYXRlZ29yeSA9IF9hdHRyc1tpXVsxXTtcblxuICAgICAgICAgICAgc3dpdGNoIChjYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJfX3BhcmVudF9fXCI6ICAgICAgX3BhcmVudEF0dHJJZCA9IGk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJfX2NoaWxkX19cIjogICAgICAgX2NoaWxkQXR0cklkID0gaTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIl9fbmFtZV9fXCI6ICAgICAgICBfbmFtZUF0dHJJZCA9IGk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJfX2luc3RhbmNlb2ZfX1wiOiAgX2luc3RhbmNlT2ZBdHRySWQgPSBpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiX192aWV3YWJsZV9pbl9fXCI6IF92aWV3YWJsZUluQXR0cklkID0gaTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIl9fZXh0ZXJuYWxyZWZfX1wiOiBfZXh0ZXJuYWxSZWZBdHRySWQgPSBpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiX19ub2RlX2ZsYWdzX19cIjogX25vZGVGbGFnc0F0dHJJZCA9IGk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL0FzIG9mIFYyLCBEYktleSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgaW50byB0aGUgQVYgYXJyYXlcbiAgICAgICAgICAgIGlmIChfaXNWMiAmJiBfYXR0cnNbaV1bMl0gPT09IEF0dHJpYnV0ZVR5cGUuRGJLZXkpIHtcbiAgICAgICAgICAgICAgICBfYXR0cnNbaV1bNl0gPSBfYXR0cnNbaV1bNl0gfCBBdHRyaWJ1dGVGbGFncy5hZkRpcmVjdFN0b3JhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhazsgLy9jdXJyZW50bHkgd2UgY2FuIG9ubHkgaGFuZGxlIHNpbmdsZSBwcm9wZXJ0eSBmaWxlIChubyBjaHVua2luZylcbiAgICB9XG5cbiAgICAvL21hbnVhbCBwYXJzZSBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGluZGV4IHBhaXJzIGFycmF5XG4gICAgZm9yIChsZXQgcCBpbiBkYmpzb25zLmF2cykge1xuXG4gICAgICAgIGxldCBidWYgPSBkYmpzb25zLmF2c1twXTtcblxuICAgICAgICBpZiAoYnVmWzBdID09PSBcIltcIi5jaGFyQ29kZUF0KDApKSB7XG4gICAgICAgICAgICBfYXZzID0gcGFyc2VJbnRBcnJheShkYmpzb25zLmF2c1twXSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfYXZzID0gYnVmO1xuICAgICAgICAgICAgX2lzVmFyaW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBkYmpzb25zLmF2czsgLy9kb24ndCBuZWVkIHRoaXMgYmxvYiBhbnltb3JlXG5cbiAgICAgICAgYnJlYWs7IC8vY3VycmVudGx5IHdlIGNhbiBvbmx5IGhhbmRsZSBzaW5nbGUgcHJvcGVydHkgZmlsZSAobm8gY2h1bmtpbmcpXG5cbiAgICB9XG5cblxuICAgIC8vbWFudWFsIHBhcnNlIG9mIHRoZSBvZmZzZXRzIGFycmF5XG4gICAgZm9yIChsZXQgcCBpbiBkYmpzb25zLm9mZnNldHMpIHtcblxuICAgICAgICAgICAgbGV0IGJ1ZiA9IGRianNvbnMub2Zmc2V0c1twXTtcblxuICAgICAgICAgICAgaWYgKGJ1ZlswXSA9PT0gXCJbXCIuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICAgICAgICAgIF9vZmZzZXRzID0gcGFyc2VJbnRBcnJheShidWYsIDEpOyAvL3Bhc3NpbmcgaW4gMSB0byByZXNlcnZlIGEgc3BvdCBmb3IgdGhlIHNlbnRpbmVsIHZhbHVlXG5cbiAgICAgICAgICAgICAgICAvL2p1c3QgYSBzZW50aW5lbCB2YWx1ZSB0byBtYWtlIGxvb2t1cHMgZm9yIHRoZSBsYXN0IGl0ZW0gZWFzaWVyXG4gICAgICAgICAgICAgICAgX29mZnNldHNbX29mZnNldHMubGVuZ3RoLTFdID0gX2F2cy5sZW5ndGggLyAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfb2Zmc2V0cyA9IG5ldyBJbnQzMkFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aC80KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICBkZWxldGUgZGJqc29ucy5vZmZzZXRzOyAvL2Rvbid0IG5lZWQgdGhpc1xuXG4gICAgICAgIGJyZWFrOyAvL2N1cnJlbnRseSB3ZSBjYW4gb25seSBoYW5kbGUgc2luZ2xlIHByb3BlcnR5IGZpbGUgKG5vIGNodW5raW5nKVxuXG4gICAgfVxuXG4gICAgLy9JbnN0ZWFkIG9mIHBhcnNpbmcgdGhlIHZhbHVlcyBhbmQgaWRzIGFycmF5cywgZmluZCB0aGVcbiAgICAvL29mZnNldCBvZiBlYWNoIGpzb24gaXRlbSBpbiB0aGUgYmxvYiwgYW5kIHRoZW4gd2UgY2FuXG4gICAgLy9waWNrIGFuZCBwYXJzZSBzcGVjaWZpYyBpdGVtcyBsYXRlciBvbiBkZW1hbmQsIHdpdGhvdXRcbiAgICAvL3BhcnNpbmcgdGhlIHBvdGVudGlhbGx5IGxhcmdlIGpzb24gYmxvYiB1cCBmcm9udC5cbiAgICBmb3IgKGxldCBwIGluIGRianNvbnMudmFsdWVzKSB7XG4gICAgICAgIF92YWx1ZXNCbG9iID0gZGJqc29ucy52YWx1ZXNbcF07XG4gICAgICAgIF92YWx1ZXNPZmZzZXRzID0gZmluZFZhbHVlT2Zmc2V0cyhfdmFsdWVzQmxvYik7XG5cbiAgICAgICAgYnJlYWs7IC8vY3VycmVudGx5IHdlIGNhbiBvbmx5IGhhbmRsZSBzaW5nbGUgcHJvcGVydHkgZmlsZSAobm8gY2h1bmtpbmcpXG5cbiAgICB9XG5cbiAgICAvLyBHZXQgZXh0ZXJuYWxJZHMgZnJvbSBkYXRhIGJsb2IuIFVubGlrZSB0aGUgb3RoZXIgZGF0YSwgdGhpcyBvbmUgaXMgb3B0aW9uYWxcbiAgICAvLyBhbmQgbWF5IGJlIGxvYWRlZCBsYXRlciBvciBub3QgYXQgYWxsIHRvIHNhdmUgbWVtb3J5LlxuICAgIHRoaXMuc2V0SWRzQmxvYiA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgLy8gSnVzdCBsaWtlIGZvciBfdmFsdWVzQmxvYjogRmluZCB0aGUgb2Zmc2V0IHRvIGVhY2ggdmFsdWUgXG4gICAgICAgIC8vICBidXQgc2tpcCB0aGUgZnVsbCBwYXJzZS5cbiAgICAgICAgX2lkc0Jsb2IgPSBkYXRhO1xuICAgICAgICBfaWRzT2Zmc2V0cyA9IGZpbmRWYWx1ZU9mZnNldHMoZGF0YSk7XG4gICAgfTtcblxuICAgIC8vU2V0IGlkcyBhcnJheSAoaWYgYXZhaWxhYmxlKS4gTm90ZSB0aGF0IHRoZSBpZHMgYXJyYXkgaXNcbiAgICAvL29wdGlvbmFsIGFuZCBMTVYgZG9lcyBub3QgcmVxdWlyZSB0aGVtLiAoSnVzdCBzb21lIGV4dGVuc2lvbnMgbWlnaHQgZG8gLSBsaWtlIFB1c2hQaW5zKVxuICAgIGZvciAobGV0IHAgaW4gZGJqc29ucy5pZHMpIHtcbiAgICAgICAgdGhpcy5zZXRJZHNCbG9iKGRianNvbnMuaWRzW3BdKTtcbiAgICAgICAgYnJlYWs7IC8vY3VycmVudGx5IHdlIGNhbiBvbmx5IGhhbmRsZSBzaW5nbGUgcHJvcGVydHkgZmlsZSAobm8gY2h1bmtpbmcpXG4gICAgfVxuXG4gICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAvKipcbiAgICAgKiBPYnRhaW5zIHRoZSBudW1iZXIgb2YgZGF0YWJhc2UgaWRzIChkYklkcykgYXZhaWxhYmxlLiBcbiAgICAgKiBUaGVzZSBpZHMgcmFuZ2UgYmV0d2VlIDEgKGluY2x1c2l2ZSkgdXAgdG8gZ2V0T2JqZWN0Q291bnQoKSAoZXhjbHVzaXZlKS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5nZXRPYmplY3RDb3VudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX29mZnNldHMubGVuZ3RoLTE7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0VmFsdWVBdCA9IGZ1bmN0aW9uKHZhbElkKSB7XG4gICAgICAgIHJldHVybiBzdWJCbG9iVG9Kc29uKF92YWx1ZXNCbG9iLCBfdmFsdWVzT2Zmc2V0c1t2YWxJZF0pO1xuICAgIH07XG5cbiAgICAvL2Zhc3RlciB2YXJpYW50IHVzZWQgZm9yIHRyYXZlcnNpbmcgdGhlIG9iamVjdCBoaWVyYXJjaHkgd2hlcmVcbiAgICAvL3dlIGtub3cgdGhlIGRhdGEgdHlwZSBvZiB0aGUgdmFsdWUgdG8gYmUgYW4gaW50ZWdlclxuICAgIHRoaXMuZ2V0SW50VmFsdWVBdCA9IGZ1bmN0aW9uKHZhbElkKSB7XG4gICAgICAgIHJldHVybiBzdWJCbG9iVG9Kc29uSW50KF92YWx1ZXNCbG9iLCBfdmFsdWVzT2Zmc2V0c1t2YWxJZF0pO1xuICAgIH07XG5cblxuICAgIHRoaXMuZ2V0SWRBdCA9IGZ1bmN0aW9uKGVudElkKSB7XG4gICAgICAgIHJldHVybiBzdWJCbG9iVG9Kc29uKF9pZHNCbG9iLCBfaWRzT2Zmc2V0c1tlbnRJZF0pO1xuICAgIH07XG5cbiAgICAvLyBMb2FkaW5nIHRoZSAobGFyZ2UpIGV4dGVybmFsSURzIGNhbiBiZSBza2lwcGVkIHRvIHNhdmUgbWVtb3J5LlxuICAgIHRoaXMuZXh0ZXJuYWxJZHNMb2FkZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oX2lkc0Jsb2IpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPYnRhaW5zIHRoZSBhY3R1YWwgdmFsdWUgb2YgYSBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdHRySWQgLSBUaGUgYXR0cmlidXRlIGlkXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbElkIC0gVGhlIHZhbHVlIGlkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW50ZWdlckhpbnRdIC0gSWYgdHJ1ZSB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgY2FzdGVkIHRvIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Kn0gXG4gICAgICovXG4gICAgIHRoaXMuZ2V0QXR0clZhbHVlID0gZnVuY3Rpb24oYXR0cklkLCB2YWxJZCwgaW50ZWdlckhpbnQpIHtcbiAgICAgICAgdmFyIGF0dHIgPSBfYXR0cnNbYXR0cklkXTtcbiAgICAgICAgaWYgKGF0dHJbNl0gJiBBdHRyaWJ1dGVGbGFncy5hZkRpcmVjdFN0b3JhZ2UpIHtcbiAgICAgICAgICAgIGlmIChhdHRyWzJdID09PSBBdHRyaWJ1dGVUeXBlLkRiS2V5KSB7XG4gICAgICAgICAgICAgICAgLy9kYiBrZXlzIGFyZSBzdG9yZWQgZGlyZWN0bHkgaW4gdGhlIEVBViB0cmlwbGV0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbElkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGludGVnZXJIaW50ID8gdGhpcy5nZXRJbnRWYWx1ZUF0KHZhbElkKSA6IHRoaXMuZ2V0VmFsdWVBdCh2YWxJZCk7XG4gICAgfTtcblxuICAgIHRoaXMuX2dldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24oYXR0cklkLCB2YWxJZCkge1xuXG4gICAgICAgIHZhciBhdHRyICAgICAgICA9IF9hdHRyc1thdHRySWRdO1xuICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSAoYXR0cls1XSkgPyBhdHRyWzVdIDogYXR0clswXTtcbiAgICAgICAgdmFyIGhpZGRlbiAgICAgID0gdGhpcy5hdHRyaWJ1dGVIaWRkZW4oYXR0cklkKTtcbiAgICAgICAgXG4gICAgICAgIC8vIHR5cGUgdmFsdWVzIG1hdGNoIHRob3NlIGluIFByb3BlcnR5RGF0YWJhc2UuaFxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0LmF1dG9kZXNrLmNvbS9BMzYwL3BsYXRmb3JtLXRyYW5zbGF0aW9uLXByb3BlcnR5ZGIvYmxvYi9tYXN0ZXIvcHJvcGVydHlkYi9Qcm9wZXJ0eURhdGFiYXNlLmgjTDY3XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IF90aGlzLmdldEF0dHJWYWx1ZShhdHRySWQsIHZhbElkKSxcbiAgICAgICAgICAgIGRpc3BsYXlDYXRlZ29yeTogYXR0clsxXSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IGF0dHJbMF0sXG4gICAgICAgICAgICB0eXBlOiBhdHRyWzJdLFxuICAgICAgICAgICAgdW5pdHM6IGF0dHJbM10sXG4gICAgICAgICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgICAgICAgIHByZWNpc2lvbjogYXR0cls3XSB8fCAwXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9idGFpbnMgYWxsIHByb3BlcnRpZXMgZm9yIGEgZ2l2ZW4gZGF0YWJhc2UgaWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGJJZCAtIFRoZSBkYXRhYmFzZSBpZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwcm9wRmlsdGVyPW51bGxdIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgdG8gcmV0dXJuIHZhbHVlcyBmb3IuIFVzZSBudWxsIGZvciBubyBmaWx0ZXJpbmcuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlSGlkZGVuPWZhbHNlXSAtIHRydWUgdG8gaWdub3JlIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwcm9wSWdub3JlZD1udWxsXSAtIEFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHRvIG5vdCBpbmNsdWRlIGluIHRoZSByZXR1cm4gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBjb25zaXN0aW5nIG9mIGF0dHJpYnV0ZXMgYG5hbWVgLCBgZGJJZGAsIGBwcm9wZXJ0aWVzYCBhbmQgYGV4dGVybmFsSWRgLlxuICAgICAqL1xuICAgIHRoaXMuZ2V0T2JqZWN0UHJvcGVydGllcyA9IGZ1bmN0aW9uKGRiSWQsIHByb3BGaWx0ZXIsIGlnbm9yZUhpZGRlbiwgcHJvcElnbm9yZWQsIGNhdGVnb3J5RmlsdGVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgICAgICBcImRiSWRcIjpkYklkLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIG5lZWROYW1lID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgZXh0ZXJuYWxJZHMgYXJlIHdhbnRlZCBhbmQgYXZhaWxhYmxlXG4gICAgICAgIHZhciBmaWx0ZXJDb250YWluc0lkID0gcHJvcEZpbHRlciAmJiAocHJvcEZpbHRlci5pbmRleE9mKFwiZXh0ZXJuYWxJZFwiKSAhPT0gLTEpO1xuICAgICAgICB2YXIgaWRzTG9hZGVkICAgICAgICA9IHRoaXMuZXh0ZXJuYWxJZHNMb2FkZWQoKTtcblxuICAgICAgICAvLyBJZiBleHRlcm5hbElkcyBhcmUgZXhwbGljaXRseSBhZGRyZXNzZWQgaW4gdGhlIGZpbHRlciwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBjYWxsZXIgZXhwZWN0c1xuICAgICAgICAvLyB0byBoYXZlIHRoZW0gaW4gdGhlIHJlc3VsdC4gU28gd2Ugc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpZiB0aGV5IGFyZSBub3QgbG9hZGVkLlxuICAgICAgICBpZiAoZmlsdGVyQ29udGFpbnNJZCAmJiAhaWRzTG9hZGVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZXF1ZXN0aW5nIGV4dGVybmFsSUQgcmVxdWlyZXMgbG9hZGluZyBvZiB0aGUgZXh0ZXJuYWxJRCB0YWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgYWRkIGV4dGVybmFsSWRzIHRvIHRoZSByZXN1bHQgaWYuLi5cbiAgICAgICAgLy8gIDEuIGV4dGVybmFsSWRzIGFyZSBpbiBtZW1vcnlcbiAgICAgICAgLy8gIDIuIEVpdGhlciB0aGUgZmlsdGVyIGluY2x1ZGVzIGV4dGVybmFsSWRzIG9yIHRoZXJlIGlzIG5vIGZpbHRlclxuICAgICAgICB2YXIgYWRkRXh0ZXJuYWxJZCA9IGlkc0xvYWRlZCAmJiAoIXByb3BGaWx0ZXIgfHwgZmlsdGVyQ29udGFpbnNJZCk7XG4gICAgICAgIGlmIChhZGRFeHRlcm5hbElkKSB7XG4gICAgICAgICAgICByZXN1bHQuZXh0ZXJuYWxJZCA9IHRoaXMuZ2V0SWRBdChkYklkKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG90aGVyIHByb3BlcnRpZXMgcmVxdWlyZWQsIHRoZW4ganVzdCByZXR1cm4uXG4gICAgICAgICAgICAvLyBVc2VmdWwgd2hlbiB3ZSBvbmx5IGNhcmUgYWJvdXQgZmV0Y2hpbmcgZXh0ZXJuYWxJZC1vbmx5IGRhdGEuXG4gICAgICAgICAgICBpZiAocHJvcEZpbHRlciAmJiBwcm9wRmlsdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSBudWxsO1xuXG4gICAgICAgIC8vTG9vcCBvdmVyIHRoZSBhdHRyaWJ1dGUgaW5kZXggLSB2YWx1ZSBpbmRleCBwYWlycyBmb3IgdGhlIG9iamVjdHNcbiAgICAgICAgLy9hbmQgZm9yIGVhY2ggb25lIGxvb2sgdXAgdGhlIGF0dHJpYnV0ZSBhbmQgdGhlIHZhbHVlIGluIHRoZWlyXG4gICAgICAgIC8vcmVzcGVjdGl2ZSBhcnJheXMuXG4gICAgICAgIHRoaXMuZW51bU9iamVjdFByb3BlcnRpZXMoZGJJZCwgZnVuY3Rpb24oYXR0cklkLCB2YWxJZCkge1xuICAgICAgICAgICAgaWYgKGF0dHJJZCA9PSBfaW5zdGFuY2VPZkF0dHJJZCkge1xuICAgICAgICAgICAgICAgIC8vUmVjdXJzaXZlbHkgcmVzb2x2ZSBhbnkgY29tbW9uIHByb3BlcnRpZXMgZnJvbSB0aGUgcGFyZW50IG9mIHRoaXMgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAvL05PVEU6IEhlcmUgd2UgZXhwbGljaXRseSBpZ25vcmUgaGlkZGVuIHByb3BlcnRpZXMsIGJlY2F1c2Ugd2UgZG9uJ3QgXG4gICAgICAgICAgICAgICAgLy93YW50IHRoZSBwYXJlbnQgaW5zdGFuY2UgdG8gb3ZlcnJpZGUgcGFyZW50L2NoaWxkIG5vZGVzIGFuZCBvdGhlciBzdHJ1Y3R1cmFsIFxuICAgICAgICAgICAgICAgIC8vYXR0cmlidXRlcy4gU3BlY2lmaWNhbGx5LCBSZXZpdCBleHRyYWN0aW9uIGhhcyBhIGJ1ZyB3aGVyZSB0aGUgbW9kZWwgdHJlZSBwYXJlbnQgaXMgXG4gICAgICAgICAgICAgICAgLy9hbHNvIGluc3RhbmNlIHByb3RvdHlwZSBmb3IgaXRzIGNoaWxkcmVuLCBzbyB3ZSBuZWVkIHRvIHByZXZlbnQgdGhlIGNoaWxkXG4gICAgICAgICAgICAgICAgLy9mcm9tIGdhaW5pbmcgYWxsIGl0cyBzaWJsaW5ncyBhcyBjaGlsZHJlbiBvZiBpdHMgb3duIGR1ZSB0byB0aGlzIGluaGVyaXRhbmNlLlxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBfdGhpcy5nZXRPYmplY3RQcm9wZXJ0aWVzKF90aGlzLmdldEF0dHJWYWx1ZShhdHRySWQsIHZhbElkKSwgcHJvcEZpbHRlciwgdHJ1ZSAvKmlnbm9yZUhpZGRlbiovLCBwcm9wSWdub3JlZCwgY2F0ZWdvcnlGaWx0ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UHJvcHMgPSByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGF0dHIgPSBfYXR0cnNbYXR0cklkXTtcblxuICAgICAgICAgICAgaWYgKHByb3BGaWx0ZXIgJiYgcHJvcEZpbHRlci5pbmRleE9mKGF0dHJbMF0pID09PSAtMSAmJiBwcm9wRmlsdGVyLmluZGV4T2YoYXR0cls1XSkgPT09IC0xIClcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChjYXRlZ29yeUZpbHRlciAmJiBjYXRlZ29yeUZpbHRlci5pbmRleE9mKGF0dHJbMV0pID09PSAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChwcm9wSWdub3JlZCAmJiAocHJvcElnbm9yZWQuaW5kZXhPZihhdHRyWzBdKSA+IC0xIHx8IHByb3BJZ25vcmVkLmluZGV4T2YoYXR0cls1XSkgPiAtMSApKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKGF0dHJJZCA9PSBfbmFtZUF0dHJJZCkge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBfdGhpcy5nZXRBdHRyVmFsdWUoYXR0cklkLCB2YWxJZCk7XG4gICAgICAgICAgICAgICAgbmVlZE5hbWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vc2tpcCBzdHJ1Y3R1cmFsIGF0dHJpYnV0ZXMsIHdlIGRvbid0IHdhbnQgdGhvc2UgdG8gZGlzcGxheVxuICAgICAgICAgICAgICAgIC8vTk9URTogVGhlIGxpc3Qgb2Ygc3RydWN0dXJhbCBhdHRyaWJ1dGVzIHRoYXQgd2UgY2hlY2sgZXhwbGljaXRseSBpcyBub3QgbWFya2VkXG4gICAgICAgICAgICAgICAgLy9hcyBoaWRkZW4gaW4gb2xkZXIgdmVyc2lvbnMgb2YgdGhlIHByb3BlcnR5IGRhdGFiYXNlLCBzbyBpZiB3ZSBldmVyIHdhbnQgdG9cbiAgICAgICAgICAgICAgICAvL2FkZCB0aGVtIHRvIHRoZSByZXN1bHQgbGlzdCwgd2UgaGF2ZSB0byBleHBsaWNpdGx5IHNldCB0aGUgaGlkZGVuIGZsYWcgZm9yIHRob3NlLlxuICAgICAgICAgICAgICAgIHZhciBoaWRkZW4gPSBfdGhpcy5hdHRyaWJ1dGVIaWRkZW4oYXR0cklkKTtcbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlSGlkZGVuICYmIGhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHByb3AgPSBfdGhpcy5fZ2V0T2JqZWN0UHJvcGVydHkoYXR0cklkLCB2YWxJZCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9Db21iaW5lIGluc3RhbmNlIHByb3BlcnRpZXMgd2l0aCBhbnkgcGFyZW50IG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICAgIGlmIChwYXJlbnRQcm9wcykge1xuICAgICAgICAgICAgdmFyIG15UHJvcHMgPSB7fTtcbiAgICAgICAgICAgIHZhciBycCA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPHJwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbXlQcm9wc1tycFtpXS5kaXNwbGF5TmFtZV0gPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5uYW1lKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lID0gcGFyZW50UHJvcHMubmFtZTtcblxuICAgICAgICAgICAgdmFyIHBwID0gcGFyZW50UHJvcHMucHJvcGVydGllcztcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxwcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG15UHJvcHMsIHBwW2ldLmRpc3BsYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBycC5wdXNoKHBwW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2F0ZWdvcnlGaWx0ZXIgJiYgIXJlc3VsdC5wcm9wZXJ0aWVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmIChwcm9wRmlsdGVyICYmICFyZXN1bHQucHJvcGVydGllcy5sZW5ndGggJiYgIWFkZEV4dGVybmFsSWQgJiYgIW5lZWROYW1lKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT2J0YWlucyBhIG1hcCBiZXR3ZWVuIGVhY2ggZGF0YWJhc2UgaWQgKGRiSWQpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGV4dGVybmFsLWlkLlxuICAgICAqIFRoZSBleHRlcm5hbC1pZCBpcyB0aGUgaWRlbnRpZmllciB1c2VkIGJ5IHRoZSBzb3VyY2UgZmlsZS4gXG4gICAgICogRXhhbXBsZTogQSB0cmFuc2xhdGVkIFJldml0IGZpbGUgaGFzIGEgd2FsbCB3aXRoIGRiSWQ9MSwgYnV0IGluIFJldml0IChkZXNrdG9wIGFwcGxpY2F0aW9uKSB0aGUgaWRlbnRpZmllciBvZiB0aGF0IHdhbGwgaXMgXCJXYWxsLTA2LXNvbWUtZ3VpZC1oZXJlXCIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSBbZXh0SWRGaWx0ZXJdIC0gTGltaXRzIHRoZSByZXN1bHQgdG8gb25seSBjb250YWluIHRoZSBpZHMgaW4gdGhpcyBhcnJheS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IG1hcCBmcm9tIGRiSWQgaW50byBleHRlcm5hbC1pZC5cbiAgICAgKi9cbiAgICB0aGlzLmdldEV4dGVybmFsSWRNYXBwaW5nID0gZnVuY3Rpb24oZXh0SWRGaWx0ZXIpIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSB7fTtcbiAgICAgICAgaWYgKF9pZHNPZmZzZXRzICYmICdsZW5ndGgnIGluIF9pZHNPZmZzZXRzKSB7IC8vIENoZWNrIHRoYXQgaXQncyBhbiBpbmRleGFibGUgdHlwZVxuICAgICAgICAgICAgZm9yICh2YXIgZGJJZD0xLCBsZW49X2lkc09mZnNldHMubGVuZ3RoOyBkYklkPGxlbjsgKytkYklkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4dGVybmFsSWQgPSB0aGlzLmdldElkQXQoZGJJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFleHRJZEZpbHRlciB8fCBleHRJZEZpbHRlcltleHRlcm5hbElkXT09PXRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1tleHRlcm5hbElkXSA9IGRiSWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXBwaW5nO1xuICAgIH07XG5cbiAgICAvL0hldXJpc3RpY2FsbHkgZmluZCB0aGUgcm9vdCBub2RlKHMpIG9mIGEgc2NlbmVcbiAgICAvL0Egcm9vdCBpcyBhIG5vZGUgdGhhdCBoYXMgY2hpbGRyZW4sIGhhcyBubyAob3IgbnVsbCkgcGFyZW50IGFuZCBoYXMgYSBuYW1lLlxuICAgIC8vVGhlcmUgY2FuIGJlIG11bHRpcGxlIG5vZGVzIGF0IHRoZSB0b3AgbGV2ZWwgKGUuZy4gUmV2aXQgRFdGKSwgd2hpY2ggaXMgd2h5XG4gICAgLy93ZSBzaG91bGQgZ2V0IHRoZSBzY2VuZSByb290IHdpdGggYWJzb2x1dGUgY2VydGFpbnR5IGZyb20gdGhlIFNWRiBpbnN0YW5jZSB0cmVlLFxuICAgIC8vYnV0IHdlIHdvdWxkIGhhdmUgdG8gdW5jb21wcmVzcyBhbmQgcGFyc2UgdGhhdCBpbiAtLSBzb21ldGhpbmcgdGhhdCBpc1xuICAgIC8vbm90IGN1cnJlbnRseSBkb25lLiBUaGlzIGlzIGdvb2QgZW5vdWdoIGZvciBub3cgKGlmIHByZXR0eSBzbG93KS5cbiAgICB0aGlzLmZpbmRSb290Tm9kZXMgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgaWRyb290cyA9IFtdO1xuICAgICAgICB2YXIgaWREZXRhY2hlZE5vZGVzID0gW107IC8vIFRoZXNlIGFyZSBub2RlcyB3aXRob3V0IGEgcGFyZW50IG9yIGNoaWxkXG5cbiAgICAgICAgdGhpcy5lbnVtT2JqZWN0cyhmdW5jdGlvbihpZCkge1xuICAgICAgICAgICAgdmFyIGhhc0NoaWxkID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaGFzUGFyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgaGFzTmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBfdGhpcy5lbnVtT2JqZWN0UHJvcGVydGllcyhpZCwgZnVuY3Rpb24oYXR0cklkLCB2YWxJZCkge1xuICAgICAgICAgICAgICAgIGlmIChhdHRySWQgPT0gX3BhcmVudEF0dHJJZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuZ2V0QXR0clZhbHVlKGF0dHJJZCwgdmFsSWQsIHRydWUpKSAvL2NoZWNrcyBmb3IgbnVsbCBvciB6ZXJvIHBhcmVudCBpZCwgaW4gd2hpY2ggY2FzZSBpdCdzIGNvbnNpZGVyZWQgbm9uLXBhcmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGFyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJJZCA9PSBfY2hpbGRBdHRySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRySWQgPT0gX25hbWVBdHRySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzTmFtZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChoYXNOYW1lICYmICFoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBoYXNDaGlsZCA/IGlkcm9vdHMucHVzaChpZCkgOiBpZERldGFjaGVkTm9kZXMucHVzaChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNvbWUgZHdmeCBmaWxlcyBjYW4gaGF2ZSBvbmx5IGRldGFjaGVkIG5vZGVzLCBpbiB3aGljaCBjYXNlLCB3ZSB0cmVhdCB0aGVtIGFzIHJvb3RzXG4gICAgICAgIHJldHVybiBpZHJvb3RzLmxlbmd0aCA+IDAgPyBpZHJvb3RzIDogaWREZXRhY2hlZE5vZGVzOyBcbiAgICB9O1xuXG4gICAgLy8gRG9lcyB0aGUgbm9kZSBoYXZlIGF0bGVhc3Qgb25lIGNoaWxkP1xuICAgIHRoaXMubm9kZUhhc0NoaWxkID0gZnVuY3Rpb24oZGJJZCkge1xuICAgICAgICBsZXQgaGFzQ2hpbGQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmVudW1PYmplY3RQcm9wZXJ0aWVzKGRiSWQsIGZ1bmN0aW9uKGF0dHJJZCkge1xuICAgICAgICAgICAgaWYgKGF0dHJJZCA9PT0gX2NoaWxkQXR0cklkKSB7XG4gICAgICAgICAgICAgICAgaGFzQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBicmVhayBmcm9tIGVudW1lcmF0aW5nXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBoYXNDaGlsZDtcbiAgICB9O1xuICAgIFxuXG4gICAgLy9HZXRzIHRoZSBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgYSBub2RlIHdpdGggdGhlIGdpdmVuIGRiSWRcbiAgICB0aGlzLmdldE5vZGVOYW1lQW5kQ2hpbGRyZW4gPSBmdW5jdGlvbihub2RlIC8qIHtkYklkOlgsIG5hbWU6XCJcIn0gKi8sIHNraXBDaGlsZHJlbikge1xuXG4gICAgICAgIHZhciBpZCA9IG5vZGUuZGJJZDtcblxuICAgICAgICB2YXIgY2hpbGRyZW47XG4gICAgICAgIHZhciBpbnN0YW5jZU9mVmFsSWQ7XG5cbiAgICAgICAgdGhpcy5lbnVtT2JqZWN0UHJvcGVydGllcyhpZCwgZnVuY3Rpb24oYXR0cklkLCB2YWxJZCkge1xuICAgICAgICAgICAgdmFyIHZhbDtcblxuICAgICAgICAgICAgaWYgKGF0dHJJZCA9PT0gX3BhcmVudEF0dHJJZCkge1xuICAgICAgICAgICAgICAgIC8vbm9kZS5wYXJlbnQgPSB0aGlzLmdldEF0dHJWYWx1ZShhdHRySWQsIHZhbElkLCB0cnVlKTsgLy9ldmVudHVhbGx5IHdlIHdpbGwgbmVlZHMgdGhpcyBpbnN0ZWFkIG9mIHNldHRpbmcgcGFyZW50IHBvaW50ZXIgd2hlbiBjcmVhdGluZyBjaGlsZHJlbiBiZWxvdy5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cklkID09IF9jaGlsZEF0dHJJZCAmJiAhc2tpcENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gX3RoaXMuZ2V0QXR0clZhbHVlKGF0dHJJZCwgdmFsSWQsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgcGFyZW50LT5jaGlsZCBsaW5rcyB0byB0aGUgc2FtZSBkYklkXG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gbm9kZS5kYklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHsgZGJJZDp2YWwsIHBhcmVudDpub2RlLmRiSWQgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbilcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gW2NoaWxkXTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJJZCA9PT0gX25hbWVBdHRySWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLm5hbWUgPSBfdGhpcy5nZXRBdHRyVmFsdWUoYXR0cklkLCB2YWxJZCk7IC8vbmFtZSBpcyBuZWNlc3NhcnkgZm9yIEdVSSBwdXJwb3Nlcywgc28gYWRkIGl0IHRvIHRoZSBub2RlIG9iamVjdCBleHBsaWNpdGx5XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJJZCA9PT0gX25vZGVGbGFnc0F0dHJJZCkge1xuICAgICAgICAgICAgICAgIG5vZGUuZmxhZ3MgPSBfdGhpcy5nZXRBdHRyVmFsdWUoYXR0cklkLCB2YWxJZCwgdHJ1ZSk7IC8vZmxhZ3MgYXJlIG5lY2Vzc2FyeSBmb3IgR1VJL3NlbGVjdGlvbiBwdXJwb3Nlcywgc28gYWRkIHRoZW0gdG8gdGhlIG5vZGUgb2JqZWN0XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJJZCA9PT0gX2luc3RhbmNlT2ZBdHRySWQpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU9mVmFsSWQgPSB2YWxJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9JZiB0aGlzIGlzIGFuIGluc3RhbmNlIG9mIGFub3RoZXIgb2JqZWN0LFxuICAgICAgICAvL3RyeSB0byBnZXQgdGhlIG9iamVjdCBuYW1lL2ZsYWdzIGZyb20gdGhlcmUuXG4gICAgICAgIC8vVGhpcyBpcyBub3QgZG9uZSBpbiB0aGUgbWFpbiBsb29wIGFib3ZlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLFxuICAgICAgICAvL3dlIG9ubHkgd2FudCB0byBkbyB0aGUgZXhwZW5zaXZlIHRoaW5nIG9mIGdvaW5nIHVwIHRoZSBvYmplY3QgaGllcmFyY2h5XG4gICAgICAgIC8vaWYgdGhlIG5vZGUgZG9lcyBub3QgYWN0dWFsbHkgaGF2ZSBhIG5hbWUvZmxhZ3MgYXR0cmlidXRlcy5cbiAgICAgICAgaWYgKCghbm9kZS5uYW1lIHx8ICFub2RlLmZsYWdzKSAmJiBpbnN0YW5jZU9mVmFsSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRiSWRPZkluc3RhbmNlID0gX3RoaXMuZ2V0QXR0clZhbHVlKF9pbnN0YW5jZU9mQXR0cklkLCBpbnN0YW5jZU9mVmFsSWQsIHRydWUpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgaW5zdGFuY2Ugbm9kZSBhbHJlYWR5IGV4aXN0cyBpbiBjYWNoZS5cbiAgICAgICAgICAgIGxldCB0bXAgPSBfaW5zdGFuY2VOb2RlQ2FjaGVbZGJJZE9mSW5zdGFuY2VdO1xuXG4gICAgICAgICAgICBpZiAoIXRtcCkge1xuICAgICAgICAgICAgICAgIC8vIEZldGNoIGluc3RhbmNlIG5vZGUgYW5kIG1lbW9pemUgaXQuXG4gICAgICAgICAgICAgICAgX2luc3RhbmNlTm9kZUNhY2hlW2RiSWRPZkluc3RhbmNlXSA9IHRtcCA9IHsgZGJJZDogZGJJZE9mSW5zdGFuY2UsIG5hbWU6IG51bGwsIGZsYWdzOiBudWxsIH07XG4gICAgICAgICAgICAgICAgX3RoaXMuZ2V0Tm9kZU5hbWVBbmRDaGlsZHJlbih0bXAsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL1Rha2UgdGhlIG5hbWUgZnJvbSB0aGUgcHJvdG90eXBlIG9iamVjdCBpZiB0aGUgaW5zdGFuY2UgZG9lc24ndCBoYXZlIGl0XG4gICAgICAgICAgICBpZiAodG1wLm5hbWUgJiYgIW5vZGUubmFtZSlcbiAgICAgICAgICAgICAgICBub2RlLm5hbWUgPSB0bXAubmFtZTtcblxuICAgICAgICAgICAgLy9UYWtlIHRoZSBub2RlIGZsYWdzIGZyb20gdGhlIHByb3RvdHlwZSBvYmplY3QgaWYgdGhlIGluc3RhbmNlIGRvZXNuJ3QgaGF2ZSBpdFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLmZsYWdzICE9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0bXAuZmxhZ3MgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbm9kZS5mbGFncyA9IHRtcC5mbGFncztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZnJhZ1RvRGJJZFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gYnVpbGREYklkVG9GcmFnTWFwKGZyYWdUb0RiSWQpIHtcbiAgICAgICAgdmFyIHJldCA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpPSAwLCBpRW5kPWZyYWdUb0RiSWQubGVuZ3RoOyBpPGlFbmQ7IGkrKykge1xuXG4gICAgICAgICAgICB2YXIgZGJJZHMgPSBmcmFnVG9EYklkW2ldO1xuXG4gICAgICAgICAgICAvL0luIDJEIGRyYXdpbmdzLCBhIHNpbmdsZSBmcmFnbWVudCAoY29uc29saWRhdGlvbiBtZXNoKVxuICAgICAgICAgICAgLy9jYW4gY29udGFpbiBtdWx0aXBsZSBvYmplY3RzIHdpdGggZGlmZmVyZW50IGRiSWRzLlxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRiSWRzKSkge1xuICAgICAgICAgICAgICAgIGRiSWRzID0gW2RiSWRzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPGRiSWRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRiSWQgPSBkYklkc1tqXTtcbiAgICAgICAgICAgICAgICB2YXIgZnJhZ3MgPSByZXRbZGJJZF07XG4gICAgICAgICAgICAgICAgaWYgKGZyYWdzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9JZiBpdCdzIHRoZSBmaXJzdCBmcmFnbWVudHMgZm9yIHRoaXMgZGJpZCxcbiAgICAgICAgICAgICAgICAgICAgLy9zdG9yZSB0aGUgaW5kZXggZGlyZWN0bHkgLS0gbW9zdCBjb21tb24gY2FzZS5cbiAgICAgICAgICAgICAgICAgICAgcmV0W2RiSWRdID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZnJhZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHB1dCB0aGUgZnJhZ21lbnRzIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIGRiaWQgaW50byBhbiBhcnJheVxuICAgICAgICAgICAgICAgICAgICByZXRbZGJJZF0gPSBbZnJhZ3MsIGldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGlzIGFuIGFycmF5XG4gICAgICAgICAgICAgICAgICAgIGZyYWdzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkRGJJZFRvRnJhZ01hcCA9IGJ1aWxkRGJJZFRvRnJhZ01hcDtcblxuLy9EdXBsaWNhdGVkIGZyb20gSW5zdGFuY2VUcmVlLmpzXG52YXIgTk9ERV9UWVBFX0FTU0VNQkxZICAgPSAweDAsICAgIC8vIFJlYWwgd29ybGQgb2JqZWN0IGFzIGFzc2VtYmx5IG9mIHN1Yi1vYmplY3RzXG4gICAgTk9ERV9UWVBFX0dFT01FVFJZICAgPSAweDY7ICAgIC8vIExlYWYgZ2VvbWV0cnkgbm9kZVxuXG4gICAgLy9CdWlsZHMgYSB0cmVlIG9mIG5vZGVzIGFjY29yZGluZyB0byB0aGUgcGFyZW50L2NoaWxkIGhpZXJhcmNoeVxuICAgIC8vc3RvcmVkIGluIHRoZSBwcm9wZXJ0eSBkYXRhYmFzZSwgc3RhcnRpbmcgYXQgdGhlIG5vZGUgd2l0aCB0aGUgZ2l2ZW4gZGJJZFxuICAgIHRoaXMuYnVpbGRPYmplY3RUcmVlID0gZnVuY3Rpb24ocm9vdElkLCAvL2N1cnJlbnQgbm9kZSBkYklkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnVG9EYklkLCAvL2FycmF5IG9mIGZyYWdJZC0+ZGJJZCBsb29rdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heERlcHRoLCAvKiByZXR1cm5zIG1heCB0cmVlIGRlcHRoICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlU3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG5cbiAgICAgICAgLy9CdWlsZCByZXZlcnNlIGxvb2t1cCBmb3IgZGJJZC0+ZnJhZ0lkXG4gICAgICAgIHZhciBkYlRvRnJhZ0lkO1xuICAgICAgICBpZiAoZnJhZ1RvRGJJZCkge1xuICAgICAgICAgICAgZGJUb0ZyYWdJZCA9IGJ1aWxkRGJJZFRvRnJhZ01hcChmcmFnVG9EYklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9wcm9jZXNzZWRJZHMgPSB7fTtcbiAgICAgICAgX2N5Y2xlc0NvdW50ID0gMDtcblxuICAgICAgICAvL0NhbGwgcmVjdXJzaXZlIGltcGxlbWVudGF0aW9uXG4gICAgICAgIHZhciByZXQgPSB0aGlzLmJ1aWxkT2JqZWN0VHJlZVJlYyhyb290SWQsIDAsIGRiVG9GcmFnSWQsIDAsIG1heERlcHRoLCBub2RlU3RvcmFnZSk7XG4gICAgICAgIGlmIChfY3ljbGVzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGFiYXNlIGludGVncml0eSBub3QgZ3VhcmFudGVlZCAoJyArIF9jeWNsZXNDb3VudCArICcpLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3Byb2Nlc3NlZElkcyA9IG51bGw7XG5cbiAgICAgICAgLy8gQ2xlYW4gY2FjaGVcbiAgICAgICAgX2luc3RhbmNlTm9kZUNhY2hlID0ge307XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuXG4gICAgLy9SZWN1cnNpdmUgaGVscGVyIGZvciBidWlsZE9iamVjdFRyZWVcbiAgICB0aGlzLmJ1aWxkT2JqZWN0VHJlZVJlYyA9IGZ1bmN0aW9uKGRiSWQsIC8vY3VycmVudCBub2RlIGRiSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCwgLy9wYXJlbnQgZGJJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJUb0ZyYWcsIC8vbWFwIG9mIGRiSWQgdG8gZnJhZ21lbnRJZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLCAvKiBzdGFydCBhdCAwICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEZXB0aCwgLyogcmV0dXJucyBtYXggdHJlZSBkZXB0aCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBjeWNsZXMgaW4gdGhlIHRyZWUuXG4gICAgICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgY3ljbGVzIGluIHRoZSB0cmVlLi4uXG4gICAgICAgIGlmIChfcHJvY2Vzc2VkSWRzW2RiSWRdKSB7XG4gICAgICAgICAgICBfY3ljbGVzQ291bnQrKztcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgX3Byb2Nlc3NlZElkc1tkYklkXSA9IHBhcmVudCB8fCBkYklkO1xuXG4gICAgICAgIGlmIChkZXB0aCA+IG1heERlcHRoWzBdKVxuICAgICAgICAgICAgbWF4RGVwdGhbMF0gPSBkZXB0aDtcblxuICAgICAgICB2YXIgbm9kZSA9IHtkYklkIDogZGJJZH07XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuZ2V0Tm9kZU5hbWVBbmRDaGlsZHJlbihub2RlKTtcblxuICAgICAgICB2YXIgY2hpbGRyZW5JZHMgPSBbXTtcblxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxjaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZEhhc0NoaWxkcmVuID0gdGhpcy5idWlsZE9iamVjdFRyZWVSZWMoY2hpbGRyZW5bal0uZGJJZCwgZGJJZCwgZGJUb0ZyYWcsIGRlcHRoKzEsIG1heERlcHRoLCBub2RlU3RvcmFnZSk7XG5cbiAgICAgICAgICAgICAgICAvL0ZvciBkaXNwbGF5IHB1cnBvc2VzLCBwcnVuZSBjaGlsZHJlbiB0aGF0IGFyZSBsZWFmcyB3aXRob3V0IGdyYXBoaWNzXG4gICAgICAgICAgICAgICAgLy9hbmQgYWRkIHRoZSByZXN0IHRvIHRoZSBub2RlXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkSGFzQ2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuSWRzLnB1c2goY2hpbGRyZW5bal0uZGJJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZnJhZ0lkcztcblxuICAgICAgICAvL2xlYWYgbm9kZVxuICAgICAgICBpZiAoZGJUb0ZyYWcpIHtcbiAgICAgICAgICAgIHZhciBmcmFncyA9IGRiVG9GcmFnW2RiSWRdO1xuICAgICAgICAgICAgaWYgKGZyYWdzICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgICAgICAgIC8vaWYgKGNoaWxkcmVuSWRzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAvLyAgICBjb25zb2xlLmVycm9yKFwiTm9kZSB0aGF0IGhhcyBib3RoIG5vZGUgY2hpbGRyZW4gYW5kIGZyYWdtZW50IGNoaWxkcmVuIVwiLCBub2RlLm5hbWUsIGNoaWxkcmVuLCBjaGlsZHJlbklkcywgZnJhZ3MpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZyYWdzKSlcbiAgICAgICAgICAgICAgICAgICAgZnJhZ0lkcyA9IFtmcmFnc107XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBmcmFnSWRzID0gZnJhZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL1VzZSBkZWZhdWx0IG5vZGUgZmxhZ3MgaW4gY2FzZSBub25lIGFyZSBzZXRcbiAgICAgICAgLy9UaGlzIGlzIG5vdCB0aGUgYmVzdCBwbGFjZSB0byBkbyB0aGlzLCBidXQgaXQnc1xuICAgICAgICAvL3RoZSBsYXN0IHBsYWNlIHdoZXJlIHdlIGNhbiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gXCJub3Qgc2V0XCIgYW5kIHplcm8uXG4gICAgICAgIHZhciBmbGFncyA9IG5vZGUuZmxhZ3MgfHwgMDtcbiAgICAgICAgaWYgKGZsYWdzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChmcmFnSWRzICYmIGZyYWdJZHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGZsYWdzID0gTk9ERV9UWVBFX0dFT01FVFJZO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRyZW5JZHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGZsYWdzID0gTk9ERV9UWVBFX0FTU0VNQkxZO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZsYWdzID0gMDsgLy8/Pz8gU2hvdWxkIG5vdCBoYXBwZW4gKHRob3NlIG5vZGVzIGFyZSBwcnVuZWQgYWJvdmUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgY2hpbGQgY291bnQgKG5vZGVzICsgZnJhZ21lbnRzKVxuICAgICAgICB2YXIgY2hpbGRDb3VudCA9IGNoaWxkcmVuSWRzLmxlbmd0aCArIChmcmFnSWRzID8gZnJhZ0lkcy5sZW5ndGggOiAwKTtcblxuICAgICAgICAvLyBTa2lwIG5vZGVzIHRoYXQgY29udGFpbiBuZWl0aGVyIGNoaWxkcmVuIG5vciBhbnkgZnJhZ21lbnRzXG4gICAgICAgIGlmIChjaGlsZENvdW50KSB7XG4gICAgICAgICAgICBub2RlU3RvcmFnZS5zZXROb2RlKGRiSWQsIHBhcmVudCwgbm9kZS5uYW1lLCBmbGFncywgY2hpbGRyZW5JZHMsIGZyYWdJZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkQ291bnQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgdGV4dCBzdHJpbmcsIHJldHVybnMgYW4gYXJyYXkgb2YgaW5kaXZpZHVhbCB3b3JkcyBzZXBhcmF0ZWQgYnlcbiAgICAgKiB3aGl0ZSBzcGFjZXMuXG4gICAgICogV2lsbCBwcmVzZXJ2ZSB3aGl0ZSBzcGFjaW5nIHdpdGhpbiBkb3VibGUgcXVvdGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRleHQgLSBUZXh0IHRvIHNlYXJjaFxuICAgICAqL1xuICAgIHRoaXMuZ2V0U2VhcmNoVGVybXMgPSBmdW5jdGlvbihzZWFyY2hUZXh0KSB7XG4gICAgICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vcmVnZXggcHJlc2VydmVzIGRvdWJsZS1xdW90ZSBkZWxpbWl0ZWQgc3RyaW5ncyBhcyBwaHJhc2VzXG4gICAgICAgIHZhciBzZWFyY2hUZXJtcyA9IHNlYXJjaFRleHQubWF0Y2goL1wiW15cIl0rXCJ8W15cXHNdKy9nKSB8fCBbXTtcbiAgICAgICAgdmFyIGkgPSBzZWFyY2hUZXJtcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zW2ldID0gc2VhcmNoVGVybXNbaV0ucmVwbGFjZSgvXCIvZywgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlYXJjaExpc3QgPSBbXTtcbiAgICAgICAgZm9yIChpPTA7IGk8c2VhcmNoVGVybXMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICAgICAgaWYgKHNlYXJjaFRlcm1zW2ldLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgc2VhcmNoTGlzdC5wdXNoKHNlYXJjaFRlcm1zW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VhcmNoTGlzdDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2VhcmNoZXMgdGhlIHByb3BlcnR5IGRhdGFiYXNlIGZvciBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWFyY2hUZXh0XG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZU5hbWVzXG4gICAgICogQHBhcmFtIHNlYXJjaE9wdGlvbnNcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBpZHMuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmJydXRlRm9yY2VTZWFyY2ggPSBmdW5jdGlvbihzZWFyY2hUZXh0LCBhdHRyaWJ1dGVOYW1lcywgc2VhcmNoT3B0aW9ucykge1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaExpc3QgPSB0aGlzLmdldFNlYXJjaFRlcm1zKHNlYXJjaFRleHQpO1xuICAgICAgICBpZiAoc2VhcmNoTGlzdC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gW107XG5cbiAgICAgICAgLy9Gb3IgZWFjaCBzZWFyY2ggd29yZCwgZmluZCBtYXRjaGluZyBJRHNcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblxuICAgICAgICBjb25zdCBzZWFyY2hIaWRkZW4gPSBzZWFyY2hPcHRpb25zPy5zZWFyY2hIaWRkZW47XG4gICAgICAgIGNvbnN0IGluY2x1ZGVJbmhlcml0ZWQgPSBzZWFyY2hPcHRpb25zPy5pbmNsdWRlSW5oZXJpdGVkO1xuICAgICAgICAvLyB7IHg6IFsgYSwgYiwgYyBdfSwgYSxiLGMgYXJlIGluc3RhbmNlcyBvZiB4XG4gICAgICAgIGNvbnN0IGluaGVyaXRhbmNlTWFwID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgaz0wOyBrPHNlYXJjaExpc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgLy9GaW5kIGFsbCB2YWx1ZXMgdGhhdCBtYXRjaCB0aGUgc2VhcmNoIHRleHRcbiAgICAgICAgICAgIHZhciBtYXRjaGluZ192YWxzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpPTAsIGlFbmQ9X3ZhbHVlc09mZnNldHMubGVuZ3RoOyBpPGlFbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQXQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKHZhbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hMaXN0W2tdKSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nX3ZhbHMucHVzaChpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoaW5nX3ZhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHZhbHVlcyBzaG91bGQgYmUgc29ydGVkIGF0IHRoaXMgcG9pbnQsIGJ1dCBpdCBkb2Vzbid0IGh1cnQgbWFraW5nIHN1cmUgdGhleSBhcmUuXG4gICAgICAgICAgICBtYXRjaGluZ192YWxzLnNvcnQoZnVuY3Rpb24oYSxiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSAtIGI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5lbnVtT2JqZWN0cyhmdW5jdGlvbihpZCkge1xuXG4gICAgICAgICAgICAgICAgX3RoaXMuZW51bU9iamVjdFByb3BlcnRpZXMoaWQsIGZ1bmN0aW9uKGF0dHJJZCwgdmFsSWQpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZUluaGVyaXRlZCAmJiBhdHRySWQgPT09IF9pbnN0YW5jZU9mQXR0cklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaWQgPSBwYXJzZUludChfdGhpcy5nZXRBdHRyVmFsdWUoYXR0cklkLCB2YWxJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGFuY2VNYXBbcGlkXSA9IGluaGVyaXRhbmNlTWFwW3BpZF0gfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0YW5jZU1hcFtwaWRdLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgaGlkZGVuIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0hpZGRlbiA9IF90aGlzLmF0dHJpYnV0ZUhpZGRlbihhdHRySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSGlkZGVuKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgaUZvdW5kID0gYmluYXJ5U2VhcmNoKG1hdGNoaW5nX3ZhbHMsIHZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlGb3VuZCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgYXR0cmlidXRlIG5hbWUgaW4gY2FzZSBhIHJlc3RyaWN0aW9uIGlzIHBhc3NlZCBpblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWVzICYmIGF0dHJpYnV0ZU5hbWVzLmxlbmd0aCAmJiBhdHRyaWJ1dGVOYW1lcy5pbmRleE9mKF9hdHRyc1thdHRySWRdWzBdKSA9PT0gLTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRJbmhlcml0ZWRJZHMgPSAoaWRzLCBpbmhlcml0YW5jZU1hcCkgPT4ge1xuICAgICAgICAgICAgLy8gdHJhdmVyc2UgaW5oZXJpdGFuY2UgYW5kIGFkZCB0byBpZHMgbGlzdFxuICAgICAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoaWRzKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCEoaWQgaW4gaW5oZXJpdGFuY2VNYXApKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaWRzID0gaW5oZXJpdGFuY2VNYXBbaWRdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2lkcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaWQgPSBjaWRzW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlZW4uaGFzKGNpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5wdXNoKGNpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuLmFkZChjaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKGluY2x1ZGVJbmhlcml0ZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRJbmhlcml0ZWRJZHMocmVzdWx0c1swXSwgaW5oZXJpdGFuY2VNYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvL0lmIGVhY2ggc2VhcmNoIHRlcm0gcmVzdWx0ZWQgaW4gaGl0cywgY29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBzZXRzXG4gICAgICAgIHZhciBtYXAgPSB7fTtcbiAgICAgICAgdmFyIGhpdHMgPSByZXN1bHRzWzBdO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8aGl0cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIG1hcFtoaXRzW2ldXSA9IDE7XG5cblxuICAgICAgICBmb3IgKGxldCBqPTE7IGo8cmVzdWx0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaGl0cyA9IHJlc3VsdHNbal07XG4gICAgICAgICAgICB2YXIgbWFwaW50ID0ge307XG5cbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxoaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcFtoaXRzW2ldXSA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgbWFwaW50W2hpdHNbaV1dID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWFwID0gbWFwaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGsgaW4gbWFwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChrKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5jbHVkZUluaGVyaXRlZCkge1xuICAgICAgICAgICAgYWRkSW5oZXJpdGVkSWRzKHJlc3VsdCwgaW5oZXJpdGFuY2VNYXApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHByb3BlcnR5IG5hbWUsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgaWRzIHRoYXQgY29udGFpbiBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUgLSBQcm9wZXJ0eSBuYW1lXG4gICAgICovXG4gICAgdGhpcy5icnV0ZUZvcmNlRmluZCA9IGZ1bmN0aW9uKHByb3BlcnR5TmFtZSkge1xuXG4gICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMuZW51bU9iamVjdHMoZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGlkQ29udGFpbnNQcm9wZXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgX3RoaXMuZW51bU9iamVjdFByb3BlcnRpZXMoaWQsIGZ1bmN0aW9uKGF0dHJJZCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBfYXR0cnNbYXR0cklkXTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBhdHRyWzBdO1xuICAgICAgICAgICAgICAgIHZhciBkaXNwbGF5TmFtZSA9IGF0dHJbNV07XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09IHByb3BlcnR5TmFtZSB8fCBkaXNwbGF5TmFtZSA9PT0gcHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlkQ29udGFpbnNQcm9wZXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaWRDb250YWluc1Byb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lhbGl6ZWQgZnVuY3Rpb24gdGhhdCByZXR1cm5zOlxuICAgICAqIHtcbiAgICAgKiAgICAnbGF5ZXItbmFtZS0xJzogW2lkMSwgaWQyLCAuLi4sIGlkTl0sXG4gICAgICogICAgJ2xheWVyLW5hbWUtMic6IFtpZFgsIGlkWSwgLi4uLCBpZFpdLFxuICAgICAqICAgIC4uLlxuICAgICAqIH1cbiAgICAgKi9cbiAgICB0aGlzLmdldExheWVyVG9Ob2RlSWRNYXBwaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFxuICAgICAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgICAgICB0aGlzLmVudW1PYmplY3RzKGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIF90aGlzLmVudW1PYmplY3RQcm9wZXJ0aWVzKGlkLCBmdW5jdGlvbihhdHRySWQsIHZhbElkKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXR0cklkICE9IF9sYXllcnNBdHRySWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBfdGhpcy5nZXRBdHRyVmFsdWUoYXR0cklkLCB2YWxJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHNbdmFsXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1t2YWxdID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNbdmFsXS5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBVbnBhY2tzIGFuIGF0dHJpYnV0ZSB2YWx1ZSBpbnRvIGFsbCBhdmFpbGFibGUgY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdHRySWQgLSBUaGUgYXR0cmlidXRlIGlkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge29iamVjdH0gY29udGFpbmluZyBgbmFtZWAsIGBjYXRlZ29yeWAsIGBkYXRhVHlwZWAsIGBkYXRhVHlwZUNvbnRleHRgLCBgZGVzY3JpcHRpb25gLCBgZGlzcGxheU5hbWVgIGFuZCBgZmxhZ3NgLlxuICAgICAqL1xuICAgIHRoaXMuZ2V0QXR0cmlidXRlRGVmID0gZnVuY3Rpb24oYXR0cklkKSB7XG4gICAgICAgIHZhciBfcmF3ID0gX2F0dHJzW2F0dHJJZF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvL2F0dHJOYW1lKDApLCBjYXRlZ29yeSgxKSwgZGF0YVR5cGUoMiksIGRhdGFUeXBlQ29udGV4dCgzKSwgZGVzY3JpcHRpb24oNCksIGRpc3BsYXlOYW1lKDUpLCBmbGFncyg2KSwgcHJlY2lzaW9uKDcpXG4gICAgICAgICAgICBuYW1lOl9yYXdbMF0sXG4gICAgICAgICAgICBjYXRlZ29yeTogX3Jhd1sxXSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBfcmF3WzJdLFxuICAgICAgICAgICAgZGF0YVR5cGVDb250ZXh0OiBfcmF3WzNdLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IF9yYXdbNF0sXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogX3Jhd1s1XSxcbiAgICAgICAgICAgIGZsYWdzOiBfcmF3WzZdLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiAoX3Jhdy5sZW5ndGggPiA3KSA/IF9yYXdbN10gOiAwXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBhdHRyaWJ1dGUtaWQgaW4gdGhlIG1vZGVsLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgICAgIHBkYi5lbnVtQXR0cmlidXRlcyhmdW5jdGlvbihhdHRySWQsIGF0dHJEZWYpIHtcbiAgICAgKiAgICAgICAgICAgLy8gYXR0ckRlZiBpcyBhbiBvYmplY3RcbiAgICAgKiAgICAgICAgICAgaWYgKGF0dHJEZWYubmFtZSA9PT0gJ25hbWUnKSB7XG4gICAgICogICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gcmV0dXJuIHRydWUgdG8gc3RvcCBpdGVyYXRpb24uXG4gICAgICogICAgICAgICAgIH1cbiAgICAgKiAgICAgIH0pXG4gICAgICogXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgLSBDYWxsYmFjayBpbnZva2VkXG4gICAgICovXG4gICAgdGhpcy5lbnVtQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgICAgIGZvciAodmFyIGk9MTsgaTxfYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYihpLCB0aGlzLmdldEF0dHJpYnV0ZURlZihpKSwgX2F0dHJzW2ldKSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH07XG5cblxuICAgIC8vU2VlIEFQSSBkb2MgZm9yIHRoaXMuZW51bU9iamVjdFByb3BlcnRpZXMgYmVsb3dcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZGJJZFxuICAgICAqIEBwYXJhbSBjYlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZW51bU9iamVjdFByb3BlcnRpZXNWMShkYklkLCBjYikge1xuICAgICAgICAvL1N0YXJ0IG9mZnNldCBvZiB0aGlzIG9iamVjdCdzIHByb3BlcnRpZXMgaW4gdGhlIEF0dHJpYnV0ZS1WYWx1ZXMgdGFibGVcbiAgICAgICAgbGV0IHByb3BTdGFydCA9IDIgKiBfb2Zmc2V0c1tkYklkXTtcblxuICAgICAgICAvL0VuZCBvZmZzZXQgb2YgdGhpcyBvYmplY3QncyBwcm9wZXJ0aWVzIGluIHRoZSBBdHRyaWJ1dGUtVmFsdWVzIHRhYmxlXG4gICAgICAgIGxldCBwcm9wRW5kID0gMiAqIF9vZmZzZXRzW2RiSWQrMV07XG5cbiAgICAgICAgLy9Mb29wIG92ZXIgdGhlIGF0dHJpYnV0ZSBpbmRleCAtIHZhbHVlIGluZGV4IHBhaXJzIGZvciB0aGUgb2JqZWN0c1xuICAgICAgICAvL2FuZCBmb3IgZWFjaCBvbmUgbG9vayB1cCB0aGUgYXR0cmlidXRlIGFuZCB0aGUgdmFsdWUgaW4gdGhlaXJcbiAgICAgICAgLy9yZXNwZWN0aXZlIGFycmF5cy5cbiAgICAgICAgZm9yIChsZXQgaT1wcm9wU3RhcnQ7IGk8cHJvcEVuZDsgaSs9Mikge1xuICAgICAgICAgICAgbGV0IGF0dHJJZCA9IF9hdnNbaV07XG4gICAgICAgICAgICBsZXQgdmFsSWQgPSBfYXZzW2krMV07XG5cbiAgICAgICAgICAgIGlmIChjYihhdHRySWQsIHZhbElkKSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vU2VlIEFQSSBkb2MgZm9yIHRoaXMuZW51bU9iamVjdFByb3BlcnRpZXMgYmVsb3dcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZGJJZFxuICAgICAqIEBwYXJhbSBjYlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZW51bU9iamVjdFByb3BlcnRpZXNWMihkYklkLCBjYikge1xuICAgICAgICAvL3YyIHZhcmlhYmxlIGxlbmd0aCBlbmNvZGluZy4gT2Zmc2V0cyBwb2ludCBpbnRvIGRlbHRhK3ZhcmludCBlbmNvZGVkIGEtdiBwYWlycyBwZXIgb2JqZWN0XG4gICAgICAgIGxldCBvZmZzZXQgPSBfb2Zmc2V0c1tkYklkXTtcbiAgICAgICAgbGV0IHByb3BFbmQgPSBfb2Zmc2V0c1tkYklkKzFdO1xuICAgICAgICBsZXQgYnVmID0gX2F2cztcblxuICAgICAgICBsZXQgYSA9IDA7XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBwcm9wRW5kKSB7XG5cbiAgICAgICAgICAgIC8vSW5saW5lZCB2ZXJzaW9uIG9mIHJlYWRWYXJpbnRcbiAgICAgICAgICAgIGxldCBiID0gYnVmW29mZnNldCsrXTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGIgJiAweDdmO1xuICAgICAgICAgICAgbGV0IHNoaWZ0QnkgPSA3O1xuICAgICAgICAgICAgd2hpbGUgKGIgJiAweDgwKSB7XG4gICAgICAgICAgICAgICAgYiA9IGJ1ZltvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgdmFsdWUgfD0gKGIgJiAweDdmKSA8PCBzaGlmdEJ5O1xuICAgICAgICAgICAgICAgIHNoaWZ0QnkgKz0gNztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9hdHRyaWJ1dGUgSUQgaXMgZGVsdGEgZW5jb2RlZCBmcm9tIHRoZSBwcmV2aW91c2x5IHNlZW4gYXR0cmlidXRlIElELCBhZGQgdGhhdCBiYWNrIGluXG4gICAgICAgICAgICBhICs9IHZhbHVlO1xuXG4gICAgICAgICAgICAvL0lubGluZWQgdmVyc2lvbiBvZiByZWFkVmFyaW50XG4gICAgICAgICAgICBiID0gYnVmW29mZnNldCsrXTtcbiAgICAgICAgICAgIHZhbHVlID0gYiAmIDB4N2Y7XG4gICAgICAgICAgICBzaGlmdEJ5ID0gNztcbiAgICAgICAgICAgIHdoaWxlIChiICYgMHg4MCkge1xuICAgICAgICAgICAgICAgIGIgPSBidWZbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgIHZhbHVlIHw9IChiICYgMHg3ZikgPDwgc2hpZnRCeTtcbiAgICAgICAgICAgICAgICBzaGlmdEJ5ICs9IDc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjYihhLCB2YWx1ZSkpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGFsbCBwcm9wZXJ0aWVzIGZvciBhIGdpdmVuIGRhdGFiYXNlIGlkIGFuZCBpbnZva2VzIHRoZSBzdXBwbGllZCBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYklkIC0gVGhlIGF0dHJpYnV0ZSBpZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYiAtIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGF0IHJlY2VpdmVzIDIgYXJndW1lbnRzOiBhdHRyaWJ1dGUtaWQgKGBhdHRySWRgKSBhbmQgdmFsdWUtaWQgKGB2YWxJZGApLiBIYXZlIHRoZSBmdW5jdGlvbiByZXR1cm4gYHRydWVgIHRvIGFib3J0IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuZW51bU9iamVjdFByb3BlcnRpZXMgPSBfaXNWYXJpbnQgPyBlbnVtT2JqZWN0UHJvcGVydGllc1YyIDogZW51bU9iamVjdFByb3BlcnRpZXNWMTtcblxuXG4gICAgbGV0IF9pbnN0YW5jZU9mQ2FjaGUgPSB7fTtcblxuICAgIC8vU2VlIEFQSSBkb2N1bWVudGF0aW9uIGluIHRoaXMuZ2V0UHJvcGVydGllc1N1YnNldFdpdGhJbmhlcml0YW5jZSBiZWxvd1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBkYklkXG4gICAgICogQHBhcmFtIGRlc2lyZWRBdHRySWRzXG4gICAgICogQHBhcmFtIGRzdFZhbElkc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0UHJvcGVydGllc1N1YnNldFdpdGhJbmhlcml0YW5jZVYxKGRiSWQsIGRlc2lyZWRBdHRySWRzLCBkc3RWYWxJZHMpIHtcblxuICAgICAgICAvL1N0YXJ0IG9mZnNldCBvZiB0aGlzIG9iamVjdCdzIHByb3BlcnRpZXMgaW4gdGhlIEF0dHJpYnV0ZS1WYWx1ZXMgdGFibGVcbiAgICAgICAgbGV0IHByb3BTdGFydCA9IDIgKiBfb2Zmc2V0c1tkYklkXTtcblxuICAgICAgICAvL0VuZCBvZmZzZXQgb2YgdGhpcyBvYmplY3QncyBwcm9wZXJ0aWVzIGluIHRoZSBBdHRyaWJ1dGUtVmFsdWVzIHRhYmxlXG4gICAgICAgIGxldCBwcm9wRW5kID0gMiAqIF9vZmZzZXRzW2RiSWQrMV07XG5cbiAgICAgICAgbGV0IHJlcyA9IFtdO1xuICAgICAgICBsZXQgaW5zdGFuY2VPZlZhbHMgPSBbXTtcbiAgICAgICAgZHN0VmFsSWRzID0gZHN0VmFsSWRzIHx8IHt9O1xuXG4gICAgICAgIC8vTG9vcCBvdmVyIHRoZSBhdHRyaWJ1dGUgaW5kZXggLSB2YWx1ZSBpbmRleCBwYWlycyBmb3IgdGhlIG9iamVjdHNcbiAgICAgICAgLy9hbmQgZm9yIGVhY2ggb25lIGxvb2sgdXAgdGhlIGF0dHJpYnV0ZSBhbmQgdGhlIHZhbHVlIGluIHRoZWlyXG4gICAgICAgIC8vcmVzcGVjdGl2ZSBhcnJheXMuXG4gICAgICAgIGZvciAobGV0IGk9cHJvcFN0YXJ0OyBpPHByb3BFbmQ7IGkrPTIpIHtcbiAgICAgICAgICAgIGxldCBhID0gX2F2c1tpXTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IF9hdnNbaSsxXTtcblxuICAgICAgICAgICAgaWYgKGEgPT09IF9pbnN0YW5jZU9mQXR0cklkKSB7XG4gICAgICAgICAgICAgICAgLy9yZW1lbWJlciBpbnN0YW5jZW9mIGluaGVyaXRhbmNlIGZvciBsYXRlclxuICAgICAgICAgICAgICAgIGxldCBpb2ZEYklkID0gX3RoaXMuZ2V0QXR0clZhbHVlKGEsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU9mVmFscy5wdXNoKGlvZkRiSWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRlc2lyZWRBdHRySWRzIHx8IGRlc2lyZWRBdHRySWRzW2FdKSB7XG4gICAgICAgICAgICAgICAgICAgIGRzdFZhbElkc1thXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChhKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vUmVhbGx5LCB3ZSBvbmx5IGV4cGVjdCBvbmUgaW5zdGFuY2VvZiBpbmhlcml0YW5jZSwgYnV0XG4gICAgICAgIC8vaXQncyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHRvIGhhdmUgc2V2ZXJhbFxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8aW5zdGFuY2VPZlZhbHMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICAgICAgbGV0IGlvZkRiSWQgPSBpbnN0YW5jZU9mVmFsc1tpXTtcblxuICAgICAgICAgICAgbGV0IGNhY2hlZCA9IF9pbnN0YW5jZU9mQ2FjaGVbaW9mRGJJZF07XG4gICAgICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgICAgICBfaW5zdGFuY2VPZkNhY2hlW2lvZkRiSWRdID0gY2FjaGVkID0gZ2V0UHJvcGVydGllc1N1YnNldFdpdGhJbmhlcml0YW5jZVYyKGlvZkRiSWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8Y2FjaGVkLmxlbmd0aDsgais9Mikge1xuICAgICAgICAgICAgICAgIGxldCBhID0gY2FjaGVkW2pdO1xuICAgICAgICAgICAgICAgIGxldCB2ID0gY2FjaGVkW2orMV07XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVzaXJlZEF0dHJJZHMgJiYgIWRlc2lyZWRBdHRySWRzW2FdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghZHN0VmFsSWRzW2FdICYmICFfdGhpcy5hdHRyaWJ1dGVIaWRkZW4oYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZHN0VmFsSWRzW2FdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goYSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKHYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy9TZWUgQVBJIGRvY3VtZW50YXRpb24gaW4gdGhpcy5nZXRQcm9wZXJ0aWVzU3Vic2V0V2l0aEluaGVyaXRhbmNlIGJlbG93XG4gICAgLyoqXG4gICAgICogQHBhcmFtIGRiSWRcbiAgICAgKiBAcGFyYW0gZGVzaXJlZEF0dHJJZHNcbiAgICAgKiBAcGFyYW0gZHN0VmFsSWRzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQcm9wZXJ0aWVzU3Vic2V0V2l0aEluaGVyaXRhbmNlVjIoZGJJZCwgZGVzaXJlZEF0dHJJZHMsIGRzdFZhbElkcykge1xuXG4gICAgICAgIC8vdjIgdmFyaWFibGUgbGVuZ3RoIGVuY29kaW5nLiBPZmZzZXRzIHBvaW50IGludG8gZGVsdGErdmFyaW50IGVuY29kZWQgYS12IHBhaXJzIHBlciBvYmplY3RcbiAgICAgICAgbGV0IG9mZnNldCA9IF9vZmZzZXRzW2RiSWRdO1xuICAgICAgICBsZXQgcHJvcEVuZCA9IF9vZmZzZXRzW2RiSWQrMV07XG4gICAgICAgIGxldCBidWYgPSBfYXZzO1xuXG4gICAgICAgIGxldCByZXMgPSBbXTtcbiAgICAgICAgbGV0IGluc3RhbmNlT2ZWYWxzID0gW107XG4gICAgICAgIGRzdFZhbElkcyA9IGRzdFZhbElkcyB8fCB7fTtcblxuICAgICAgICBsZXQgYSA9IDA7XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBwcm9wRW5kKSB7XG5cbiAgICAgICAgICAgIGxldCBiID0gYnVmW29mZnNldCsrXTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGIgJiAweDdmO1xuICAgICAgICAgICAgbGV0IHNoaWZ0QnkgPSA3O1xuICAgICAgICAgICAgd2hpbGUgKGIgJiAweDgwKSB7XG4gICAgICAgICAgICAgICAgYiA9IGJ1ZltvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgdmFsdWUgfD0gKGIgJiAweDdmKSA8PCBzaGlmdEJ5O1xuICAgICAgICAgICAgICAgIHNoaWZ0QnkgKz0gNztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9hdHRyaWJ1dGUgSUQgaXMgZGVsdGEgZW5jb2RlZCBmcm9tIHRoZSBwcmV2aW91c2x5IHNlZW4gYXR0cmlidXRlIElELCBhZGQgdGhhdCBiYWNrIGluXG4gICAgICAgICAgICBhICs9IHZhbHVlO1xuXG4gICAgICAgICAgICBiID0gYnVmW29mZnNldCsrXTtcbiAgICAgICAgICAgIHZhbHVlID0gYiAmIDB4N2Y7XG4gICAgICAgICAgICBzaGlmdEJ5ID0gNztcbiAgICAgICAgICAgIHdoaWxlIChiICYgMHg4MCkge1xuICAgICAgICAgICAgICAgIGIgPSBidWZbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgIHZhbHVlIHw9IChiICYgMHg3ZikgPDwgc2hpZnRCeTtcbiAgICAgICAgICAgICAgICBzaGlmdEJ5ICs9IDc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhID09PSBfaW5zdGFuY2VPZkF0dHJJZCkge1xuICAgICAgICAgICAgICAgIC8vcmVtZW1iZXIgaW5zdGFuY2VvZiBpbmhlcml0YW5jZSBmb3IgbGF0ZXJcbiAgICAgICAgICAgICAgICBsZXQgaW9mRGJJZCA9IF90aGlzLmdldEF0dHJWYWx1ZShhLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VPZlZhbHMucHVzaChpb2ZEYklkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkZXNpcmVkQXR0cklkcyB8fCBkZXNpcmVkQXR0cklkc1thXSkge1xuICAgICAgICAgICAgICAgICAgICBkc3RWYWxJZHNbYV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goYSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL1JlYWxseSwgd2Ugb25seSBleHBlY3Qgb25lIGluc3RhbmNlb2YgaW5oZXJpdGFuY2UsIGJ1dFxuICAgICAgICAvL2l0J3MgdGhlb3JldGljYWxseSBwb3NzaWJsZSB0byBoYXZlIHNldmVyYWxcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGluc3RhbmNlT2ZWYWxzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgIGxldCBpb2ZEYklkID0gaW5zdGFuY2VPZlZhbHNbaV07XG5cbiAgICAgICAgICAgIGxldCBjYWNoZWQgPSBfaW5zdGFuY2VPZkNhY2hlW2lvZkRiSWRdO1xuICAgICAgICAgICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgX2luc3RhbmNlT2ZDYWNoZVtpb2ZEYklkXSA9IGNhY2hlZCA9IGdldFByb3BlcnRpZXNTdWJzZXRXaXRoSW5oZXJpdGFuY2VWMihpb2ZEYklkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaj0wOyBqPGNhY2hlZC5sZW5ndGg7IGorPTIpIHtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGNhY2hlZFtqXTtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGNhY2hlZFtqKzFdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlc2lyZWRBdHRySWRzICYmICFkZXNpcmVkQXR0cklkc1thXSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRzdFZhbElkc1thXSAmJiAhX3RoaXMuYXR0cmlidXRlSGlkZGVuKGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRzdFZhbElkc1thXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGEpO1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xufVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYW4gb2JqZWN0IElELCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIElEcyBmb3IgdGhlIGdpdmVuIGxpc3Qgb2YgYXR0cmlidXRlIElkcy5cbiAgICAgKiBUYWtlcyBpbnRvIGFjY291bnQgaW5zdGFuY2Vfb2YgaW5oZXJpdGFuY2Ugb2YgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYklkIC0gSW50ZWdlciBpbnB1dCBvYmplY3QgSURcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGVzaXJlZEF0dHJJZHMgLSBBbiBvcHRpb25hbCBtYXAgb2YgdGhlIHJlcXVlc3RlZCBhdHRyaWJ1dGUgSWRzLCB3aGVyZSBkZXNpcmVkQXR0cklkc1thdHRySWRdIGlzIFwidHJ1dGh5XCIuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCBhbGwgcHJvcGVydGllcyB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkc3RWYWxJZHMgLSBBIHN0b3JhZ2UgdGFyZ2V0IG1hcCwgc3VjaCB0aGF0IGRzdFZhbElkc1thdHRySWRdIHdpbGwgYmUgdGhlIHJlc3VsdGluZyB2YWx1ZSBJRC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gemVybyBpbml0aWFsaXplIHRoaXMgbWFwLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcltdfSAtIEEgZmxhdCBsaXN0IG9mIGludGVnZXJzIGF0dHJpYnV0ZUlkIC0gdmFsdWVJZCBwYWlycy4gVGhpcyBpcyBpbiBhZGRpdGlvbiB0byB0aGUgZHN0VmFsSWRzLCBmb3IgY2FzZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBvYmplY3QgaGFzIG11dGxpcGxlIHByb3BlcnRpZXMgb2YgdGhlIHNhbWUgdHlwZSwgZS5nLiBjaGlsZHJlbiwgX192aWV3YWJsZV9pbl9fLCBldGMuXG4gICAgICovXG4gICAgdGhpcy5nZXRQcm9wZXJ0aWVzU3Vic2V0V2l0aEluaGVyaXRhbmNlID0gX2lzVmFyaW50ID8gZ2V0UHJvcGVydGllc1N1YnNldFdpdGhJbmhlcml0YW5jZVYyIDogZ2V0UHJvcGVydGllc1N1YnNldFdpdGhJbmhlcml0YW5jZVYxO1xuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciB0aGUgcHJvcGVydHkgZGF0YWJhc2UgYW5kIGZpbmRzIGFsbCBsYXllcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuZmluZExheWVycyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIC8vIFNhbWUgZm9ybWF0IGFzIEYyZC5qczo6Y3JlYXRlTGF5ZXJHcm91cHMoKVxuICAgICAgICB2YXIgcmV0ID0geyBuYW1lOiAncm9vdCcsIGlkOiAxLCBpbmRleDogMSwgIGNoaWxkcmVuOiBbXSwgaXNMYXllcjogZmFsc2UsIGNoaWxkQ291bnQ6IDAgfTtcblxuICAgICAgICAvLyBSZXR1cm4gZWFybHkgd2hlbiBubyBMYXllciBhdHRyaWJ1dGUgaXMgcHJlc2VudFxuICAgICAgICBpZiAoX2xheWVyc0F0dHJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR3JhYiBhbGwgTGF5ZXIgbmFtZXNcbiAgICAgICAgdmFyIGxheWVycyA9IFtdO1xuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuICAgICAgICB0aGlzLmVudW1PYmplY3RzKGZ1bmN0aW9uKGRiSWQpIHtcbiAgICAgICAgICAgIHNjb3BlLmVudW1PYmplY3RQcm9wZXJ0aWVzKGRiSWQsIGZ1bmN0aW9uKGF0dHJJZCwgdmFsSWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0cklkID09PSBfbGF5ZXJzQXR0cklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXllck5hbWUgPSBzY29wZS5nZXRWYWx1ZUF0KHZhbElkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyTmFtZSAmJiBsYXllcnMuaW5kZXhPZihsYXllck5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzLnB1c2gobGF5ZXJOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCB3aGF0IHdlIHdhbnRlZCA9PiBza2lwIHJlbWFpbmluZyBhdHRyaWJzIGZvciB0aGlzIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGF5ZXJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYiwgdW5kZWZpbmVkLCB7c2Vuc2l0aXZpdHk6ICdiYXNlJywgbnVtZXJpYzogdHJ1ZX0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBGb3JtYXQgb3V0cHV0IHRvIG1hdGNoIEYyZC5qczo6Y3JlYXRlTGF5ZXJHcm91cHMoKVxuICAgICAgICByZXQuY2hpbGRDb3VudCA9IGxheWVycy5sZW5ndGg7XG4gICAgICAgIHJldC5jaGlsZHJlbiA9IGxheWVycy5tYXAoZnVuY3Rpb24obGF5ZXJOYW1lLCBpbmRleCl7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGxheWVyTmFtZSxcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgrMSxcbiAgICAgICAgICAgICAgICBpZDogaW5kZXgrMSxcbiAgICAgICAgICAgICAgICBpc0xheWVyOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGFsbCBkYXRhYmFzZSBpZHMgYW5kIGludm9rZXMgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiIC0gY2FsbGJhY2sgZnVuY3Rpb24uIFJlY2VpdmVzIGEgc2luZ2xlIHBhcmFtZXRlcjogdGhlIGRhdGFiYXNlLWlkLiBIYXZlIHRoZSBmdW5jdGlvbiByZXR1cm4gdHJ1ZSB0byBhYm9ydCBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JZCAtIHN0YXJ0aW5nIGlkIChpbmNsdXNpdmUpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvSWQgLSBlbmQgaWQgKGV4Y2x1c2l2ZSlcbiAgICAgKlxuICAgICAqL1xuICAgIHRoaXMuZW51bU9iamVjdHMgPSBmdW5jdGlvbihjYiwgZnJvbUlkLCB0b0lkKSB7XG5cbiAgICAgICAgLy8gRm9yIGEgZ2l2ZW4gaWQsIHRoZSByYW5nZSBpbiBfYXZzIGlzIHNwZWNpZmllZCBieSBbb2Zmc2V0c1tpZF0sIF9vZmZzZXRzW2lkKzFdXS5cbiAgICAgICAgLy8gVGhlIGxhc3QgZWxlbWVudCBpbiBfb2Zmc2V0cyBpcyBqdXN0IHRoZSByYW5nZSBlbmQgb2YgdGhlIGZpbmFsIHJhbmdlLlxuICAgICAgICB2YXIgaWRDb3VudCA9IF9vZmZzZXRzLmxlbmd0aCAtIDE7IC8vPT0gdGhpcy5nZXRPYmplY3RDb3VudCgpXG5cbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tSWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGZyb21JZCA9IE1hdGgubWF4KGZyb21JZCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tSWQgPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0b0lkID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b0lkID0gTWF0aC5taW4oaWRDb3VudCwgdG9JZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0lkID0gaWRDb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGlkPWZyb21JZDsgaWQ8dG9JZDsgaWQrKykge1xuICAgICAgICAgICAgaWYgKGNiKGlkKSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmdldEF0dHJDaGlsZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2NoaWxkQXR0cklkO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEF0dHJQYXJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRBdHRySWQ7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0QXR0ck5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9uYW1lQXR0cklkO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEF0dHJMYXllcnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9sYXllcnNBdHRySWQ7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0QXR0ckluc3RhbmNlT2YgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9pbnN0YW5jZU9mQXR0cklkO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEF0dHJWaWV3YWJsZUluID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfdmlld2FibGVJbkF0dHJJZDtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRBdHRyWHJlZiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2V4dGVybmFsUmVmQXR0cklkO1xuICAgIH07XG5cbiAgICB0aGlzLmdldEF0dHJOb2RlRmxhZ3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9ub2RlRmxhZ3NBdHRySWQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIGFuIGF0dHJpYnV0ZSBpcyBoaWRkZW4gb3Igbm90LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGF0dHJJZCAtIFRoZSBhdHRyaWJ1dGUgaWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgYSBoaWRkZW4gb25lLlxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlSGlkZGVuID0gZnVuY3Rpb24oYXR0cklkKSB7XG4gICAgICAgIHZhciBfcmF3ID0gX2F0dHJzW2F0dHJJZF07XG4gICAgICAgIHZhciBmbGFncyA9IF9yYXdbNl07XG5cbiAgICAgICAgcmV0dXJuIChmbGFncyAmIDEgLyphZkhpZGRlbiovKVxuICAgICAgICAgICAgfHwgYXR0cklkID09IF9wYXJlbnRBdHRySWRcbiAgICAgICAgICAgIHx8IGF0dHJJZCA9PSBfY2hpbGRBdHRySWRcbiAgICAgICAgICAgIHx8IGF0dHJJZCA9PSBfdmlld2FibGVJbkF0dHJJZFxuICAgICAgICAgICAgfHwgYXR0cklkID09IF9leHRlcm5hbFJlZkF0dHJJZDtcbiAgICB9O1xuXG4gICAgdGhpcy5fYXR0cmlidXRlSXNCbGFja2xpc3RlZCA9IGZ1bmN0aW9uKGF0dHJJZCkge1xuICAgICAgICB2YXIgX3JhdyA9IF9hdHRyc1thdHRySWRdO1xuICAgICAgICB2YXIgbmFtZSA9IF9yYXdbMF07XG4gICAgICAgIHZhciBjYXRlZ29yeSA9IF9yYXdbMV07XG5cbiAgICAgICAgLy8gSUZDL05XRCBmaWxlcyBjb250YWlucyBhIOKAnFNvdXJjZSBGaWxl4oCdIHByb3BlcnR5IHdoaWNoIGlzIHR5cGljYWxseVxuICAgICAgICAvLyBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgdHdvIHZlcnNpb25zIGFuZCBjYXVzZSBEaWZmVG9vbCB0byByZXR1cm4gbm9pc3kgZGlmZi5cbiAgICAgICAgLy8gSWdub3JlIGl0IGZvciBkaWZmIGNhbGN1bGF0aW9uLiBcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChJRkNfTldEX0lURU1fUFJPUFNfQkxBQ0tMSVNURUQsIGNhdGVnb3J5KSAmJiBJRkNfTldEX0lURU1fUFJPUFNfQkxBQ0tMSVNURURbY2F0ZWdvcnldLmluZGV4T2YobmFtZSkgIT09IC0xKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy9EaW1lbnNpb24gcHJvcGVydGllcyB3ZXJlIGFkZGVkIGF0IGEgbGF0ZXIgdGltZSwgc29cbiAgICAgICAgLy9zb21lIGRpZmZzIHdpbGwgZmFpbCB3aGVuIGNvbXBhcmluZyBhIGZpbGUgd2l0aCB2cy4gZmlsZSB3aXRob3V0IHRob3NlLlxuICAgICAgICAvL0FueXdheSwgaXQncyBiZXRlciB0byBza2lwIHRob3NlIGZvciBkaWZmIHB1cnBvc2VzLCBzaW5jZSB0aGV5IGNhbiBoYXZlIG51bWVyaWNcbiAgICAgICAgLy9ub2lzZSBhbmQgcmVzdWx0IGluIHNwdXJpb3VzIGRpZmZzLlxuICAgICAgICAvL1NlZSBhbHNvOiBodHRwczovL2dpdC5hdXRvZGVzay5jb20vZmx1ZW50L21vZGVsZGIvY29tbWl0LzU4NGQzOWQ1Zjg1YThkMjk1NGRhNTU3ODU5YmI1MmMyMjRjNDAyYWZcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSVlRfRElNX1BST1BTX0JMQUNLTElTVEVELCBjYXRlZ29yeSkgJiYgUlZUX0RJTV9QUk9QU19CTEFDS0xJU1RFRFtjYXRlZ29yeV0uaW5kZXhPZihuYW1lKSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBleGNsdWRlZCBmcm9tIERpZmYgY29tcGFyaXNvbi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydHlGaWx0ZXIgLSBBIGtleS12YWx1ZSBwYWlyIG9mIGNhdGVnb3J5IGFuZCBwcm9wZXJ0eSBuYW1lcyB0byBpZ25vcmUgZnJvbSBEaWZmXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGF0dHJJZCAtIFRoZSBhdHRyaWJ1dGUgaWQuXG4gICAgICovXG4gICAgdGhpcy5faWdub3JlQXR0cmlidXRlID0gZnVuY3Rpb24ocHJvcGVydHlGaWx0ZXIgLCBhdHRySWQpe1xuICAgICAgICB2YXIgX3JhdyA9IF9hdHRyc1thdHRySWRdO1xuICAgICAgICB2YXIgbmFtZSA9IF9yYXdbMF07XG4gICAgICAgIHZhciBjYXRlZ29yeSA9IF9yYXdbMV07XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnR5RmlsdGVyW2NhdGVnb3J5XSAmJiBwcm9wZXJ0eUZpbHRlcltjYXRlZ29yeV0uaGFzKG5hbWUpO1xuICAgIH07XG5cbiAgICAvLyBSZXR1cm5zIHBhcmVudCBpZCBvZiBkYklkIG9yIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4gXG4gICAgdGhpcy5maW5kUGFyZW50ID0gZnVuY3Rpb24oZGJJZCkge1xuXG4gICAgICAgIGxldCBwYXJlbnQgPSBudWxsO1xuICAgICAgICBfdGhpcy5lbnVtT2JqZWN0UHJvcGVydGllcyhkYklkLCBmdW5jdGlvbihhdHRySWQsIHZhbElkKSB7XG4gICAgICAgICAgICBpZiAoYXR0cklkID09PSBfcGFyZW50QXR0cklkKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50ID0gX3RoaXMuZ2V0QXR0clZhbHVlKGF0dHJJZCwgdmFsSWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBfZmluZERpZmZlcmVuY2VzLlxuICAgIC8vIEZpbmRzIGFsbCBhdHRyaWJ1dGVJZHMgYW5kIHZhbHVlSWRzIC0gaW5jbHVkaW5nIGluaGVyaXRlZCBvbmVzLlxuICAgIC8vIFJlc3VsdHMgYXJlIHB1c2hlZCB0byAncmVzdWx0JyBhcnJheSBhcyBvYmplY3RzIHsgYXR0cklkLCB2YWxJZCB9LlxuICAgIC8vIEhpZGRlbiBhdHRyaWJ1dGVzIGFyZSBleGNsdWRlZC5cbiAgICB0aGlzLl9nZXRBdHRyaWJ1dGVBbmRWYWx1ZUlkcyA9IGZ1bmN0aW9uKGRiSWQsIHJlc3VsdCwgcHJvcGVydHlGaWx0ZXIpIHtcblxuICAgICAgICBsZXQgYXZMaXN0ID0gdGhpcy5nZXRQcm9wZXJ0aWVzU3Vic2V0V2l0aEluaGVyaXRhbmNlKGRiSWQpO1xuICAgICAgICBsZXQgaWdub3JlUHJvcGVydHlGbGFnID0gcHJvcGVydHlGaWx0ZXIgJiYgT2JqZWN0LmtleXMocHJvcGVydHlGaWx0ZXIpLmxlbmd0aCA+PTE7IFxuXG4gICAgICAgIC8vQ29udmVydCByZXN1bHQgdG8gYXJyYXkgYW5kIHNvcnQgYnkgYXR0cklkIHNvIGRpZmYgY2FuIHdvcmsuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxhdkxpc3QubGVuZ3RoOyBpKz0yKSB7XG4gICAgICAgICAgICBsZXQgYSA9IGF2TGlzdFtpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2F0dHJpYnV0ZUlzQmxhY2tsaXN0ZWQoYSkgfHwgdGhpcy5hdHRyaWJ1dGVIaWRkZW4oYSkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIEV4Y2x1ZGUgdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyBmcm9tIGRpZmZcbiAgICAgICAgICAgIGlmIChpZ25vcmVQcm9wZXJ0eUZsYWcgJiYgdGhpcy5faWdub3JlQXR0cmlidXRlKHByb3BlcnR5RmlsdGVyLCBhKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBhdHRySWQ6IGEsXG4gICAgICAgICAgICAgICAgICAgIHZhbElkOiBhdkxpc3RbaSsxXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQuc29ydChmdW5jdGlvbiBieUluY0F0cmliSWQoYSxiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5hdHRySWQgLSBiLmF0dHJJZDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qIEZpbmRzIGFsbCBjb21tb24gZGJJZHMgb2YgdGhpcyBhbmQgYW5vdGhlciBkYiBmb3Igd2hpY2ggdGhlIHByb3BlcnRpZXMgYXJlIG5vdCBpZGVudGljYWwuXG4gICAgICogSGlkZGVuIGF0dHJpYnV0ZXMgYXJlIGV4Y2x1ZGVkLlxuICAgICAqICBAcGFyYW0ge1Byb3BlcnR5RGF0YWJhc2V9IGRiVG9Db21wYXJlXG4gICAgICogIEBwYXJhbSB7T2JqZWN0fSBbRGlmZk9wdGlvbnNdIGRpZmZPcHRpb25zIFxuICAgICAqICBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlcil9IFtvblByb2dyZXNzXSBnZXRzIHByb2dyZXNzIHZhbHVlcyBpbiBwZXJjZW50XG4gICAgICogIEByZXR1cm5zIHtPYmplY3R9IFxuICAgICAqIFNlZSBQcm9wRGJMb2FkZXIuZGlmZlByb3BlcnRpZXMgZm9yIGRldGFpbHMgYWJvdXQgZGlmZk9wdGlvbnMgYW5kIHJldHVybiB2YWx1ZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IEN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBPdGcgbW9kZWxzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLmZpbmREaWZmZXJlbmNlcyA9IGZ1bmN0aW9uKGRiVG9Db21wYXJlLCBkaWZmT3B0aW9ucywgb25Qcm9ncmVzcykge1xuXG4gICAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgICAgICBjaGFuZ2VkSWRzOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIE9wdGlvbmFsOiBSZXN0cmljdCBzZWFyY2ggdG8gdGhlIGdpdmVuIGlkc1xuICAgICAgICB2YXIgZGJJZHMgPSBkaWZmT3B0aW9ucyAmJiBkaWZmT3B0aW9ucy5kYklkcztcblxuICAgICAgICAvLyBPcHRpb25hbDogQ29sbGVjdCBkZXRhaWxzIGFib3V0IHdoaWNoIHByb3BzIGhhdmUgY2hhbmdlZFxuICAgICAgICB2YXIgbGlzdFByb3BDaGFuZ2VzID0gZGlmZk9wdGlvbnMgJiYgZGlmZk9wdGlvbnMubGlzdFByb3BDaGFuZ2VzO1xuICAgICAgICBpZiAobGlzdFByb3BDaGFuZ2VzKSB7XG4gICAgICAgICAgICByZXN1bHQucHJvcENoYW5nZXMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vT3B0aW9uYWwgOiBDb2xsZWN0IHVzZXItc3BlY2lmaWVkIHByb3BlcnRpZXMgdG8gaWdub3JlIGZvciBkaWZmXG4gICAgICAgIGxldCBwcm9wZXJ0eUZpbHRlciA9IGRpZmZPcHRpb25zICYmIGRpZmZPcHRpb25zLnByb3BlcnR5RmlsdGVyIHx8IHt9O1xuXG4gICAgICAgIHZhciBkYjEgPSB0aGlzO1xuICAgICAgICB2YXIgZGIyID0gZGJUb0NvbXBhcmU7XG5cbiAgICAgICAgLy8gUmV1c2VkIGFycmF5IG9mIHsgYXR0cklkLCB2YWxJZCB9IHBhaXJzLlxuICAgICAgICB2YXIgcHJvcElkczEgPSBbXTtcbiAgICAgICAgdmFyIHByb3BJZHMyID0gW107XG4gICAgICAgIFxuICAgICAgICAvLyBUbyBzdXBwb3J0IGluc3RhbmNlT2YgYXR0cmlidXRlcywgd2UgbmVlZCB0byByZWN1cnNpdmVseSBjaGVjayBwYXJlbnQgYXR0cmlidXRlcy92YWx1ZXMgdG9vLiAoc2VlIGdldEF0dHJpYnV0ZXNBbmRWYWx1ZXMpXG4gICAgICAgIC8vIFNpbmNlIHRoZSBwYXJlbnQgb2Ygc3Vic2VxdWVudCBkYklkIGlzIG9mdGVuIHRoZSBzYW1lLCB3ZSBjYWNoZSB0aGUgcGFyZW50IGF0dHJpYnMvdmFsdWVzIHRoYXQgd2UgZ290IGZyb20gbGFzdCBjYWxsLlxuICAgICAgICAvLyBUaGlzIGF2b2lkcyB0byBkbyB0aGUgc2FtZSBjaGVjayBzZXZlcmFsIHRpbWVzIGFuZCBjYW4gbWFrZSBkaWZmIHNpZ25pZmljYW50bHkgZmFzdGVyLlxuICAgICAgICB2YXIgY2FjaGVkUGFyZW50QXR0cmliczEgPSB7IHJlc3VsdDogW10sIGRiSWQ6IC0xIH07XG4gICAgICAgIHZhciBjYWNoZWRQYXJlbnRBdHRyaWJzMiA9IHsgcmVzdWx0OiBbXSwgZGJJZDogLTEgfTsgICAgICAgIFxuICAgICAgICBcbiAgICAgICAgdmFyIGRpZmZPYmplY3QgPSBmdW5jdGlvbihkYklkKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdldCBzb3J0ZWQgYXJyYXkgb2Yge2F0dHJJZHMsIHZhbElkc30gcGFpcnMgZm9yIGJvdGggb2JqZWN0c1xuICAgICAgICAgICAgdmFyIGkxID0gMDtcbiAgICAgICAgICAgIHZhciBpMiA9IDA7XG4gICAgICAgICAgICBwcm9wSWRzMS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgcHJvcElkczIubGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgZGIxLl9nZXRBdHRyaWJ1dGVBbmRWYWx1ZUlkcyhkYklkLCBwcm9wSWRzMSwgcHJvcGVydHlGaWx0ZXIsIHRydWUsIGNhY2hlZFBhcmVudEF0dHJpYnMxKTtcbiAgICAgICAgICAgIGRiMi5fZ2V0QXR0cmlidXRlQW5kVmFsdWVJZHMoZGJJZCwgcHJvcElkczIsIHByb3BlcnR5RmlsdGVyLCB0cnVlLCBjYWNoZWRQYXJlbnRBdHRyaWJzMik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghcHJvcElkczEubGVuZ3RoIHx8ICFwcm9wSWRzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBhbiBhcnJheSBpcyBlbXB0eSwgdGhpcyBkYklkIGRvZXMgb25seSBleGlzdFxuICAgICAgICAgICAgICAgIC8vIGluIG9uZSBvZiB0aGUgdHdvIGRicywgaS5lLCB0aGUgd2hvbGUgb2JqZWN0IHdhcyBhZGRlZCBvciByZW1vdmVkLlxuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gcHJvcCBjaGFuZ2VzIG9mIG1hdGNoaW5nIG9iamVjdHMuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBcblxuICAgICAgICAgICAgdmFyIGNoYW5nZUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGFycmF5IG9mIHByb3AgY2hhbmdlcyBmb3IgY3VycmVudCBkYklkXG4gICAgICAgICAgICB2YXIgcHJvcENoYW5nZXMgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIHdoaWxlKGkxIDwgcHJvcElkczEubGVuZ3RoICYmIGkyIDwgcHJvcElkczIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHNvbWUgdmFsdWVzIG1heSBiZSB1bmRlZmluZWQgaWYgb25lIG9mIHRoZSBhcnJheXMgZW5kZWQuXG4gICAgICAgICAgICAgICAgdmFyIGVsZW0xID0gcHJvcElkczFbaTFdO1xuICAgICAgICAgICAgICAgIHZhciBlbGVtMiA9IHByb3BJZHMyW2kyXTtcbiAgICAgICAgICAgICAgICB2YXIgYTEgPSBlbGVtMSAmJiBlbGVtMS5hdHRySWQ7XG4gICAgICAgICAgICAgICAgdmFyIHYxID0gZWxlbTEgJiYgZWxlbTEudmFsSWQ7XG4gICAgICAgICAgICAgICAgdmFyIGEyID0gZWxlbTIgJiYgZWxlbTIuYXR0cklkO1xuICAgICAgICAgICAgICAgIHZhciB2MiA9IGVsZW0yICYmIGVsZW0yLnZhbElkO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgZXF1YWwsIHdlIGFyZSBkb25lIHdpdGggdGhpcyBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICBpZiAoYTEgPT09IGEyICYmIHYxID09PSB2Mikge1xuICAgICAgICAgICAgICAgICAgICBpMSsrO1xuICAgICAgICAgICAgICAgICAgICBpMisrO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSBoYXMgY2hhbmdlZFxuICAgICAgICAgICAgICAgIGNoYW5nZUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBkZXRhaWxzIGFyZSByZXF1ZXN0ZWQsIHdlIGFyZSBkb25lIHdpdGggdGhpcyBkYklkXG4gICAgICAgICAgICAgICAgaWYgKCFsaXN0UHJvcENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFdlIGV4cGxvaXQgaGVyZSB0aGF0IGF0dHJpYnV0ZUlkcyBpbiBPVEcgYXJlIGFsd2F5cyBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCBpZiBhMSA+IGEyLCB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IGExIGRvZXMgbm90IGV4aXN0IGluIGl0ZXJhdG9yMixcbiAgICAgICAgICAgICAgICAvLyBidXQgcG9zc2libHkgdmljZSB2ZXJzYS5cbiAgICAgICAgICAgICAgICB2YXIgcHJvcDFNaXNzaW5nID0gKGExID09PSB1bmRlZmluZWQgfHwgYTEgPiBhMik7XG4gICAgICAgICAgICAgICAgdmFyIHByb3AyTWlzc2luZyA9IChhMiA9PT0gdW5kZWZpbmVkIHx8IGEyID4gYTEpO1xuIFxuICAgICAgICAgICAgICAgIHZhciBjaGFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIGNhc2UgdGhhdCBwcm9wZXJ0eSBoYXMgYmVlbiBhZGRlZCBvciByZW1vdmVkXG4gICAgICAgICAgICAgICAgaWYgKHByb3AxTWlzc2luZykge1xuIFxuICAgICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eSB3YXMgYWRkZWQgaW4gZGIyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IGRiMi5fZ2V0T2JqZWN0UHJvcGVydHkoYTIsIHYyKTsgICAgXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZS5kaXNwbGF5VmFsdWVCID0gY2hhbmdlLmRpc3BsYXlWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlLmRpc3BsYXlWYWx1ZSAgPSB1bmRlZmluZWQ7ICAgXG4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGEyIGhhcyBiZWVuIGRldGVjdGVkIGFzIGFkZGVkLiBTa2lwIGl0IGFuZCBjb250aW51ZS5cbiAgICAgICAgICAgICAgICAgICAgaTIrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AyTWlzc2luZykge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5IHdhcyByZW1vdmVkIGluIGRiMlxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBkYjEuX2dldE9iamVjdFByb3BlcnR5KGExLCB2MSk7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZS5kaXNwbGF5VmFsdWVCID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGExIGhhcyBiZWVuIGRldGVjdGVkIGFzIHJlbW92ZWQuIFNraXAgaXQgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgICAgICAgICAgICBpMSsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYiBleGlzdHMgaW4gYm90aCwgYnV0IHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IGRiMS5fZ2V0T2JqZWN0UHJvcGVydHkoYTEsIHYxKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlLmRpc3BsYXlWYWx1ZUIgPSBfdGhpcy5nZXRBdHRyVmFsdWUoYTIsIHYyKTtcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaTErKztcbiAgICAgICAgICAgICAgICAgICAgaTIrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgcHJvcCB0aGF0IGNoYW5nZSwgYWxsb2MgYXJyYXkgZm9yIGl0XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wQ2hhbmdlcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwcm9wQ2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIENvbGxlY3QgZGJJZCBvZiBtb2RpZmllZCBvYmplY3RcbiAgICAgICAgICAgIGlmIChjaGFuZ2VGb3VuZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5jaGFuZ2VkSWRzLnB1c2goZGJJZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGNvcnJlc3BvbmRpZ24gcHJvcCBjaGFuZ2UgZGV0YWlsc1xuICAgICAgICAgICAgICAgIGlmIChsaXN0UHJvcENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnByb3BDaGFuZ2VzLnB1c2gocHJvcENoYW5nZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUcmFjayBwcm9ncmVzc1xuICAgICAgICB2YXIgbGFzdFBlcmNlbnQgPSAtMTtcbiAgICAgICAgdmFyIHRyYWNrUHJvZ3Jlc3MgPSBmdW5jdGlvbihpZHNEb25lLCBpZHNUb3RhbCkge1xuICAgICAgICAgICAgLy8gTGltaXQgY2FsbHMgdG8gMTAwIC0gb3RoZXJ3aXNlIGl0IHdvdWxkIHNsb3ctZG93biBldmVyeXRoaW5nLlxuICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSBNYXRoLmZsb29yKDEwMCAqIGlkc0RvbmUgLyBpZHNUb3RhbCk7XG4gICAgICAgICAgICBpZiAocGVyY2VudCAhPSBsYXN0UGVyY2VudCkge1xuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MgJiYgb25Qcm9ncmVzcyhwZXJjZW50KTtcbiAgICAgICAgICAgICAgICBsYXN0UGVyY2VudCA9IHBlcmNlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGRiSWRzKSB7XG4gICAgICAgICAgICAvLyBkaWZmIHNlbGVjdGVkIHNldCBvZiBJZHNcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxkYklkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBkYklkID0gZGJJZHNbaV07XG4gICAgICAgICAgICAgICAgZGlmZk9iamVjdChkYklkKTtcbiAgICAgICAgICAgICAgICB0cmFja1Byb2dyZXNzKGksIGRiSWRzLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaWZmIGFsbCBvYmplY3RzXG4gICAgICAgICAgICAvLyBOb3RlOiBXZSBhcmUgb25seSBzZWFyY2hpbmcgZm9yIGNvbW1vbiBvYmplY3RzIHRoYXQgY2hhbmdlZC4gVGhlcmVmb3JlLCB0aGUgbG9vcFxuICAgICAgICAgICAgLy8gICAgICAgcnVucyBvbmx5IG92ZXIgZGJJZHMgdGhhdCBhcmUgd2l0aGluIHRoZSB2YWxpZCByYW5nZSBmb3IgYm90aC5cbiAgICAgICAgICAgIHZhciBkYklkRW5kID0gTWF0aC5taW4oZGIxLmdldE9iamVjdENvdW50KCksIHRoaXMuZ2V0T2JqZWN0Q291bnQoKSk7XG4gICAgICAgICAgICBmb3IgKGxldCBkYklkID0gMTsgZGJJZDxkYklkRW5kOyBkYklkKyspIHtcbiAgICAgICAgICAgICAgICBkaWZmT2JqZWN0KGRiSWQpO1xuICAgICAgICAgICAgICAgIHRyYWNrUHJvZ3Jlc3MoZGJJZCwgZGJJZEVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlc1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5udW1iZXJPZkF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gX2F0dHJzPy5sZW5ndGggPz8gMDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHZhbHVlc1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5udW1iZXJPZlZhbHVlcyA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiBfdmFsdWVzT2Zmc2V0cz8ubGVuZ3RoID8/IDA7XG4gICAgfTtcblxuICAgIHRoaXMuZHRvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBfYXR0cnMgPSBudWxsO1xuICAgICAgICBfb2Zmc2V0cyA9IG51bGw7XG4gICAgICAgIF9hdnMgPSBudWxsO1xuICAgICAgICBfdmFsdWVzQmxvYiA9IG51bGw7XG4gICAgICAgIF92YWx1ZXNPZmZzZXRzID0gbnVsbDtcbiAgICAgICAgX2lkc0Jsb2IgPSBudWxsO1xuICAgICAgICBfaWRzT2Zmc2V0cyA9IG51bGw7XG5cbiAgICAgICAgX2NoaWxkQXR0cklkID0gMDtcbiAgICAgICAgX3BhcmVudEF0dHJJZCA9IDA7XG4gICAgICAgIF9uYW1lQXR0cklkID0gMDtcbiAgICAgICAgX2luc3RhbmNlT2ZBdHRySWQgPSAwO1xuICAgICAgICBfdmlld2FibGVJbkF0dHJJZCA9IDA7XG4gICAgICAgIF9leHRlcm5hbFJlZkF0dHJJZCA9IDA7XG4gICAgICAgIF9ub2RlRmxhZ3NBdHRySWQgPSAwO1xuICAgIH07XG59XG4iXSwibmFtZXMiOlsiYmxvYlRvSnNvbiIsInBhcnNlSW50QXJyYXkiLCJmaW5kVmFsdWVPZmZzZXRzIiwic3ViQmxvYlRvSnNvbiIsInN1YkJsb2JUb0pzb25JbnQiLCJiaW5hcnlTZWFyY2giLCJBdHRyaWJ1dGVUeXBlIiwiQXR0cmlidXRlRmxhZ3MiLCJSVlRfRElNX1BST1BTX0JMQUNLTElTVEVEIiwiSUZDX05XRF9JVEVNX1BST1BTX0JMQUNLTElTVEVEIiwiUHJvcGVydHlEYXRhYmFzZSIsImRianNvbnMiLCJfdGhpcyIsIl9pc1YyIiwiX2lzVmFyaW50IiwiX2F0dHJzIiwiX29mZnNldHMiLCJfYXZzIiwiX3ZhbHVlc0Jsb2IiLCJfdmFsdWVzT2Zmc2V0cyIsIl9pZHNCbG9iIiwiX2lkc09mZnNldHMiLCJfY2hpbGRBdHRySWQiLCJfcGFyZW50QXR0cklkIiwiX25hbWVBdHRySWQiLCJfaW5zdGFuY2VPZkF0dHJJZCIsIl92aWV3YWJsZUluQXR0cklkIiwiX2V4dGVybmFsUmVmQXR0cklkIiwiX25vZGVGbGFnc0F0dHJJZCIsIl9sYXllcnNBdHRySWQiLCJfcHJvY2Vzc2VkSWRzIiwiX2N5Y2xlc0NvdW50IiwiX2luc3RhbmNlTm9kZUNhY2hlIiwicCIsImF0dHJzIiwiaSIsImxlbmd0aCIsImF0dHJOYW1lIiwiY2F0ZWdvcnkiLCJEYktleSIsImFmRGlyZWN0U3RvcmFnZSIsImF2cyIsImJ1ZiIsImNoYXJDb2RlQXQiLCJvZmZzZXRzIiwiSW50MzJBcnJheSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwidmFsdWVzIiwic2V0SWRzQmxvYiIsImRhdGEiLCJpZHMiLCJnZXRPYmplY3RDb3VudCIsImdldFZhbHVlQXQiLCJ2YWxJZCIsImdldEludFZhbHVlQXQiLCJnZXRJZEF0IiwiZW50SWQiLCJleHRlcm5hbElkc0xvYWRlZCIsIkJvb2xlYW4iLCJnZXRBdHRyVmFsdWUiLCJhdHRySWQiLCJpbnRlZ2VySGludCIsImF0dHIiLCJfZ2V0T2JqZWN0UHJvcGVydHkiLCJkaXNwbGF5TmFtZSIsImhpZGRlbiIsImF0dHJpYnV0ZUhpZGRlbiIsImRpc3BsYXlWYWx1ZSIsImRpc3BsYXlDYXRlZ29yeSIsImF0dHJpYnV0ZU5hbWUiLCJ0eXBlIiwidW5pdHMiLCJwcmVjaXNpb24iLCJnZXRPYmplY3RQcm9wZXJ0aWVzIiwiZGJJZCIsInByb3BGaWx0ZXIiLCJpZ25vcmVIaWRkZW4iLCJwcm9wSWdub3JlZCIsImNhdGVnb3J5RmlsdGVyIiwicmVzdWx0IiwibmVlZE5hbWUiLCJmaWx0ZXJDb250YWluc0lkIiwiaW5kZXhPZiIsImlkc0xvYWRlZCIsImNvbnNvbGUiLCJlcnJvciIsImFkZEV4dGVybmFsSWQiLCJleHRlcm5hbElkIiwicGFyZW50UHJvcHMiLCJlbnVtT2JqZWN0UHJvcGVydGllcyIsInJlcyIsInByb3BlcnRpZXMiLCJ2YWwiLCJuYW1lIiwicHJvcCIsInB1c2giLCJteVByb3BzIiwicnAiLCJwcCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImdldEV4dGVybmFsSWRNYXBwaW5nIiwiZXh0SWRGaWx0ZXIiLCJtYXBwaW5nIiwibGVuIiwiZmluZFJvb3ROb2RlcyIsImlkcm9vdHMiLCJpZERldGFjaGVkTm9kZXMiLCJlbnVtT2JqZWN0cyIsImlkIiwiaGFzQ2hpbGQiLCJoYXNQYXJlbnQiLCJoYXNOYW1lIiwibm9kZUhhc0NoaWxkIiwiZ2V0Tm9kZU5hbWVBbmRDaGlsZHJlbiIsIm5vZGUiLCJza2lwQ2hpbGRyZW4iLCJjaGlsZHJlbiIsImluc3RhbmNlT2ZWYWxJZCIsImNoaWxkIiwicGFyZW50IiwiZmxhZ3MiLCJkYklkT2ZJbnN0YW5jZSIsInRtcCIsImJ1aWxkRGJJZFRvRnJhZ01hcCIsImZyYWdUb0RiSWQiLCJyZXQiLCJpRW5kIiwiZGJJZHMiLCJBcnJheSIsImlzQXJyYXkiLCJqIiwiZnJhZ3MiLCJ1bmRlZmluZWQiLCJOT0RFX1RZUEVfQVNTRU1CTFkiLCJOT0RFX1RZUEVfR0VPTUVUUlkiLCJidWlsZE9iamVjdFRyZWUiLCJyb290SWQiLCJtYXhEZXB0aCIsIm5vZGVTdG9yYWdlIiwiZGJUb0ZyYWdJZCIsImJ1aWxkT2JqZWN0VHJlZVJlYyIsIndhcm4iLCJkYlRvRnJhZyIsImRlcHRoIiwiY2hpbGRyZW5JZHMiLCJjaGlsZEhhc0NoaWxkcmVuIiwiZnJhZ0lkcyIsImNoaWxkQ291bnQiLCJzZXROb2RlIiwiZ2V0U2VhcmNoVGVybXMiLCJzZWFyY2hUZXh0IiwidG9Mb3dlckNhc2UiLCJzZWFyY2hUZXJtcyIsIm1hdGNoIiwicmVwbGFjZSIsInNlYXJjaExpc3QiLCJicnV0ZUZvcmNlU2VhcmNoIiwiYXR0cmlidXRlTmFtZXMiLCJzZWFyY2hPcHRpb25zIiwicmVzdWx0cyIsInNlYXJjaEhpZGRlbiIsImluY2x1ZGVJbmhlcml0ZWQiLCJpbmhlcml0YW5jZU1hcCIsImsiLCJtYXRjaGluZ192YWxzIiwidG9TdHJpbmciLCJzb3J0IiwiYSIsImIiLCJwaWQiLCJwYXJzZUludCIsImlzSGlkZGVuIiwiaUZvdW5kIiwiYWRkSW5oZXJpdGVkSWRzIiwic2VlbiIsIlNldCIsImNpZHMiLCJjaWQiLCJoYXMiLCJhZGQiLCJtYXAiLCJoaXRzIiwibWFwaW50IiwiYnJ1dGVGb3JjZUZpbmQiLCJwcm9wZXJ0eU5hbWUiLCJpZENvbnRhaW5zUHJvcGVydHkiLCJwcm9wTmFtZSIsImdldExheWVyVG9Ob2RlSWRNYXBwaW5nIiwiZ2V0QXR0cmlidXRlRGVmIiwiX3JhdyIsImRhdGFUeXBlIiwiZGF0YVR5cGVDb250ZXh0IiwiZGVzY3JpcHRpb24iLCJlbnVtQXR0cmlidXRlcyIsImNiIiwiZW51bU9iamVjdFByb3BlcnRpZXNWMSIsInByb3BTdGFydCIsInByb3BFbmQiLCJlbnVtT2JqZWN0UHJvcGVydGllc1YyIiwib2Zmc2V0IiwidmFsdWUiLCJzaGlmdEJ5IiwiX2luc3RhbmNlT2ZDYWNoZSIsImdldFByb3BlcnRpZXNTdWJzZXRXaXRoSW5oZXJpdGFuY2VWMSIsImRlc2lyZWRBdHRySWRzIiwiZHN0VmFsSWRzIiwiaW5zdGFuY2VPZlZhbHMiLCJpb2ZEYklkIiwiY2FjaGVkIiwiZ2V0UHJvcGVydGllc1N1YnNldFdpdGhJbmhlcml0YW5jZVYyIiwidiIsImdldFByb3BlcnRpZXNTdWJzZXRXaXRoSW5oZXJpdGFuY2UiLCJmaW5kTGF5ZXJzIiwiaW5kZXgiLCJpc0xheWVyIiwibGF5ZXJzIiwic2NvcGUiLCJsYXllck5hbWUiLCJsb2NhbGVDb21wYXJlIiwic2Vuc2l0aXZpdHkiLCJudW1lcmljIiwiZnJvbUlkIiwidG9JZCIsImlkQ291bnQiLCJNYXRoIiwibWF4IiwibWluIiwiZ2V0QXR0ckNoaWxkIiwiZ2V0QXR0clBhcmVudCIsImdldEF0dHJOYW1lIiwiZ2V0QXR0ckxheWVycyIsImdldEF0dHJJbnN0YW5jZU9mIiwiZ2V0QXR0clZpZXdhYmxlSW4iLCJnZXRBdHRyWHJlZiIsImdldEF0dHJOb2RlRmxhZ3MiLCJfYXR0cmlidXRlSXNCbGFja2xpc3RlZCIsIl9pZ25vcmVBdHRyaWJ1dGUiLCJwcm9wZXJ0eUZpbHRlciIsImZpbmRQYXJlbnQiLCJfZ2V0QXR0cmlidXRlQW5kVmFsdWVJZHMiLCJhdkxpc3QiLCJpZ25vcmVQcm9wZXJ0eUZsYWciLCJrZXlzIiwiYnlJbmNBdHJpYklkIiwiZmluZERpZmZlcmVuY2VzIiwiZGJUb0NvbXBhcmUiLCJkaWZmT3B0aW9ucyIsIm9uUHJvZ3Jlc3MiLCJjaGFuZ2VkSWRzIiwibGlzdFByb3BDaGFuZ2VzIiwicHJvcENoYW5nZXMiLCJkYjEiLCJkYjIiLCJwcm9wSWRzMSIsInByb3BJZHMyIiwiY2FjaGVkUGFyZW50QXR0cmliczEiLCJjYWNoZWRQYXJlbnRBdHRyaWJzMiIsImRpZmZPYmplY3QiLCJpMSIsImkyIiwiY2hhbmdlRm91bmQiLCJlbGVtMSIsImVsZW0yIiwiYTEiLCJ2MSIsImEyIiwidjIiLCJwcm9wMU1pc3NpbmciLCJwcm9wMk1pc3NpbmciLCJjaGFuZ2UiLCJkaXNwbGF5VmFsdWVCIiwibGFzdFBlcmNlbnQiLCJ0cmFja1Byb2dyZXNzIiwiaWRzRG9uZSIsImlkc1RvdGFsIiwicGVyY2VudCIsImZsb29yIiwiZGJJZEVuZCIsIm51bWJlck9mQXR0cmlidXRlcyIsIl9hdHRyczIiLCJudW1iZXJPZlZhbHVlcyIsIl92YWx1ZXNPZmZzZXRzMiIsImR0b3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/Propdb.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/common/PropdbCustomPropertyWrapper.js": /*!**********************************************************************!*\ !*** ./src/file-loaders/lmvtk/common/PropdbCustomPropertyWrapper.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CustomPropsCache: () => (/* binding */ CustomPropsCache),\n/* harmony export */ PropertyDatabaseCustomPropertyWrapper: () => (/* binding */ PropertyDatabaseCustomPropertyWrapper),\n/* harmony export */ acquireCustomPropsCache: () => (/* binding */ acquireCustomPropsCache)\n/* harmony export */ });\n/* harmony import */ var _Propdb__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Propdb */ \"./src/file-loaders/lmvtk/common/Propdb.js\");\n\n\n/**\n *\n * This wrapper takes the Property Database then extends it to have functionality that handles user-provided Custom Properties.\n * @class PropertyDatabaseCustomPropertyWrapper\n * @extends {PropertyDatabase} PropertyDatabase\n * @param dbjsons\n */\nfunction PropertyDatabaseCustomPropertyWrapper(dbjsons) {\n 'use strict ';\n\n this._impl = new _Propdb__WEBPACK_IMPORTED_MODULE_0__.PropertyDatabase(dbjsons);\n\n /** @type ValuesCacheEntry */\n this.customAttrs = undefined;\n\n this.setCustomAttrs = (customAttrs) => this.customAttrs = customAttrs;\n\n this._attributeIsBlacklisted = (attrId) => this._impl._attributeIsBlacklisted(attrId);\n\n this._getAttributeAndValueIds = (dbId, attrId, valueId, integerHint) => this._impl._getAttributeAndValueIds(dbId, attrId, valueId, integerHint);\n\n this._ignoreAttribute = (attrId) => this._impl._ignoreAttribute(attrId);\n\n this.attributeHidden = (attrId) => this._impl.attributeHidden(attrId);\n\n this.setIdsBlob = (data) => this._impl.setIdsBlob(data);\n\n this.getObjectCount = () => this._impl.getObjectCount();\n\n this.getIdAt = (entId) => this._impl.getIdAt(entId);\n\n this.externalIdsLoaded = () => this._impl.externalIdsLoaded();\n\n this.getExternalIdMapping = (extIdFilter) => this._impl.getExternalIdMapping(extIdFilter);\n\n this.findRootNodes = () => this._impl.findRootNodes();\n\n this.nodeHasChild = (dbId) => this._impl.nodeHasChild(dbId);\n\n this.getNodeNameAndChildren = (node, skipChildren) => this._impl.getNodeNameAndChildren(node, skipChildren);\n\n this.buildDbIdToFragMap = (fragToDbId) => this._impl.buildDbIdToFragMap(fragToDbId);\n\n this.buildObjectTree = (rootId, fragToDbId, maxDepth, nodeStorage) =>\n this._impl.buildObjectTree(rootId, fragToDbId, maxDepth, nodeStorage);\n\n this.buildObjectTreeRec = (dbId, parent, dbToFrag, depth, maxDepth, nodeStorage) =>\n this._impl.buildObjectTreeRec(dbId, parent, dbToFrag, depth, maxDepth, nodeStorage);\n\n this.getSearchTerms = (searchText) => this._impl.getSearchTerms(searchText);\n\n this.bruteForceSearch = (searchText, attributeNames, searchOptions) =>\n this._impl.bruteForceSearch(searchText, attributeNames, searchOptions);\n\n this.bruteForceFind = (propertyName) => this._impl.bruteForceFind(propertyName);\n\n this.getLayerToNodeIdMapping = () => this._impl.getLayerToNodeIdMapping();\n\n this.findLayers = () => this._impl.findLayers();\n\n this.enumObjects = (cb, fromId, toId) => this._impl.enumObjects(cb, fromId, toId);\n\n this.getAttrChild = () => this._impl.getAttrChild();\n\n this.getAttrParent = () => this._impl.getAttrParent();\n\n this.getAttrName = () => this._impl.getAttrName();\n\n this.getAttrLayers = () => this._impl.getAttrLayers();\n\n this.getAttrInstanceOf = () => this._impl.getAttrInstanceOf();\n\n this.getAttrViewableIn = () => this._impl.getAttrViewableIn();\n\n this.getAttrXref = () => this._impl.getAttrXref();\n\n this.getAttrNodeFlags = () => this._impl.getAttrNodeFlags();\n\n this.findParent = (dbId) => this._impl.findParent(dbId);\n\n this.findDifferences = (dbToCompare, diffOptions, onProgress) =>\n this._impl.findDifferences(dbToCompare, diffOptions, onProgress);\n\n this.numberOfAttributes = () => this._impl.numberOfAttributes();\n\n this.numberOfValues = () => this._impl.numberOfValues();\n\n this.dtor = () => this._impl.dtor();\n\n this._customAttrIdOffset = this._impl.numberOfAttributes();\n this._customValueIdOffset = this._impl.numberOfValues();\n\n this.getObjectCustomProperties = (dbId, propsWanted) => {var _this$customAttrs;return ((_this$customAttrs = this.customAttrs) === null || _this$customAttrs === void 0 ? void 0 : _this$customAttrs.getObjectProperties(dbId, propsWanted, this._customAttrIdOffset, this._customValueIdOffset)) ?? [];};\n\n // ⬇ custom override functions ⬇\n\n this.getValueAt = (valueId) => {\n const customValueId = valueId - this._customValueIdOffset;\n if (customValueId >= 0)\n return this.customAttrs.customValues[customValueId];\n\n return this._impl.getValueAt(valueId);\n };\n\n this.getIntValueAt = (valueId) => {\n const customValueId = valueId - this._customValueIdOffset;\n if (customValueId >= 0)\n return this.customAttrs.customValues[customValueId];\n\n return this._impl.getIntValueAt(valueId);\n };\n\n this.getAttrValue = (attrId, valueId, integerHint) => {\n const customAttrId = attrId - this._customAttrIdOffset;\n if (customAttrId >= 0)\n return this.customAttrs.customValues[valueId - this._customValueIdOffset];\n\n return this._impl.getAttrValue(attrId, valueId, integerHint);\n };\n\n this._getObjectProperty = (attrId, valueId) => {\n const customAttrId = attrId - this._customAttrIdOffset;\n if (customAttrId >= 0) {\n const customAttr = this.customAttrs.attributes.customAttrs[customAttrId];\n // map value to expected shape\n return {\n displayName: (customAttr === null || customAttr === void 0 ? void 0 : customAttr.displayName) ?? (customAttr === null || customAttr === void 0 ? void 0 : customAttr.name),\n displayValue: this.customAttrs.customValues[valueId - this._customValueIdOffset],\n displayCategory: customAttr.category,\n attributeName: customAttr.name,\n type: customAttr.dataType,\n units: customAttr.dataTypeContext,\n hidden: false,\n precision: customAttr.precision\n };\n }\n\n return this._impl._getObjectProperty(attrId, valueId);\n };\n\n this.getObjectProperties = (dbId, propFilter, ignoreHidden, propIgnored, categoryFilter) => {\n const result = this._impl.getObjectProperties(dbId, propFilter, ignoreHidden, propIgnored, categoryFilter);\n const customProps = this.getObjectCustomProperties(dbId);\n if (customProps !== null && customProps !== void 0 && customProps.length) {\n const props = result.properties;\n for (let i = 0; i < customProps.length; i += 2) {\n const customProp = this._getObjectProperty(customProps[i], customProps[i + 1]);\n props.push(customProp);\n }\n result.properties = props;\n }\n return result;\n };\n\n this.getAttributeDef = (attrId) => {\n const customAttrId = attrId - this._customAttrIdOffset;\n if (customAttrId >= 0)\n return this.customAttrs.attributes.customAttrs[customAttrId];\n\n return this._impl.getAttributeDef(attrId);\n };\n\n this.enumAttributes = (cb) => {var _this$customAttrs2;\n this._impl.enumAttributes(cb);\n (_this$customAttrs2 = this.customAttrs) === null || _this$customAttrs2 === void 0 || _this$customAttrs2.attributes.customAttrs.forEach((attr, index) => {\n cb(index + this._customAttrIdOffset, attr);\n });\n };\n\n this.enumObjectProperties = (dbId, cb, ignoreHidden, propIgnored, categoryFilter) => {\n this._impl.enumObjectProperties(dbId, cb, ignoreHidden, propIgnored, categoryFilter);\n const props = this.getObjectCustomProperties(dbId);\n if (props !== null && props !== void 0 && props.length) {\n for (let i = 0; i < props.length; i += 2) {\n cb(props[i], props[i + 1]);\n }\n }\n };\n\n this.getPropertiesSubsetWithInheritance = (dbId, desiredAttrIds, dstValueIds) => {\n const customProps = [];\n Object.keys(desiredAttrIds).forEach((attrIdKey) => {\n const customAttrId = parseInt(attrIdKey, 10);\n if (customAttrId >= this._customAttrIdOffset) {\n customProps.push(customAttrId);\n }\n });\n const result = this._impl.getPropertiesSubsetWithInheritance(dbId, desiredAttrIds, dstValueIds);\n if (customProps.length > 0) {\n const customValues = this.getObjectCustomProperties(dbId, customProps);\n result.push(...customValues);\n if (dstValueIds) {\n for (let i = 0; i < customValues.length; i += 2) {\n const customValue = customValues[i];\n dstValueIds[customValue] = customValues[i + 1];\n }\n }\n }\n return result;\n };\n}\n\nconst TypeMap = {\n \"Boolean\": 1,\n \"Integer\": 2,\n \"Double\": 3,\n \"String\": 20\n};\n\nclass ValuesCacheEntry {\n\n constructor(attributes) {\n this.lastUpdated = new Date(0); // min date (start of epoch)\n this.lastFetched = new Date(0); // min date (start of epoch)\n this.customValueIds = new Map();\n this.customValues = [];\n this.customAttributeValues = new Map();\n this.attributes = attributes;\n }\n\n hasObjectProperties(dbId) {\n return this.customAttributeValues.get(dbId) !== undefined;\n }\n\n getObjectProperties(dbId, propsWanted, attributesOffset, valuesOffset) {var _this$customAttribute;\n const props = ((_this$customAttribute = this.customAttributeValues.get(dbId)) === null || _this$customAttribute === void 0 ? void 0 : _this$customAttribute.slice()) ?? [];\n let result = props;\n if (propsWanted) {\n result = [];\n for (let i = 0; i < props.length && result.length < propsWanted.length * 2; i += 2) {\n const prop = props[i];\n if (propsWanted.includes(prop + attributesOffset)) {\n result.push(prop, props[i + 1]);\n }\n }\n }\n for (let i = 0; i < result.length; i += 2) {\n result[i] += attributesOffset;\n result[i + 1] += valuesOffset;\n }\n return result;\n }\n\n internValue(value) {\n let valueId = this.customValueIds.get(value);\n if (valueId === undefined) {\n valueId = this.customValues.length;\n this.customValueIds.set(value, valueId);\n this.customValues.push(value);\n }\n return valueId;\n }\n\n async refreshCustomPropertiesValues(_ref) {let { baseUrl, headers, projectId, seedFileUrn } = _ref;\n\n const url = `${baseUrl}/v2/projects/${projectId}/versions/${encodeURIComponent(seedFileUrn)}/custom-properties`;\n var response = await fetch(url,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n }\n });\n if (response.ok) {\n try {\n this.customAttributeValues.clear();\n const payload = await response.json();\n for (const entry of payload.results) {\n const attrId = this.attributes.customAttrIds.get(entry.propId);\n if (attrId === undefined) {\n continue;\n }\n const dbId = entry.svf2Id;\n let avs = this.customAttributeValues.get(dbId);\n if (avs === undefined) {\n avs = [];\n this.customAttributeValues.set(dbId, avs);\n }\n avs.push(attrId, this.internValue(entry.value));\n }\n this.lastUpdated = Date.parse(payload.lastModifiedAt);\n } catch (e) {\n console.error(e);\n throw e;\n }\n this.lastFetched = Date.now();\n return this;\n }\n throw new Error(response.statusText);\n }\n\n}\n\nclass ProjectCacheEntry {\n\n constructor() {\n const epoch = new Date(0); // min date (start of epoch)\n this.attributes = {\n lastFetched: epoch,\n lastUpdated: epoch,\n customAttrIds: new Map(),\n customAttrs: []\n };\n this.byUrn = {};\n }\n\n async parseResponse(response, processLine) {\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let { value: chunk, done: readerDone } = await reader.read();\n let readString = chunk ? decoder.decode(chunk) : ' ';\n\n const re = /\\r\\n|\\n|\\r/g;\n let startIndex = 0;\n let line = null;\n\n for (;;) {\n line = re.exec(readString);\n if (!line) {\n if (readerDone) {\n break;\n }\n const remainder = readString.substring(startIndex);\n ({ value: chunk, done: readerDone } = await reader.read());\n readString = remainder + (chunk ? decoder.decode(chunk) : ' ');\n startIndex = re.lastIndex = 0;\n continue;\n }\n processLine(readString.substring(startIndex, line.index));\n startIndex = re.lastIndex;\n }\n if (startIndex < readString.length) {\n // last line didn't end in a newline char\n processLine(readString.substring(startIndex));\n }\n }\n\n async refreshCustomProperties(_ref2) {let { baseUrl, headers, projectId }=_ ref2;\n\n const url=` ${baseUrl}/v2/projects/${projectId}/custom-properties/fields`;\n var response=a wait fetch(url,\n {\n headers: {\n \ "Content-Type\": \ "application/json\",\n ...headers\n }\n });\n if (response.ok) {\n const internedValues=n ew Map();\n const customAttrIds=n ew Map();\n const customAttrs=[ ];\n const processLine=( line)=> {\n try {\n const field = JSON.parse(line);\n let category = internedValues.get(field.category);\n if (!category) {\n category = field.category;\n internedValues.set(category, category);\n }\n const customPropertyDef = {\n propertyHash: field.key,\n category,\n name: field.name,\n displayName: field.displayName,\n dataType: TypeMap[field.type] ?? 0,\n dataTypeContext: field.uom ?? '',\n flags: 0,\n precision: field.precision ?? 0\n };\n var attrId = customAttrIds.get(customPropertyDef.propertyHash);\n if (!attrId) {\n attrId = customAttrs.length;\n customAttrs.push(customPropertyDef);\n }\n customAttrIds.set(customPropertyDef.propertyHash, attrId);\n } catch (e) {\n console.error(e);\n console.log(line);\n throw e;\n }\n };\n\n await this.parseResponse(response, processLine);\n const attributes = this.attributes;\n attributes.customAttrIds = customAttrIds;\n attributes.customAttrs = customAttrs;\n attributes.lastFetched = Date.now();\n return this;\n }\n throw new Error(response.statusText);\n }\n\n async acquireValuesCache(_ref3) {let { baseUrl, headers, projectId, seedFileUrn } = _ref3;\n let entry = this.byUrn[seedFileUrn];\n try {\n if (entry instanceof Promise) {\n // fetching is already in progress\n entry = await entry;\n } else if (entry === undefined || Date.now() - entry.lastFetched > 1000) {\n entry ??= new ValuesCacheEntry(this.attributes);\n const promise = entry.refreshCustomPropertiesValues({ baseUrl, headers, projectId, seedFileUrn });\n this.byUrn[seedFileUrn] = promise;\n await promise;\n this.byUrn[seedFileUrn] = entry;\n }\n } catch (err) {\n delete this.byUrn[seedFileUrn];\n throw err;\n }\n return entry;\n }\n}\n\nclass CustomPropsCache {\n\n constructor() {\n this._cache = {};\n }\n\n async acquireDefinitionsCache(_ref4) {let { baseUrl, headers, projectId } = _ref4;\n let entry = this._cache[projectId];\n try {\n if (entry instanceof Promise) {\n // fetching is already in progress\n entry = await entry;\n } else if (entry === undefined || Date.now() - entry.attributes.lastFetched > 30000) {\n entry ??= new ProjectCacheEntry();\n const promise = entry.refreshCustomProperties({ baseUrl, headers, projectId });\n this._cache[projectId] = promise;\n await promise;\n this._cache[projectId] = entry;\n }\n } catch (err) {\n delete this._cache[projectId];\n throw err;\n }\n return entry;\n }\n}\n\nfunction acquireCustomPropsCache(host) {\n let customPropsCache = host.customPropsCache;\n if (!customPropsCache) {\n host.customPropsCache = customPropsCache = new CustomPropsCache();\n }\n return customPropsCache;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9Qcm9wZGJDdXN0b21Qcm9wZXJ0eVdyYXBwZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxxQ0FBcUNBLENBQUNDLE9BQU8sRUFBRTtFQUMzRCxZQUFZOztFQUVaLElBQUksQ0FBQ0MsS0FBSyxHQUFHLElBQUlILHFEQUFnQixDQUFDRSxPQUFPLENBQUM7O0VBRTFDO0VBQ0EsSUFBSSxDQUFDRSxXQUFXLEdBQUdDLFNBQVM7O0VBRTVCLElBQUksQ0FBQ0MsY0FBYyxHQUFHLENBQUNGLFdBQVcsS0FBSyxJQUFJLENBQUNBLFdBQVcsR0FBR0EsV0FBVzs7RUFFckUsSUFBSSxDQUFDRyx1QkFBdUIsR0FBRyxDQUFDQyxNQUFNLEtBQUssSUFBSSxDQUFDTCxLQUFLLENBQUNJLHVCQUF1QixDQUFDQyxNQUFNLENBQUM7O0VBRXJGLElBQUksQ0FBQ0Msd0JBQXdCLEdBQUcsQ0FBQ0MsSUFBSSxFQUFFRixNQUFNLEVBQUVHLE9BQU8sRUFBRUMsV0FBVyxLQUFLLElBQUksQ0FBQ1QsS0FBSyxDQUFDTSx3QkFBd0IsQ0FBQ0MsSUFBSSxFQUFFRixNQUFNLEVBQUVHLE9BQU8sRUFBRUMsV0FBVyxDQUFDOztFQUUvSSxJQUFJLENBQUNDLGdCQUFnQixHQUFHLENBQUNMLE1BQU0sS0FBSyxJQUFJLENBQUNMLEtBQUssQ0FBQ1UsZ0JBQWdCLENBQUNMLE1BQU0sQ0FBQzs7RUFFdkUsSUFBSSxDQUFDTSxlQUFlLEdBQUcsQ0FBQ04sTUFBTSxLQUFLLElBQUksQ0FBQ0wsS0FBSyxDQUFDVyxlQUFlLENBQUNOLE1BQU0sQ0FBQzs7RUFFckUsSUFBSSxDQUFDTyxVQUFVLEdBQUcsQ0FBQ0MsSUFBSSxLQUFLLElBQUksQ0FBQ2IsS0FBSyxDQUFDWSxVQUFVLENBQUNDLElBQUksQ0FBQzs7RUFFdkQsSUFBSSxDQUFDQyxjQUFjLEdBQUcs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UUFDQWxELEtBQUssR0FBRyxNQUFNQSxLQUFLO01BQ3ZCLENBQUMsTUFBTSxJQUFJQSxLQUFLLEtBQUt0SixTQUFTLElBQUt3SCxJQUFJLENBQUN5QyxHQUFHLENBQUMsQ0FBQyxHQUFHWCxLQUFLLENBQUMxRSxVQUFVLENBQUM2QyxXQUFXLEdBQUksS0FBSyxFQUFFO1FBQ25GNkIsS0FBSyxLQUFLLElBQUljLGlCQUFpQixDQUFDLENBQUM7UUFDakMsTUFBTXFDLE9BQU8sR0FBR25ELEtBQUssQ0FBQ3FDLHVCQUF1QixDQUFDLEVBQUVqRCxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUNnRSxNQUFNLENBQUNoRSxTQUFTLENBQUMsR0FBRzZELE9BQU87UUFDaEMsTUFBTUEsT0FBTztRQUNiLElBQUksQ0FBQ0csTUFBTSxDQUFDaEUsU0FBUyxDQUFDLEdBQUdVLEtBQUs7TUFDbEM7SUFDSixDQUFDLENBQUMsT0FBT29ELEdBQUcsRUFBRTtNQUNWLE9BQU8sSUFBSSxDQUFDRSxNQUFNLENBQUNoRSxTQUFTLENBQUM7TUFDN0IsTUFBTThELEdBQUc7SUFDYjtJQUNBLE9BQU9wRCxLQUFLO0VBQ2hCO0FBQ0o7O0FBRU8sU0FBU3lELHVCQUF1QkEsQ0FBQ0MsSUFBSSxFQUFFO0VBQzFDLElBQUlDLGdCQUFnQixHQUFHRCxJQUFJLENBQUNDLGdCQUFnQjtFQUM1QyxJQUFJLENBQUNBLGdCQUFnQixFQUFFO0lBQ25CRCxJQUFJLENBQUNDLGdCQUFnQixHQUFHQSxnQkFBZ0IsR0FBRyxJQUFJTixnQkFBZ0IsQ0FBQyxDQUFDO0VBQ3JFO0VBQ0EsT0FBT00sZ0JBQWdCO0FBQzNCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9jb21tb24vUHJvcGRiQ3VzdG9tUHJvcGVydHlXcmFwcGVyLmpzPzEzMDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvcGVydHlEYXRhYmFzZSB9IGZyb20gJy4vUHJvcGRiJztcblxuLyoqXG4gKlxuICogVGhpcyB3cmFwcGVyIHRha2VzIHRoZSBQcm9wZXJ0eSBEYXRhYmFzZSB0aGVuIGV4dGVuZHMgaXQgdG8gaGF2ZSBmdW5jdGlvbmFsaXR5IHRoYXQgaGFuZGxlcyB1c2VyLXByb3ZpZGVkIEN1c3RvbSBQcm9wZXJ0aWVzLlxuICogQGNsYXNzIFByb3BlcnR5RGF0YWJhc2VDdXN0b21Qcm9wZXJ0eVdyYXBwZXJcbiAqIEBleHRlbmRzIHtQcm9wZXJ0eURhdGFiYXNlfSBQcm9wZXJ0eURhdGFiYXNlXG4gKiBAcGFyYW0gZGJqc29uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gUHJvcGVydHlEYXRhYmFzZUN1c3RvbVByb3BlcnR5V3JhcHBlcihkYmpzb25zKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdGhpcy5faW1wbCA9IG5ldyBQcm9wZXJ0eURhdGFiYXNlKGRianNvbnMpO1xuXG4gICAgLyoqIEB0eXBlIFZhbHVlc0NhY2hlRW50cnkgKi9cbiAgICB0aGlzLmN1c3RvbUF0dHJzID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5zZXRDdXN0b21BdHRycyA9IChjdXN0b21BdHRycykgPT4gdGhpcy5jdXN0b21BdHRycyA9IGN1c3RvbUF0dHJzO1xuXG4gICAgdGhpcy5fYXR0cmlidXRlSXNCbGFja2xpc3RlZCA9IChhdHRySWQpID0+IHRoaXMuX2ltcGwuX2F0dHJpYnV0ZUlzQmxhY2tsaXN0ZWQoYXR0cklkKTtcblxuICAgIHRoaXMuX2dldEF0dHJpYnV0ZUFuZFZhbHVlSWRzID0gKGRiSWQsIGF0dHJJZCwgdmFsdWVJZCwgaW50ZWdlckhpbnQpID0+IHRoaXMuX2ltcGwuX2dldEF0dHJpYnV0ZUFuZFZhbHVlSWRzKGRiSWQsIGF0dHJJZCwgdmFsdWVJZCwgaW50ZWdlckhpbnQpO1xuXG4gICAgdGhpcy5faWdub3JlQXR0cmlidXRlID0gKGF0dHJJZCkgPT4gdGhpcy5faW1wbC5faWdub3JlQXR0cmlidXRlKGF0dHJJZCk7XG5cbiAgICB0aGlzLmF0dHJpYnV0ZUhpZGRlbiA9IChhdHRySWQpID0+IHRoaXMuX2ltcGwuYXR0cmlidXRlSGlkZGVuKGF0dHJJZCk7XG5cbiAgICB0aGlzLnNldElkc0Jsb2IgPSAoZGF0YSkgPT4gdGhpcy5faW1wbC5zZXRJZHNCbG9iKGRhdGEpO1xuXG4gICAgdGhpcy5nZXRPYmplY3RDb3VudCA9ICgpID0+IHRoaXMuX2ltcGwuZ2V0T2JqZWN0Q291bnQoKTtcblxuICAgIHRoaXMuZ2V0SWRBdCA9IChlbnRJZCkgPT4gdGhpcy5faW1wbC5nZXRJZEF0KGVudElkKTtcblxuICAgIHRoaXMuZXh0ZXJuYWxJZHNMb2FkZWQgPSAoKSA9PiB0aGlzLl9pbXBsLmV4dGVybmFsSWRzTG9hZGVkKCk7XG5cbiAgICB0aGlzLmdldEV4dGVybmFsSWRNYXBwaW5nID0gKGV4dElkRmlsdGVyKSA9PiB0aGlzLl9pbXBsLmdldEV4dGVybmFsSWRNYXBwaW5nKGV4dElkRmlsdGVyKTtcblxuICAgIHRoaXMuZmluZFJvb3ROb2RlcyA9ICgpID0+IHRoaXMuX2ltcGwuZmluZFJvb3ROb2RlcygpO1xuXG4gICAgdGhpcy5ub2RlSGFzQ2hpbGQgPSAoZGJJZCkgPT4gdGhpcy5faW1wbC5ub2RlSGFzQ2hpbGQoZGJJZCk7XG5cbiAgICB0aGlzLmdldE5vZGVOYW1lQW5kQ2hpbGRyZW4gPSAobm9kZSwgc2tpcENoaWxkcmVuKSA9PiB0aGlzLl9pbXBsLmdldE5vZGVOYW1lQW5kQ2hpbGRyZW4obm9kZSwgc2tpcENoaWxkcmVuKTtcblxuICAgIHRoaXMuYnVpbGREYklkVG9GcmFnTWFwID0gKGZyYWdUb0RiSWQpID0+IHRoaXMuX2ltcGwuYnVpbGREYklkVG9GcmFnTWFwKGZyYWdUb0RiSWQpO1xuXG4gICAgdGhpcy5idWlsZE9iamVjdFRyZWUgPSAocm9vdElkLCBmcmFnVG9EYklkLCBtYXhEZXB0aCwgbm9kZVN0b3JhZ2UpID0+XG4gICAgICAgIHRoaXMuX2ltcGwuYnVpbGRPYmplY3RUcmVlKHJvb3RJZCwgZnJhZ1RvRGJJZCwgbWF4RGVwdGgsIG5vZGVTdG9yYWdlKTtcblxuICAgIHRoaXMuYnVpbGRPYmplY3RUcmVlUmVjID0gKGRiSWQsIHBhcmVudCwgZGJUb0ZyYWcsIGRlcHRoLCBtYXhEZXB0aCwgbm9kZVN0b3JhZ2UpID0+XG4gICAgICAgIHRoaXMuX2ltcGwuYnVpbGRPYmplY3RUcmVlUmVjKGRiSWQsIHBhcmVudCwgZGJUb0ZyYWcsIGRlcHRoLCBtYXhEZXB0aCwgbm9kZVN0b3JhZ2UpO1xuXG4gICAgdGhpcy5nZXRTZWFyY2hUZXJtcyA9IChzZWFyY2hUZXh0KSA9PiB0aGlzLl9pbXBsLmdldFNlYXJjaFRlcm1zKHNlYXJjaFRleHQpO1xuXG4gICAgdGhpcy5icnV0ZUZvcmNlU2VhcmNoID0gKHNlYXJjaFRleHQsIGF0dHJpYnV0ZU5hbWVzLCBzZWFyY2hPcHRpb25zKSA9PlxuICAgICAgICB0aGlzLl9pbXBsLmJydXRlRm9yY2VTZWFyY2goc2VhcmNoVGV4dCwgYXR0cmlidXRlTmFtZXMsIHNlYXJjaE9wdGlvbnMpO1xuXG4gICAgdGhpcy5icnV0ZUZvcmNlRmluZCA9IChwcm9wZXJ0eU5hbWUpID0+IHRoaXMuX2ltcGwuYnJ1dGVGb3JjZUZpbmQocHJvcGVydHlOYW1lKTtcblxuICAgIHRoaXMuZ2V0TGF5ZXJUb05vZGVJZE1hcHBpbmcgPSAoKSA9PiB0aGlzLl9pbXBsLmdldExheWVyVG9Ob2RlSWRNYXBwaW5nKCk7XG5cbiAgICB0aGlzLmZpbmRMYXllcnMgPSAoKSA9PiB0aGlzLl9pbXBsLmZpbmRMYXllcnMoKTtcblxuICAgIHRoaXMuZW51bU9iamVjdHMgPSAoY2IsIGZyb21JZCwgdG9JZCkgPT4gdGhpcy5faW1wbC5lbnVtT2JqZWN0cyhjYiwgZnJvbUlkLCB0b0lkKTtcblxuICAgIHRoaXMuZ2V0QXR0ckNoaWxkID0gKCkgPT4gdGhpcy5faW1wbC5nZXRBdHRyQ2hpbGQoKTtcblxuICAgIHRoaXMuZ2V0QXR0clBhcmVudCA9ICgpID0+IHRoaXMuX2ltcGwuZ2V0QXR0clBhcmVudCgpO1xuXG4gICAgdGhpcy5nZXRBdHRyTmFtZSA9ICgpID0+IHRoaXMuX2ltcGwuZ2V0QXR0ck5hbWUoKTtcblxuICAgIHRoaXMuZ2V0QXR0ckxheWVycyA9ICgpID0+IHRoaXMuX2ltcGwuZ2V0QXR0ckxheWVycygpO1xuXG4gICAgdGhpcy5nZXRBdHRySW5zdGFuY2VPZiA9ICgpID0+IHRoaXMuX2ltcGwuZ2V0QXR0ckluc3RhbmNlT2YoKTtcblxuICAgIHRoaXMuZ2V0QXR0clZpZXdhYmxlSW4gPSAoKSA9PiB0aGlzLl9pbXBsLmdldEF0dHJWaWV3YWJsZUluKCk7XG5cbiAgICB0aGlzLmdldEF0dHJYcmVmID0gKCkgPT4gdGhpcy5faW1wbC5nZXRBdHRyWHJlZigpO1xuXG4gICAgdGhpcy5nZXRBdHRyTm9kZUZsYWdzID0gKCkgPT4gdGhpcy5faW1wbC5nZXRBdHRyTm9kZUZsYWdzKCk7XG5cbiAgICB0aGlzLmZpbmRQYXJlbnQgPSAoZGJJZCkgPT4gdGhpcy5faW1wbC5maW5kUGFyZW50KGRiSWQpO1xuXG4gICAgdGhpcy5maW5kRGlmZmVyZW5jZXMgPSAoZGJUb0NvbXBhcmUsIGRpZmZPcHRpb25zLCBvblByb2dyZXNzKSA9PlxuICAgICAgICB0aGlzLl9pbXBsLmZpbmREaWZmZXJlbmNlcyhkYlRvQ29tcGFyZSwgZGlmZk9wdGlvbnMsIG9uUHJvZ3Jlc3MpO1xuXG4gICAgdGhpcy5udW1iZXJPZkF0dHJpYnV0ZXMgPSAoKSA9PiB0aGlzLl9pbXBsLm51bWJlck9mQXR0cmlidXRlcygpO1xuXG4gICAgdGhpcy5udW1iZXJPZlZhbHVlcyA9ICgpID0+IHRoaXMuX2ltcGwubnVtYmVyT2ZWYWx1ZXMoKTtcblxuICAgIHRoaXMuZHRvciA9ICgpID0+IHRoaXMuX2ltcGwuZHRvcigpO1xuXG4gICAgdGhpcy5fY3VzdG9tQXR0cklkT2Zmc2V0ID0gdGhpcy5faW1wbC5udW1iZXJPZkF0dHJpYnV0ZXMoKTtcbiAgICB0aGlzLl9jdXN0b21WYWx1ZUlkT2Zmc2V0ID0gdGhpcy5faW1wbC5udW1iZXJPZlZhbHVlcygpO1xuXG4gICAgdGhpcy5nZXRPYmplY3RDdXN0b21Qcm9wZXJ0aWVzID0gKGRiSWQsIHByb3BzV2FudGVkKSA9PiB0aGlzLmN1c3RvbUF0dHJzPy5nZXRPYmplY3RQcm9wZXJ0aWVzKGRiSWQsIHByb3BzV2FudGVkLCB0aGlzLl9jdXN0b21BdHRySWRPZmZzZXQsIHRoaXMuX2N1c3RvbVZhbHVlSWRPZmZzZXQpID8/IFtdO1xuXG4gICAgLy8g4qyHIGN1c3RvbSBvdmVycmlkZSBmdW5jdGlvbnMg4qyHXG5cbiAgICB0aGlzLmdldFZhbHVlQXQgPSAodmFsdWVJZCkgPT4ge1xuICAgICAgICBjb25zdCBjdXN0b21WYWx1ZUlkID0gdmFsdWVJZCAtIHRoaXMuX2N1c3RvbVZhbHVlSWRPZmZzZXQ7XG4gICAgICAgIGlmIChjdXN0b21WYWx1ZUlkID49IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21BdHRycy5jdXN0b21WYWx1ZXNbY3VzdG9tVmFsdWVJZF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltcGwuZ2V0VmFsdWVBdCh2YWx1ZUlkKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRJbnRWYWx1ZUF0ID0gKHZhbHVlSWQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tVmFsdWVJZCA9IHZhbHVlSWQgLSB0aGlzLl9jdXN0b21WYWx1ZUlkT2Zmc2V0O1xuICAgICAgICBpZiAoY3VzdG9tVmFsdWVJZCA+PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQXR0cnMuY3VzdG9tVmFsdWVzW2N1c3RvbVZhbHVlSWRdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9pbXBsLmdldEludFZhbHVlQXQodmFsdWVJZCk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0QXR0clZhbHVlID0gKGF0dHJJZCwgdmFsdWVJZCwgaW50ZWdlckhpbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tQXR0cklkID0gYXR0cklkIC0gdGhpcy5fY3VzdG9tQXR0cklkT2Zmc2V0O1xuICAgICAgICBpZiAoY3VzdG9tQXR0cklkID49IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21BdHRycy5jdXN0b21WYWx1ZXNbdmFsdWVJZCAtIHRoaXMuX2N1c3RvbVZhbHVlSWRPZmZzZXRdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9pbXBsLmdldEF0dHJWYWx1ZShhdHRySWQsIHZhbHVlSWQsIGludGVnZXJIaW50KTtcbiAgICB9O1xuXG4gICAgdGhpcy5fZ2V0T2JqZWN0UHJvcGVydHkgPSAoYXR0cklkLCB2YWx1ZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUF0dHJJZCA9IGF0dHJJZCAtIHRoaXMuX2N1c3RvbUF0dHJJZE9mZnNldDtcbiAgICAgICAgaWYgKGN1c3RvbUF0dHJJZCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21BdHRyID0gdGhpcy5jdXN0b21BdHRycy5hdHRyaWJ1dGVzLmN1c3RvbUF0dHJzW2N1c3RvbUF0dHJJZF07XG4gICAgICAgICAgICAvLyBtYXAgdmFsdWUgdG8gZXhwZWN0ZWQgc2hhcGVcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGN1c3RvbUF0dHI/LmRpc3BsYXlOYW1lID8/IGN1c3RvbUF0dHI/Lm5hbWUsXG4gICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLmN1c3RvbUF0dHJzLmN1c3RvbVZhbHVlc1t2YWx1ZUlkIC0gdGhpcy5fY3VzdG9tVmFsdWVJZE9mZnNldF0sXG4gICAgICAgICAgICAgICAgZGlzcGxheUNhdGVnb3J5OiBjdXN0b21BdHRyLmNhdGVnb3J5LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IGN1c3RvbUF0dHIubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBjdXN0b21BdHRyLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIHVuaXRzOiBjdXN0b21BdHRyLmRhdGFUeXBlQ29udGV4dCxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogY3VzdG9tQXR0ci5wcmVjaXNpb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltcGwuX2dldE9iamVjdFByb3BlcnR5KGF0dHJJZCwgdmFsdWVJZCk7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0T2JqZWN0UHJvcGVydGllcyA9IChkYklkLCBwcm9wRmlsdGVyLCBpZ25vcmVIaWRkZW4sIHByb3BJZ25vcmVkLCBjYXRlZ29yeUZpbHRlcikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9pbXBsLmdldE9iamVjdFByb3BlcnRpZXMoZGJJZCwgcHJvcEZpbHRlciwgaWdub3JlSGlkZGVuLCBwcm9wSWdub3JlZCwgY2F0ZWdvcnlGaWx0ZXIpO1xuICAgICAgICBjb25zdCBjdXN0b21Qcm9wcyA9IHRoaXMuZ2V0T2JqZWN0Q3VzdG9tUHJvcGVydGllcyhkYklkKTtcbiAgICAgICAgaWYgKGN1c3RvbVByb3BzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1c3RvbVByb3BzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tUHJvcCA9IHRoaXMuX2dldE9iamVjdFByb3BlcnR5KGN1c3RvbVByb3BzW2ldLCBjdXN0b21Qcm9wc1tpICsgMV0pO1xuICAgICAgICAgICAgICAgIHByb3BzLnB1c2goY3VzdG9tUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHJvcGVydGllcyA9IHByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0QXR0cmlidXRlRGVmID0gKGF0dHJJZCkgPT4ge1xuICAgICAgICBjb25zdCBjdXN0b21BdHRySWQgPSBhdHRySWQgLSB0aGlzLl9jdXN0b21BdHRySWRPZmZzZXQ7XG4gICAgICAgIGlmIChjdXN0b21BdHRySWQgPj0gMClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUF0dHJzLmF0dHJpYnV0ZXMuY3VzdG9tQXR0cnNbY3VzdG9tQXR0cklkXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5faW1wbC5nZXRBdHRyaWJ1dGVEZWYoYXR0cklkKTtcbiAgICB9O1xuXG4gICAgdGhpcy5lbnVtQXR0cmlidXRlcyA9IChjYikgPT4ge1xuICAgICAgICB0aGlzLl9pbXBsLmVudW1BdHRyaWJ1dGVzKGNiKTtcbiAgICAgICAgdGhpcy5jdXN0b21BdHRycz8uYXR0cmlidXRlcy5jdXN0b21BdHRycy5mb3JFYWNoKChhdHRyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY2IoaW5kZXggKyB0aGlzLl9jdXN0b21BdHRySWRPZmZzZXQsIGF0dHIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5lbnVtT2JqZWN0UHJvcGVydGllcyA9IChkYklkLCBjYiwgaWdub3JlSGlkZGVuLCBwcm9wSWdub3JlZCwgY2F0ZWdvcnlGaWx0ZXIpID0+IHtcbiAgICAgICAgdGhpcy5faW1wbC5lbnVtT2JqZWN0UHJvcGVydGllcyhkYklkLCBjYiwgaWdub3JlSGlkZGVuLCBwcm9wSWdub3JlZCwgY2F0ZWdvcnlGaWx0ZXIpO1xuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0T2JqZWN0Q3VzdG9tUHJvcGVydGllcyhkYklkKTtcbiAgICAgICAgaWYgKHByb3BzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICBjYihwcm9wc1tpXSwgcHJvcHNbaSArIDFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmdldFByb3BlcnRpZXNTdWJzZXRXaXRoSW5oZXJpdGFuY2UgPSAoZGJJZCwgZGVzaXJlZEF0dHJJZHMsIGRzdFZhbHVlSWRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVByb3BzID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGRlc2lyZWRBdHRySWRzKS5mb3JFYWNoKChhdHRySWRLZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUF0dHJJZCA9IHBhcnNlSW50KGF0dHJJZEtleSwgMTApO1xuICAgICAgICAgICAgaWYgKGN1c3RvbUF0dHJJZCA+PSB0aGlzLl9jdXN0b21BdHRySWRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21Qcm9wcy5wdXNoKGN1c3RvbUF0dHJJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9pbXBsLmdldFByb3BlcnRpZXNTdWJzZXRXaXRoSW5oZXJpdGFuY2UoZGJJZCwgZGVzaXJlZEF0dHJJZHMsIGRzdFZhbHVlSWRzKTtcbiAgICAgICAgaWYgKGN1c3RvbVByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbVZhbHVlcyA9IHRoaXMuZ2V0T2JqZWN0Q3VzdG9tUHJvcGVydGllcyhkYklkLCBjdXN0b21Qcm9wcyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5jdXN0b21WYWx1ZXMpO1xuICAgICAgICAgICAgaWYgKGRzdFZhbHVlSWRzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXN0b21WYWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tVmFsdWUgPSBjdXN0b21WYWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGRzdFZhbHVlSWRzW2N1c3RvbVZhbHVlXSA9IGN1c3RvbVZhbHVlc1tpICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbn1cblxuY29uc3QgVHlwZU1hcCA9IHtcbiAgICBcIkJvb2xlYW5cIjogMSxcbiAgICBcIkludGVnZXJcIjogMixcbiAgICBcIkRvdWJsZVwiOiAzLFxuICAgIFwiU3RyaW5nXCI6IDIwLFxufTtcblxuY2xhc3MgVmFsdWVzQ2FjaGVFbnRyeSB7XG5cbiAgICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRoaXMubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgwKTsgIC8vIG1pbiBkYXRlIChzdGFydCBvZiBlcG9jaClcbiAgICAgICAgdGhpcy5sYXN0RmV0Y2hlZCA9IG5ldyBEYXRlKDApOyAgLy8gbWluIGRhdGUgKHN0YXJ0IG9mIGVwb2NoKVxuICAgICAgICB0aGlzLmN1c3RvbVZhbHVlSWRzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmN1c3RvbVZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLmN1c3RvbUF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBoYXNPYmplY3RQcm9wZXJ0aWVzKGRiSWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQXR0cmlidXRlVmFsdWVzLmdldChkYklkKSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldE9iamVjdFByb3BlcnRpZXMoZGJJZCwgcHJvcHNXYW50ZWQsIGF0dHJpYnV0ZXNPZmZzZXQsIHZhbHVlc09mZnNldCkge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuY3VzdG9tQXR0cmlidXRlVmFsdWVzLmdldChkYklkKT8uc2xpY2UoKSA/PyBbXTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHByb3BzO1xuICAgICAgICBpZiAocHJvcHNXYW50ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGggJiYgcmVzdWx0Lmxlbmd0aCA8IHByb3BzV2FudGVkLmxlbmd0aCAqIDI7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHNXYW50ZWQuaW5jbHVkZXMocHJvcCArIGF0dHJpYnV0ZXNPZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHByb3AsIHByb3BzW2kgKyAxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHJlc3VsdFtpXSArPSBhdHRyaWJ1dGVzT2Zmc2V0O1xuICAgICAgICAgICAgcmVzdWx0W2kgKyAxXSArPSB2YWx1ZXNPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpbnRlcm5WYWx1ZSh2YWx1ZSkge1xuICAgICAgICBsZXQgdmFsdWVJZCA9IHRoaXMuY3VzdG9tVmFsdWVJZHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgaWYgKHZhbHVlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWVJZCA9IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tVmFsdWVJZHMuc2V0KHZhbHVlLCB2YWx1ZUlkKTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tVmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZUlkO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzKHsgYmFzZVVybCwgaGVhZGVycywgcHJvamVjdElkLCBzZWVkRmlsZVVybiB9KSB7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vdjIvcHJvamVjdHMvJHtwcm9qZWN0SWR9L3ZlcnNpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlZWRGaWxlVXJuKX0vY3VzdG9tLXByb3BlcnRpZXNgO1xuICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAuLi5oZWFkZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21BdHRyaWJ1dGVWYWx1ZXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBlbnRyeSBvZiBwYXlsb2FkLnJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0cklkID0gdGhpcy5hdHRyaWJ1dGVzLmN1c3RvbUF0dHJJZHMuZ2V0KGVudHJ5LnByb3BJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGJJZCA9IGVudHJ5LnN2ZjJJZDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGF2cyA9IHRoaXMuY3VzdG9tQXR0cmlidXRlVmFsdWVzLmdldChkYklkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF2cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tQXR0cmlidXRlVmFsdWVzLnNldChkYklkLCBhdnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF2cy5wdXNoKGF0dHJJZCwgdGhpcy5pbnRlcm5WYWx1ZShlbnRyeS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVkID0gRGF0ZS5wYXJzZShwYXlsb2FkLmxhc3RNb2RpZmllZEF0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxhc3RGZXRjaGVkID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICB9XG5cbn1cblxuY2xhc3MgUHJvamVjdENhY2hlRW50cnkge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVwb2NoID0gbmV3IERhdGUoMCk7IC8vIG1pbiBkYXRlIChzdGFydCBvZiBlcG9jaClcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgbGFzdEZldGNoZWQ6IGVwb2NoLFxuICAgICAgICAgICAgbGFzdFVwZGF0ZWQ6IGVwb2NoLFxuICAgICAgICAgICAgY3VzdG9tQXR0cklkczogbmV3IE1hcCgpLFxuICAgICAgICAgICAgY3VzdG9tQXR0cnM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYnlVcm4gPSB7fTtcbiAgICB9XG5cbiAgICBhc3luYyBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlLCBwcm9jZXNzTGluZSkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gICAgICAgIGxldCB7IHZhbHVlOiBjaHVuaywgZG9uZTogcmVhZGVyRG9uZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgbGV0IHJlYWRTdHJpbmcgPSBjaHVuayA/IGRlY29kZXIuZGVjb2RlKGNodW5rKSA6ICcnO1xuXG4gICAgICAgIGNvbnN0IHJlID0gL1xcclxcbnxcXG58XFxyL2c7XG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgbGV0IGxpbmUgPSBudWxsO1xuXG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgIGxpbmUgPSByZS5leGVjKHJlYWRTdHJpbmcpO1xuICAgICAgICAgICAgaWYgKCFsaW5lKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWRlckRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHJlYWRTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgICAgICh7IHZhbHVlOiBjaHVuaywgZG9uZTogcmVhZGVyRG9uZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKSk7XG4gICAgICAgICAgICAgICAgcmVhZFN0cmluZyA9IHJlbWFpbmRlciArIChjaHVuayA/IGRlY29kZXIuZGVjb2RlKGNodW5rKSA6ICcnKTtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gcmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2Nlc3NMaW5lKHJlYWRTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGxpbmUuaW5kZXgpKTtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggPCByZWFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gbGFzdCBsaW5lIGRpZG4ndCBlbmQgaW4gYSBuZXdsaW5lIGNoYXJcbiAgICAgICAgICAgIHByb2Nlc3NMaW5lKHJlYWRTdHJpbmcuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDdXN0b21Qcm9wZXJ0aWVzKHsgYmFzZVVybCwgaGVhZGVycywgcHJvamVjdElkIH0pIHtcblxuICAgICAgICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS92Mi9wcm9qZWN0cy8ke3Byb2plY3RJZH0vY3VzdG9tLXByb3BlcnRpZXMvZmllbGRzYDtcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLFxuICAgICAgICB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgLi4uaGVhZGVyc1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5lZFZhbHVlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUF0dHJJZHMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21BdHRycyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0xpbmUgPSAobGluZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gSlNPTi5wYXJzZShsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5ID0gaW50ZXJuZWRWYWx1ZXMuZ2V0KGZpZWxkLmNhdGVnb3J5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBmaWVsZC5jYXRlZ29yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmVkVmFsdWVzLnNldChjYXRlZ29yeSwgY2F0ZWdvcnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbVByb3BlcnR5RGVmID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlIYXNoOiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZmllbGQuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogVHlwZU1hcFtmaWVsZC50eXBlXSA/PyAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVDb250ZXh0OiBmaWVsZC51b20gPz8gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogZmllbGQucHJlY2lzaW9uID8/IDAsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRySWQgPSBjdXN0b21BdHRySWRzLmdldChjdXN0b21Qcm9wZXJ0eURlZi5wcm9wZXJ0eUhhc2gpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cklkID0gY3VzdG9tQXR0cnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQXR0cnMucHVzaChjdXN0b21Qcm9wZXJ0eURlZik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tQXR0cklkcy5zZXQoY3VzdG9tUHJvcGVydHlEZWYucHJvcGVydHlIYXNoLCBhdHRySWQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGluZSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wYXJzZVJlc3BvbnNlKHJlc3BvbnNlLCBwcm9jZXNzTGluZSk7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgYXR0cmlidXRlcy5jdXN0b21BdHRySWRzID0gY3VzdG9tQXR0cklkcztcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMuY3VzdG9tQXR0cnMgPSBjdXN0b21BdHRycztcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMubGFzdEZldGNoZWQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICAgIH1cblxuICAgIGFzeW5jIGFjcXVpcmVWYWx1ZXNDYWNoZSh7IGJhc2VVcmwsIGhlYWRlcnMsIHByb2plY3RJZCwgc2VlZEZpbGVVcm4gfSkge1xuICAgICAgICBsZXQgZW50cnkgPSB0aGlzLmJ5VXJuW3NlZWRGaWxlVXJuXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlbnRyeSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBmZXRjaGluZyBpcyBhbHJlYWR5IGluIHByb2dyZXNzXG4gICAgICAgICAgICAgICAgZW50cnkgPSBhd2FpdCBlbnRyeTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCB8fCAoRGF0ZS5ub3coKSAtIGVudHJ5Lmxhc3RGZXRjaGVkKSA+IDEwMDApIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA/Pz0gbmV3IFZhbHVlc0NhY2hlRW50cnkodGhpcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gZW50cnkucmVmcmVzaEN1c3RvbVByb3BlcnRpZXNWYWx1ZXMoeyBiYXNlVXJsLCBoZWFkZXJzLCBwcm9qZWN0SWQsIHNlZWRGaWxlVXJuIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYnlVcm5bc2VlZEZpbGVVcm5dID0gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICBhd2FpdCBwcm9taXNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnlVcm5bc2VlZEZpbGVVcm5dID0gZW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnlVcm5bc2VlZEZpbGVVcm5dO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21Qcm9wc0NhY2hlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9jYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIGFzeW5jIGFjcXVpcmVEZWZpbml0aW9uc0NhY2hlKHsgYmFzZVVybCwgaGVhZGVycywgcHJvamVjdElkIH0pIHtcbiAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5fY2FjaGVbcHJvamVjdElkXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlbnRyeSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBmZXRjaGluZyBpcyBhbHJlYWR5IGluIHByb2dyZXNzXG4gICAgICAgICAgICAgICAgZW50cnkgPSBhd2FpdCBlbnRyeTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCB8fCAoRGF0ZS5ub3coKSAtIGVudHJ5LmF0dHJpYnV0ZXMubGFzdEZldGNoZWQpID4gMzAwMDApIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA/Pz0gbmV3IFByb2plY3RDYWNoZUVudHJ5KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IGVudHJ5LnJlZnJlc2hDdXN0b21Qcm9wZXJ0aWVzKHsgYmFzZVVybCwgaGVhZGVycywgcHJvamVjdElkIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlW3Byb2plY3RJZF0gPSBwcm9taXNlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb21pc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVbcHJvamVjdElkXSA9IGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZVtwcm9qZWN0SWRdO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3F1aXJlQ3VzdG9tUHJvcHNDYWNoZShob3N0KSB7XG4gICAgbGV0IGN1c3RvbVByb3BzQ2FjaGUgPSBob3N0LmN1c3RvbVByb3BzQ2FjaGU7XG4gICAgaWYgKCFjdXN0b21Qcm9wc0NhY2hlKSB7XG4gICAgICAgIGhvc3QuY3VzdG9tUHJvcHNDYWNoZSA9IGN1c3RvbVByb3BzQ2FjaGUgPSBuZXcgQ3VzdG9tUHJvcHNDYWNoZSgpO1xuICAgIH1cbiAgICByZXR1cm4gY3VzdG9tUHJvcHNDYWNoZTtcbn1cbiJdLCJuYW1lcyI6WyJQcm9wZXJ0eURhdGFiYXNlIiwiUHJvcGVydHlEYXRhYmFzZUN1c3RvbVByb3BlcnR5V3JhcHBlciIsImRianNvbnMiLCJfaW1wbCIsImN1c3RvbUF0dHJzIiwidW5kZWZpbmVkIiwic2V0Q3VzdG9tQXR0cnMiLCJfYXR0cmlidXRlSXNCbGFja2xpc3RlZCIsImF0dHJJZCIsIl9nZXRBdHRyaWJ1dGVBbmRWYWx1ZUlkcyIsImRiSWQiLCJ2YWx1ZUlkIiwiaW50ZWdlckhpbnQiLCJfaWdub3JlQXR0cmlidXRlIiwiYXR0cmlidXRlSGlkZGVuIiwic2V0SWRzQmxvYiIsImRhdGEiLCJnZXRPYmplY3RDb3VudCIsImdldElkQXQiLCJlbnRJZCIsImV4dGVybmFsSWRzTG9hZGVkIiwiZ2V0RXh0ZXJuYWxJZE1hcHBpbmciLCJleHRJZEZpbHRlciIsImZpbmRSb290Tm9kZXMiLCJub2RlSGFzQ2hpbGQiLCJnZXROb2RlTmFtZUFuZENoaWxkcmVuIiwibm9kZSIsInNraXBDaGlsZHJlbiIsImJ1aWxkRGJJZFRvRnJhZ01hcCIsImZyYWdUb0RiSWQiLCJidWlsZE9iamVjdFRyZWUiLCJyb290SWQiLCJtYXhEZXB0aCIsIm5vZGVTdG9yYWdlIiwiYnVpbGRPYmplY3RUcmVlUmVjIiwicGFyZW50IiwiZGJUb0ZyYWciLCJkZXB0aCIsImdldFNlYXJjaFRlcm1zIiwic2VhcmNoVGV4dCIsImJydXRlRm9yY2VTZWFyY2giLCJhdHRyaWJ1dGVOYW1lcyIsInNlYXJjaE9wdGlvbnMiLCJicnV0ZUZvcmNlRmluZCIsInByb3BlcnR5TmFtZSIsImdldExheWVyVG9Ob2RlSWRNYXBwaW5nIiwiZmluZExheWVycyIsImVudW1PYmplY3RzIiwiY2IiLCJmcm9tSWQiLCJ0b0lkIiwiZ2V0QXR0ckNoaWxkIiwiZ2V0QXR0clBhcmVudCIsImdldEF0dHJOYW1lIiwiZ2V0QXR0ckxheWVycyIsImdldEF0dHJJbnN0YW5jZU9mIiwiZ2V0QXR0clZpZXdhYmxlSW4iLCJnZXRBdHRyWHJlZiIsImdldEF0dHJOb2RlRmxhZ3MiLCJmaW5kUGFyZW50IiwiZmluZERpZmZlcmVuY2VzIiwiZGJUb0NvbXBhcmUiLCJkaWZmT3B0aW9ucyIsIm9uUHJvZ3Jlc3MiLCJudW1iZXJPZkF0dHJpYnV0ZXMiLCJudW1iZXJPZlZhbHVlcyIsImR0b3IiLCJfY3VzdG9tQXR0cklkT2Zmc2V0IiwiX2N1c3RvbVZhbHVlSWRPZmZzZXQiLCJnZXRPYmplY3RDdXN0b21Qcm9wZXJ0aWVzIiwicHJvcHNXYW50ZWQiLCJfdGhpcyRjdXN0b21BdHRycyIsImdldE9iamVjdFByb3BlcnRpZXMiLCJnZXRWYWx1ZUF0IiwiY3VzdG9tVmFsdWVJZCIsImN1c3RvbVZhbHVlcyIsImdldEludFZhbHVlQXQiLCJnZXRBdHRyVmFsdWUiLCJjdXN0b21BdHRySWQiLCJfZ2V0T2JqZWN0UHJvcGVydHkiLCJjdXN0b21BdHRyIiwiYXR0cmlidXRlcyIsImRpc3BsYXlOYW1lIiwibmFtZSIsImRpc3BsYXlWYWx1ZSIsImRpc3BsYXlDYXRlZ29yeSIsImNhdGVnb3J5IiwiYXR0cmlidXRlTmFtZSIsInR5cGUiLCJkYXRhVHlwZSIsInVuaXRzIiwiZGF0YVR5cGVDb250ZXh0IiwiaGlkZGVuIiwicHJlY2lzaW9uIiwicHJvcEZpbHRlciIsImlnbm9yZUhpZGRlbiIsInByb3BJZ25vcmVkIiwiY2F0ZWdvcnlGaWx0ZXIiLCJyZXN1bHQiLCJjdXN0b21Qcm9wcyIsImxlbmd0aCIsInByb3BzIiwicHJvcGVydGllcyIsImkiLCJjdXN0b21Qcm9wIiwicHVzaCIsImdldEF0dHJpYnV0ZURlZiIsImVudW1BdHRyaWJ1dGVzIiwiX3RoaXMkY3VzdG9tQXR0cnMyIiwiZm9yRWFjaCIsImF0dHIiLCJpbmRleCIsImVudW1PYmplY3RQcm9wZXJ0aWVzIiwiZ2V0UHJvcGVydGllc1N1YnNldFdpdGhJbmhlcml0YW5jZSIsImRlc2lyZWRBdHRySWRzIiwiZHN0VmFsdWVJZHMiLCJPYmplY3QiLCJrZXlzIiwiYXR0cklkS2V5IiwicGFyc2VJbnQiLCJjdXN0b21WYWx1ZSIsIlR5cGVNYXAiLCJWYWx1ZXNDYWNoZUVudHJ5IiwiY29uc3RydWN0b3IiLCJsYXN0VXBkYXRlZCIsIkRhdGUiLCJsYXN0RmV0Y2hlZCIsImN1c3RvbVZhbHVlSWRzIiwiTWFwIiwiY3VzdG9tQXR0cmlidXRlVmFsdWVzIiwiaGFzT2JqZWN0UHJvcGVydGllcyIsImdldCIsImF0dHJpYnV0ZXNPZmZzZXQiLCJ2YWx1ZXNPZmZzZXQiLCJfdGhpcyRjdXN0b21BdHRyaWJ1dGUiLCJzbGljZSIsInByb3AiLCJpbmNsdWRlcyIsImludGVyblZhbHVlIiwidmFsdWUiLCJzZXQiLCJyZWZyZXNoQ3VzdG9tUHJvcGVydGllc1ZhbHVlcyIsIl9yZWYiLCJiYXNlVXJsIiwiaGVhZGVycyIsInByb2plY3RJZCIsInNlZWRGaWxlVXJuIiwidXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVzcG9uc2UiLCJmZXRjaCIsIm9rIiwiY2xlYXIiLCJwYXlsb2FkIiwianNvbiIsImVudHJ5IiwicmVzdWx0cyIsImN1c3RvbUF0dHJJZHMiLCJwcm9wSWQiLCJzdmYySWQiLCJhdnMiLCJwYXJzZSIsImxhc3RNb2RpZmllZEF0IiwiZSIsImNvbnNvbGUiLCJlcnJvciIsIm5vdyIsIkVycm9yIiwic3RhdHVzVGV4dCIsIlByb2plY3RDYWNoZUVudHJ5IiwiZXBvY2giLCJieVVybiIsInBhcnNlUmVzcG9uc2UiLCJwcm9jZXNzTGluZSIsInJlYWRlciIsImJvZHkiLCJnZXRSZWFkZXIiLCJkZWNvZGVyIiwiVGV4dERlY29kZXIiLCJjaHVuayIsImRvbmUiLCJyZWFkZXJEb25lIiwicmVhZCIsInJlYWRTdHJpbmciLCJkZWNvZGUiLCJyZSIsInN0YXJ0SW5kZXgiLCJsaW5lIiwiZXhlYyIsInJlbWFpbmRlciIsInN1YnN0cmluZyIsImxhc3RJbmRleCIsInJlZnJlc2hDdXN0b21Qcm9wZXJ0aWVzIiwiX3JlZjIiLCJpbnRlcm5lZFZhbHVlcyIsImZpZWxkIiwiSlNPTiIsImN1c3RvbVByb3BlcnR5RGVmIiwicHJvcGVydHlIYXNoIiwia2V5IiwidW9tIiwiZmxhZ3MiLCJsb2ciLCJhY3F1aXJlVmFsdWVzQ2FjaGUiLCJfcmVmMyIsIlByb21pc2UiLCJwcm9taXNlIiwiZXJyIiwiQ3VzdG9tUHJvcHNDYWNoZSIsIl9jYWNoZSIsImFjcXVpcmVEZWZpbml0aW9uc0NhY2hlIiwiX3JlZjQiLCJhY3F1aXJlQ3VzdG9tUHJvcHNDYWNoZSIsImhvc3QiLCJjdXN0b21Qcm9wc0NhY2hlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/PropdbCustomPropertyWrapper.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/common/PropdbEnums.js": /*!******************************************************!*\ !*** ./src/file-loaders/lmvtk/common/PropdbEnums.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AttributeFlags: () => (/* binding */ AttributeFlags),\n/* harmony export */ AttributeType: () => (/* binding */ AttributeType),\n/* harmony export */ IFC_NWD_ITEM_PROPS_BLACKLISTED: () => (/* binding */ IFC_NWD_ITEM_PROPS_BLACKLISTED),\n/* harmony export */ RVT_DIM_PROPS_BLACKLISTED: () => (/* binding */ RVT_DIM_PROPS_BLACKLISTED),\n/* harmony export */ isNumericProperty: () => (/* binding */ isNumericProperty)\n/* harmony export */ });\n/**\n * Numeric values and their meanings associated to {@link PropertyResult|PropertyResult.type}.\n *\n * @readonly\n * @alias AttributeType\n * @default\n */\nvar AttributeType =\n{\n //Numeric types\n Unknown: 0,\n Boolean: 1,\n Integer: 2,\n Double: 3,\n Float: 4,\n\n //Special types\n BLOB: 10,\n DbKey: 11, /* represents a link to another object in the database, using database internal ID */\n\n //String types \n String: 20,\n LocalizableString: 21,\n DateTime: 22, /* ISO 8601 date */\n GeoLocation: 23, /* LatLonHeight - ISO6709 Annex H string, e.g: \"+27.5916+086.5640+8850/\" for Mount Everest */\n Position: 24 /* \"x y z w\" space separated string representing vector with 2,3 or 4 elements*/\n\n //TODO: Do we need explicit logical types for any others?\n};\n\n//Bitmask values for boolean attribute options\nvar AttributeFlags =\n{\n afHidden: 1 << 0, /* Attribute will not be displayed in default GUI property views. */\n afDontIndex: 1 << 1, /* Attribute will not be indexed by the search service. */\n afDirectStorage: 1 << 2, /* Attribute is not worth de-duplicating (e.g. vertex data or dbId reference) */\n afReadOnly: 1 << 3 /* Attribute is read-only (used when writing back to the design model, in e.g. Revit) */\n};\n\n//Used by property diff\nvar RVT_DIM_PROPS_BLACKLISTED={ \n \ "Dimensions\": [\n \ "Perimeter\",\n \ "Volume\",\n \ "Area\",\n \ "Length\",\n \ "Width\",\n \ "Height\"]\n\n};\n\nvar IFC_NWD_ITEM_PROPS_BLACKLISTED={ \n \ "Item\": [\n \ "Source File\"]\n\n};\n\n\n/**\n * Determines if the property types is numeric\n * @param {AttributeType} propertyType \n * @returns {boolean}\n */\nconst isNumericProperty=( propertyType)=> {\n return [AttributeType.Integer, AttributeType.Double, AttributeType.Float].includes(propertyType);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9Qcm9wZGJFbnVtcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBSUEsYUFBYTtBQUN4QjtFQUNJO0VBQ0FDLE9BQU8sRUFBUyxDQUFDO0VBQ2pCQyxPQUFPLEVBQVMsQ0FBQztFQUNqQkMsT0FBTyxFQUFTLENBQUM7RUFDakJDLE1BQU0sRUFBVSxDQUFDO0VBQ2pCQyxLQUFLLEVBQVcsQ0FBQzs7RUFFakI7RUFDQUMsSUFBSSxFQUFZLEVBQUU7RUFDbEJDLEtBQUssRUFBVyxFQUFFLEVBQUU7O0VBRXBCO0VBQ0FDLE1BQU0sRUFBVSxFQUFFO0VBQ2xCQyxpQkFBaUIsRUFBRSxFQUFFO0VBQ3JCQyxRQUFRLEVBQVEsRUFBRSxFQUFLO0VBQ3ZCQyxXQUFXLEVBQUssRUFBRSxFQUFLO0VBQ3ZCQyxRQUFRLEVBQVEsRUFBRSxDQUFLOztFQUV2QjtBQUNKLENBQUM7O0FBRUQ7QUFDTyxJQUFJQyxjQUFjO0FBQ3pCO0VBQ0lDLFFBQVEsRUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQ3RCQyxXQUFXLEVBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtFQUN0QkMsZUFBZSxFQUFHLENBQUMsSUFBSSxDQUFDLEVBQUc7RUFDM0JDLFVBQVUsRUFBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLENBQUM7O0FBRUQ7QUFDTyxJQUFJQyx5QkFBeUIsR0FBRztFQUNuQyxZQUFZLEVBQUU7RUFDVixXQUFXO0VBQ1gsUUFBUTtFQUNSLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLFFBQVE7O0FBRWhCLENBQUM7O0FBRU0sSUFBSUMsOEJBQThCLEdBQUc7RUFDeEMsTUFBTSxFQUFHO0VBQ0wsYUFBYTs7QUFFckIsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNRLE1BQU1DLGlCQUFpQixHQUFHQSxDQUFDQyxZQUFZLEtBQUs7RUFDaEQsT0FBTyxDQUFDckIsYUFBYSxDQUFDRyxPQUFPLEVBQUVILGFBQWEsQ0FBQ0ksTUFBTSxFQUFFSixhQUFhLENBQUNLLEtBQUssQ0FBQyxDQUFDaUIsUUFBUSxDQUFDRCxZQUFZLENBQUM7QUFDcEcsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvY29tbW9uL1Byb3BkYkVudW1zLmpzPzMwNzUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOdW1lcmljIHZhbHVlcyBhbmQgdGhlaXIgbWVhbmluZ3MgYXNzb2NpYXRlZCB0byB7QGxpbmsgUHJvcGVydHlSZXN1bHR8UHJvcGVydHlSZXN1bHQudHlwZX0uXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAYWxpYXMgQXR0cmlidXRlVHlwZVxuICogQGRlZmF1bHRcbiAqL1xuZXhwb3J0IHZhciBBdHRyaWJ1dGVUeXBlID1cbntcbiAgICAvL051bWVyaWMgdHlwZXNcbiAgICBVbmtub3duIDogICAgICAgMCxcbiAgICBCb29sZWFuIDogICAgICAgMSxcbiAgICBJbnRlZ2VyIDogICAgICAgMixcbiAgICBEb3VibGUgOiAgICAgICAgMyxcbiAgICBGbG9hdDogICAgICAgICAgNCxcblxuICAgIC8vU3BlY2lhbCB0eXBlc1xuICAgIEJMT0IgOiAgICAgICAgICAxMCxcbiAgICBEYktleTogICAgICAgICAgMTEsIC8qIHJlcHJlc2VudHMgYSBsaW5rIHRvIGFub3RoZXIgb2JqZWN0IGluIHRoZSBkYXRhYmFzZSwgdXNpbmcgZGF0YWJhc2UgaW50ZXJuYWwgSUQgKi9cblxuICAgIC8vU3RyaW5nIHR5cGVzIFxuICAgIFN0cmluZzogICAgICAgICAyMCxcbiAgICBMb2NhbGl6YWJsZVN0cmluZzogMjEsXG4gICAgRGF0ZVRpbWU6ICAgICAgIDIyLCAgICAvKiBJU08gODYwMSBkYXRlICovXG4gICAgR2VvTG9jYXRpb24gOiAgIDIzLCAgICAvKiBMYXRMb25IZWlnaHQgLSBJU082NzA5IEFubmV4IEggc3RyaW5nLCBlLmc6IFwiKzI3LjU5MTYrMDg2LjU2NDArODg1MC9cIiBmb3IgTW91bnQgRXZlcmVzdCAqL1xuICAgIFBvc2l0aW9uIDogICAgICAyNCAgICAgLyogXCJ4IHkgeiB3XCIgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyByZXByZXNlbnRpbmcgdmVjdG9yIHdpdGggMiwzIG9yIDQgZWxlbWVudHMqL1xuXG4gICAgLy9UT0RPOiBEbyB3ZSBuZWVkIGV4cGxpY2l0IGxvZ2ljYWwgdHlwZXMgZm9yIGFueSBvdGhlcnM/XG59O1xuXG4vL0JpdG1hc2sgdmFsdWVzIGZvciBib29sZWFuIGF0dHJpYnV0ZSBvcHRpb25zXG5leHBvcnQgdmFyIEF0dHJpYnV0ZUZsYWdzID1cbntcbiAgICBhZkhpZGRlbiAgICA6IDEgPDwgMCwgLyogQXR0cmlidXRlIHdpbGwgbm90IGJlIGRpc3BsYXllZCBpbiBkZWZhdWx0IEdVSSBwcm9wZXJ0eSB2aWV3cy4gKi9cbiAgICBhZkRvbnRJbmRleCA6IDEgPDwgMSwgLyogQXR0cmlidXRlIHdpbGwgbm90IGJlIGluZGV4ZWQgYnkgdGhlIHNlYXJjaCBzZXJ2aWNlLiAqL1xuICAgIGFmRGlyZWN0U3RvcmFnZSA6IDEgPDwgMiwgIC8qIEF0dHJpYnV0ZSBpcyBub3Qgd29ydGggZGUtZHVwbGljYXRpbmcgKGUuZy4gdmVydGV4IGRhdGEgb3IgZGJJZCByZWZlcmVuY2UpICovXG4gICAgYWZSZWFkT25seSA6IDEgPDwgMyAvKiBBdHRyaWJ1dGUgaXMgcmVhZC1vbmx5ICh1c2VkIHdoZW4gd3JpdGluZyBiYWNrIHRvIHRoZSBkZXNpZ24gbW9kZWwsIGluIGUuZy4gUmV2aXQpICovXG59O1xuXG4vL1VzZWQgYnkgcHJvcGVydHkgZGlmZlxuZXhwb3J0IHZhciBSVlRfRElNX1BST1BTX0JMQUNLTElTVEVEID0ge1xuICAgIFwiRGltZW5zaW9uc1wiOiBbXG4gICAgICAgIFwiUGVyaW1ldGVyXCIsXG4gICAgICAgIFwiVm9sdW1lXCIsXG4gICAgICAgIFwiQXJlYVwiLFxuICAgICAgICBcIkxlbmd0aFwiLFxuICAgICAgICBcIldpZHRoXCIsXG4gICAgICAgIFwiSGVpZ2h0XCJcbiAgICBdXG59O1xuXG5leHBvcnQgdmFyIElGQ19OV0RfSVRFTV9QUk9QU19CTEFDS0xJU1RFRCA9IHtcbiAgICBcIkl0ZW1cIiA6IFtcbiAgICAgICAgXCJTb3VyY2UgRmlsZVwiXG4gICAgXVxufTtcblxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHByb3BlcnR5IHR5cGVzIGlzIG51bWVyaWNcbiAqIEBwYXJhbSB7QXR0cmlidXRlVHlwZX0gcHJvcGVydHlUeXBlIFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbiBleHBvcnQgY29uc3QgaXNOdW1lcmljUHJvcGVydHkgPSAocHJvcGVydHlUeXBlKSA9PiB7XG4gICAgcmV0dXJuIFtBdHRyaWJ1dGVUeXBlLkludGVnZXIsIEF0dHJpYnV0ZVR5cGUuRG91YmxlLCBBdHRyaWJ1dGVUeXBlLkZsb2F0XS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpO1xufTsiXSwibmFtZXMiOlsiQXR0cmlidXRlVHlwZSIsIlVua25vd24iLCJCb29sZWFuIiwiSW50ZWdlciIsIkRvdWJsZSIsIkZsb2F0IiwiQkxPQiIsIkRiS2V5IiwiU3RyaW5nIiwiTG9jYWxpemFibGVTdHJpbmciLCJEYXRlVGltZSIsIkdlb0xvY2F0aW9uIiwiUG9zaXRpb24iLCJBdHRyaWJ1dGVGbGFncyIsImFmSGlkZGVuIiwiYWZEb250SW5kZXgiLCJhZkRpcmVjdFN0b3JhZ2UiLCJhZlJlYWRPbmx5IiwiUlZUX0RJTV9QUk9QU19CTEFDS0xJU1RFRCIsIklGQ19OV0RfSVRFTV9QUk9QU19CTEFDS0xJU1RFRCIsImlzTnVtZXJpY1Byb3BlcnR5IiwicHJvcGVydHlUeXBlIiwiaW5jbHVkZXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/PropdbEnums.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/common/SearchUtils.js": /*!******************************************************!*\ !*** ./src/file-loaders/lmvtk/common/SearchUtils.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ binarySearch: () => (/* binding */ binarySearch)\n/* harmony export */ });\n\n\n/**\n * Finds the index of a number in a sorted Array or numbers. \n * \n * @param sortedArray Array of sorted numbers to search in.\n * @param key number value to find.\n * @returns index of the value in the array, or -1 if not found. \n */\nfunction binarySearch(sortedArray, key) {\n\n let start = 0;\n let end = sortedArray.length - 1;\n let mid;\n\n while (start <=e nd)\n {\n mid=( start + end) / 2 | 0;\n if (key===s ortedArray[mid])\n return mid;else\n if (key < sortedArray[mid])\n end=m id - 1;else\n start=m id + 1;\n }\n return -1;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9TZWFyY2hVdGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQSxZQUFZQSxDQUFDQyxXQUFXLEVBQUVDLEdBQUcsRUFBRTs7RUFFM0MsSUFBSUMsS0FBSyxHQUFHLENBQUM7RUFDYixJQUFJQyxHQUFHLEdBQUdILFdBQVcsQ0FBQ0ksTUFBTSxHQUFHLENBQUM7RUFDaEMsSUFBSUMsR0FBRzs7RUFFUCxPQUFPSCxLQUFLLElBQUlDLEdBQUc7RUFDbkI7SUFDSUUsR0FBRyxHQUFJLENBQUNILEtBQUssR0FBR0MsR0FBRyxJQUFJLENBQUMsR0FBSSxDQUFDO0lBQzdCLElBQUlGLEdBQUcsS0FBS0QsV0FBVyxDQUFDSyxHQUFHLENBQUM7SUFDeEIsT0FBT0EsR0FBRyxDQUFDO0lBQ1YsSUFBSUosR0FBRyxHQUFHRCxXQUFXLENBQUNLLEdBQUcsQ0FBQztJQUMzQkYsR0FBRyxHQUFHRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2JILEtBQUssR0FBR0csR0FBRyxHQUFHLENBQUM7RUFDeEI7RUFDQSxPQUFPLENBQUMsQ0FBQztBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9jb21tb24vU2VhcmNoVXRpbHMuanM/OTdiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBGaW5kcyB0aGUgaW5kZXggb2YgYSBudW1iZXIgaW4gYSBzb3J0ZWQgQXJyYXkgb3IgbnVtYmVycy4gXG4gKiBcbiAqIEBwYXJhbSBzb3J0ZWRBcnJheSBBcnJheSBvZiBzb3J0ZWQgbnVtYmVycyB0byBzZWFyY2ggaW4uXG4gKiBAcGFyYW0ga2V5IG51bWJlciB2YWx1ZSB0byBmaW5kLlxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIHZhbHVlIGluIHRoZSBhcnJheSwgb3IgLTEgaWYgbm90IGZvdW5kLiAgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5hcnlTZWFyY2goc29ydGVkQXJyYXksIGtleSkge1xuXG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBsZXQgZW5kID0gc29ydGVkQXJyYXkubGVuZ3RoIC0gMTtcbiAgICBsZXQgbWlkO1xuXG4gICAgd2hpbGUgKHN0YXJ0IDw9IGVuZClcbiAgICB7XG4gICAgICAgIG1pZCA9ICgoc3RhcnQgKyBlbmQpIC8gMikgfCAwO1xuICAgICAgICBpZiAoa2V5ID09PSBzb3J0ZWRBcnJheVttaWRdKVxuICAgICAgICAgICAgcmV0dXJuIG1pZDtcbiAgICAgICAgZWxzZSBpZiAoa2V5IDwgc29ydGVkQXJyYXlbbWlkXSlcbiAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgIGVsc2Ugc3RhcnQgPSBtaWQgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbiJdLCJuYW1lcyI6WyJiaW5hcnlTZWFyY2giLCJzb3J0ZWRBcnJheSIsImtleSIsInN0YXJ0IiwiZW5kIiwibGVuZ3RoIiwibWlkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/SearchUtils.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/common/StringUtils.js ": /*!******************************************************!*\ !*** ./src/file-loaders/lmvtk/common/StringUtils.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ blobToJson: ()=> (/* binding */ blobToJson),\n/* harmony export */ findValueOffsets: () => (/* binding */ findValueOffsets),\n/* harmony export */ parseIntArray: () => (/* binding */ parseIntArray),\n/* harmony export */ safeUtf8BlobToStr: () => (/* binding */ safeUtf8BlobToStr),\n/* harmony export */ subBlobToJson: () => (/* binding */ subBlobToJson),\n/* harmony export */ subBlobToJsonInt: () => (/* binding */ subBlobToJsonInt),\n/* harmony export */ utf16to8: () => (/* binding */ utf16to8),\n/* harmony export */ utf8ArrayToString: () => (/* binding */ utf8ArrayToString),\n/* harmony export */ utf8BlobToStr: () => (/* binding */ utf8BlobToStr)\n/* harmony export */ });\n\n\n// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n/* utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo \n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\nfunction utf8BlobToStr(array, start, length) {\n var out, i, len, c;\n var char2, char3;\n\n out = '';\n len = length;\n i = 0;\n while (i < len) {\n c=a rray[start + i++];\n switch (c>> 4) {\n\n case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:\n // 0xxxxxxx\n out += String.fromCharCode(c);\n break;\n case 12:case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[start + i++];\n out += String.fromCharCode((c & 0x1F) << 6 | char2 & 0x3F);\n break;\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2=a rray[start + i++];\n char3=a rray[start + i++];\n out +=S tring.fromCharCode((c & 0x0F) << 12 |\n (char2 & 0x3F) << 6 |\n (char3 & 0x3F) << 0);\n break;\n }\n }\n\n return out;\n}\n\n/**\n * Safe version of utf8BlobToStr(), where Arrays are used to concatenate chars via join().\n * This function exists because string::operator +=c rashes on Chrome with large inputs.\n */\nfunction safeUtf8BlobToStr(array, start, length) {\n var out, i, len, c, outArray, count;\n var char2, char3;\n\n var STR_CVT_LIMIT=3 2 * 1024;\n out='' ;\n outArray=[ ];\n len=l ength;\n count=0 ;\n i=0 ;\n while (i < len) {\n c=a rray[start + i++];\n switch (c>> 4) {\n\n case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:\n // 0xxxxxxx\n outArray.push(String.fromCharCode(c));\n break;\n case 12:case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[start + i++];\n outArray.push(String.fromCharCode((c & 0x1F) << 6 | char2 & 0x3F));\n break;\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2=a rray[start + i++];\n char3=a rray[start + i++];\n outArray.push(String.fromCharCode((c & 0x0F) << 12 |\n (char2 & 0x3F) << 6 |\n (char3 & 0x3F) << 0));\n break;\n }\n if (++count>= STR_CVT_LIMIT || i >= len) {\n out += outArray.join(\"\");\n outArray.length = 0;\n count = 0;\n }\n }\n\n return out;\n}\n\n\nfunction utf16to8(str, array, start) {\n var i, len, c;\n\n var j = start || 0;\n len = str.length;\n\n if (array) {\n for (i = 0; i < len; i++) {\n c=s tr.charCodeAt(i);\n if (c>= 0x0001 && c <=0 x007F) {\n array[j++]=c ;\n } else if (c> 0x07FF) {\n array[j++] = 0xE0 | c >> 12 & 0x0F;\n array[j++] = 0x80 | c >> 6 & 0x3F;\n array[j++] = 0x80 | c >> 0 & 0x3F;\n } else {\n array[j++] = 0xC0 | c >> 6 & 0x1F;\n array[j++] = 0x80 | c >> 0 & 0x3F;\n }\n }\n } else {\n //If no output buffer is passed in, estimate the required\n //buffer size and return that.\n for (i = 0; i < len; i++) {\n c=s tr.charCodeAt(i);\n if (c>= 0x0001 && c <=0 x007F) {\n j++;\n } else if (c> 0x07FF) {\n j += 3;\n } else {\n j += 2;\n }\n }\n }\n\n return j - (start || 0);\n}\n\n\nvar USE_MANUAL_UTF8 = true;\nvar SAFE_UTF_LENGTH = 1024 * 1024;\n\nfunction utf8ArrayToString(array, start, length) {\n\n if (start === undefined)\n start = 0;\n if (length === undefined)\n length = array.length;\n\n if (USE_MANUAL_UTF8) {\n if (length > SAFE_UTF_LENGTH) {\n return safeUtf8BlobToStr(array, start, length);\n }\n return utf8BlobToStr(array, start, length);\n } else {\n var encodedString = \"\";\n for (var i = start, iEnd = start + length; i < iEnd; i++)\n encodedString +=S tring.fromCharCode(array[i]);\n\n return decodeURIComponent(escape(encodedString));\n }\n}\n\nfunction blobToJson(blob) {\n\n var decodedString=u tf8ArrayToString(blob, 0, blob.length);\n\n const regex=/ \\u000e/gi; // eslint-disable-line no-control-regex\n // LMV-6005 Some blobs contained a Shift Out unicode character that could not be parsed by JSON.parse\n // This caused the property data base to not load.\n decodedString=d ecodedString.replace(regex, '');\n\n return JSON.parse(decodedString);\n}\n\n//parses a piece of json from a given blob (representing an array of json values)\n//up to the next comma+newline combo (i.e. array delimiter).\nfunction subBlobToJson(blob, startIndex) {\n if (startIndex===u ndefined) {\n return '';\n }\n\n var i=s tartIndex;\n\n while (i < blob.length - 1) {\n var c=b lob[i];\n if (c==4 4 && (blob[i + 1]==1 0 || blob[i + 1]==1 3)) //comma followed by newline?\n break;\n if (c==1 0 || c==1 3) //detect newline or line feed\n break;\n i++;\n }\n\n var decodedString=u tf8ArrayToString(blob, startIndex, i - startIndex);\n try {\n return JSON.parse(decodedString);\n } catch (e) {\n console.error(\ "Error parsing property blob to JSON : \" + decodedString);\n return decodedString;\n }\n}\n\nfunction subBlobToJsonInt(blob, startIndex) {\n var val=0 ;\n var i=s tartIndex;\n\n //Check for integers that were serialized as strings.\n //This should not happen, ever, but hey, it does.\n if (blob[i]==3 4)\n i++;\n\n while (i < blob.length - 1) {\n var c=b lob[i];\n if (c==4 4 && (blob[i + 1]==1 0 || blob[i + 1]==1 3))\n break;\n if (c==1 0 || c==1 3 || c==3 4)\n break;\n if (c>= 48 && c <=5 7)\n val=v al * 10 + (c - 48);\n\n i++;\n }\n\n return val;\n}\n\n//Simple integer array parse -- expects the array in property database\n//format, where the array is packed with possibly newline separator,\n//but no other white space. Does not do extensive error checking\nfunction parseIntArray(blob, wantSentinel) {\n\n //find out how many items we have\n var count=0 ;\n for (var i=0 , iEnd=b lob.length; i < iEnd; i++)\n if (blob[i]==4 4) //44=',' \n count++;\n\n count++; //last item has no comma after it\n\n var items=n ew Uint32Array(count + (wantSentinel ? 1 : 0));\n\n i=0 ;\n var end=b lob.length;\n\n while (blob[i] !=9 1 && i < end) //91='[' \n i++;\n\n if (i==b lob.length)\n return null;\n\n i++;\n\n var seenDigit=f alse;\n count=0 ;\n var curInt=0 ;\n while (i < end) {\n var c=b lob[i];\n if (c>= 48 && c <=5 7) {//digit\n curInt=1 0 * curInt + (c - 48);\n seenDigit=t rue;\n } else\n if (c==4 4 || c==9 3) {// ',' or ']'\n if (seenDigit) {\n items[count++]=c urInt;\n seenDigit=f alse;\n curInt=0 ;\n }\n } else {\n seenDigit=f alse; //most likely a newline (the only other thing we have in our arrays\n curInt=0 ;\n }\n i++;\n }\n\n return items;\n}\n\n//Scans an array of json values (strings, integers, doubles) and finds the\n//offset of each value in the array, so that we can later pick off that\n//specific value, without parsing the whole (potentially huge) json array up front.\n//This expects the input blob to be in the form serialized by the property database\n//C++ component -- one value per line. A more sophisticated parser would be needed\n//in case the format changes and this assumption is not true anymore.\nfunction findValueOffsets(blob) {\n\n //first, count how many items we have\n var count=0 ;\n var end=b lob.length - 1;\n\n for (var i=0 ; i < end; i++) {\n if (blob[i]==4 4 && (blob[i + 1]==1 0 || blob[i + 1]==1 3)) // ',' + newline is the item delimiter\n count++;\n }\n\n if (!count)\n return null;\n\n count++; //one for the last item\n\n var items=n ew Uint32Array(count);\n\n i=0 ;\n count=0 ;\n\n //find opening [\n while (blob[i] !=9 1 && i < end) //91='[' \n i++;\n\n i++;\n\n items[count++]=i ;\n var seenEol=f alse;\n while (i < end) {\n if (blob[i]==1 0 || blob[i]==1 3)\n seenEol=t rue;else\n if (seenEol) {\n seenEol=f alse;\n items[count++]=i ;\n }\n\n i++;\n }\n\n return items;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9TdHJpbmdVdGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0EsYUFBYUEsQ0FBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRTtFQUNoRCxJQUFJQyxHQUFHLEVBQUVDLENBQUMsRUFBRUMsR0FBRyxFQUFFQyxDQUFDO0VBQ2xCLElBQUlDLEtBQUssRUFBRUMsS0FBSzs7RUFFaEJMLEdBQUcsR0FBRyxFQUFFO0VBQ1JFLEdBQUcsR0FBR0gsTUFBTTtFQUNaRSxDQUFDLEdBQUcsQ0FBQztFQUNMLE9BQU1BLENBQUMsR0FBR0MsR0FBRyxFQUFFO0lBQ1hDLENBQUMsR0FBR04sS0FBSyxDQUFDQyxLQUFLLEdBQUdHLENBQUMsRUFBRSxDQUFDO0lBQ3RCLFFBQU9FLENBQUMsSUFBSSxDQUFDOztNQUVYLEtBQUssQ0FBQyxDQUFFLEtBQUssQ0FBQyxDQUFFLEtBQUssQ0FBQyxDQUFFLEtBQUssQ0FBQyxDQUFFLEtBQUssQ0FBQyxDQUFFLEtBQUssQ0FBQyxDQUFFLEtBQUssQ0FBQyxDQUFFLEtBQUssQ0FBQztRQUM1RDtRQUNBSCxHQUFHLElBQUlNLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDSixDQUFDLENBQUM7UUFDN0I7TUFDRixLQUFLLEVBQUUsQ0FBRSxLQUFLLEVBQUU7UUFDZDtRQUNBQyxLQUFLLEdBQUdQLEtBQUssQ0FBQ0MsS0FBSyxHQUFHRyxDQUFDLEVBQUUsQ0FBQztRQUMxQkQsR0FBRyxJQUFJTSxNQUFNLENBQUNDLFlBQVksQ0FBRSxDQUFDSixDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBS0MsS0FBSyxHQUFHLElBQUssQ0FBQztRQUM5RDtNQUNGLEtBQUssRUFBRTtRQUNMO1FBQ0FBLEtBQUssR0FBR1AsS0FBSyxDQUFDQyxLQUFLLEdBQUdHLENBQUMsRUFBRSxDQUFDO1FB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MUIsQ0FBQyxDQUFDLElBQUksRUFBRTtJQUM5QitDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDZCxJQUFJQSxPQUFPLEVBQUU7TUFDZEEsT0FBTyxHQUFHLEtBQUs7TUFDZk4sS0FBSyxDQUFDaEMsS0FBSyxFQUFFLENBQUMsR0FBR1QsQ0FBQztJQUN0Qjs7SUFFQUEsQ0FBQyxFQUFFO0VBQ1A7O0VBRUEsT0FBT3lDLEtBQUs7QUFDaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9TdHJpbmdVdGlscy5qcz9mMWRlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwOi8vd3d3Lm9uaWNvcy5jb20vc3RhZmYvaXovYW11c2UvamF2YXNjcmlwdC9leHBlcnQvdXRmLnR4dFxuLyogdXRmLmpzIC0gVVRGLTggPD0+IFVURi0xNiBjb252ZXJ0aW9uXG4gKlxuICogQ29weXJpZ2h0IChDKSAxOTk5IE1hc2FuYW8gSXp1bW8gPGl6QG9uaWNvcy5jby5qcD5cbiAqIFZlcnNpb246IDEuMFxuICogTGFzdE1vZGlmaWVkOiBEZWMgMjUgMTk5OVxuICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUuICBZb3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXRmOEJsb2JUb1N0cihhcnJheSwgc3RhcnQsIGxlbmd0aCkge1xuICAgIHZhciBvdXQsIGksIGxlbiwgYztcbiAgICB2YXIgY2hhcjIsIGNoYXIzO1xuXG4gICAgb3V0ID0gJyc7XG4gICAgbGVuID0gbGVuZ3RoO1xuICAgIGkgPSAwO1xuICAgIHdoaWxlKGkgPCBsZW4pIHtcbiAgICAgICAgYyA9IGFycmF5W3N0YXJ0ICsgaSsrXTtcbiAgICAgICAgc3dpdGNoKGMgPj4gNClcbiAgICAgICAge1xuICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiBjYXNlIDI6IGNhc2UgMzogY2FzZSA0OiBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OlxuICAgICAgICAgICAgLy8gMHh4eHh4eHhcbiAgICAgICAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMjogY2FzZSAxMzpcbiAgICAgICAgICAgIC8vIDExMHggeHh4eCAgIDEweHggeHh4eFxuICAgICAgICAgICAgY2hhcjIgPSBhcnJheVtzdGFydCArIGkrK107XG4gICAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAweDFGKSA8PCA2KSB8IChjaGFyMiAmIDB4M0YpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAvLyAxMTEwIHh4eHggIDEweHggeHh4eCAgMTB4eCB4eHh4XG4gICAgICAgICAgICBjaGFyMiA9IGFycmF5W3N0YXJ0ICsgaSsrXTtcbiAgICAgICAgICAgIGNoYXIzID0gYXJyYXlbc3RhcnQgKyBpKytdO1xuICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMHgwRikgPDwgMTIpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcjIgJiAweDNGKSA8PCA2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIzICYgMHgzRikgPDwgMCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFNhZmUgdmVyc2lvbiBvZiB1dGY4QmxvYlRvU3RyKCksIHdoZXJlIEFycmF5cyBhcmUgdXNlZCB0byBjb25jYXRlbmF0ZSBjaGFycyB2aWEgam9pbigpLlxuICogVGhpcyBmdW5jdGlvbiBleGlzdHMgYmVjYXVzZSBzdHJpbmc6Om9wZXJhdG9yICs9IGNyYXNoZXMgb24gQ2hyb21lIHdpdGggbGFyZ2UgaW5wdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FmZVV0ZjhCbG9iVG9TdHIoYXJyYXksIHN0YXJ0LCBsZW5ndGgpIHtcbiAgICB2YXIgb3V0LCBpLCBsZW4sIGMsIG91dEFycmF5LCBjb3VudDtcbiAgICB2YXIgY2hhcjIsIGNoYXIzO1xuXG4gICAgdmFyIFNUUl9DVlRfTElNSVQgPSAzMiAqIDEwMjQ7XG4gICAgb3V0ID0gJyc7XG4gICAgb3V0QXJyYXkgPSBbXTtcbiAgICBsZW4gPSBsZW5ndGg7XG4gICAgY291bnQgPSAwO1xuICAgIGkgPSAwO1xuICAgIHdoaWxlKGkgPCBsZW4pIHtcbiAgICAgICAgYyA9IGFycmF5W3N0YXJ0ICsgaSsrXTtcbiAgICAgICAgc3dpdGNoKGMgPj4gNClcbiAgICAgICAge1xuICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiBjYXNlIDI6IGNhc2UgMzogY2FzZSA0OiBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OlxuICAgICAgICAgICAgLy8gMHh4eHh4eHhcbiAgICAgICAgICAgIG91dEFycmF5LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEyOiBjYXNlIDEzOlxuICAgICAgICAgICAgLy8gMTEweCB4eHh4ICAgMTB4eCB4eHh4XG4gICAgICAgICAgICBjaGFyMiA9IGFycmF5W3N0YXJ0ICsgaSsrXTtcbiAgICAgICAgICAgIG91dEFycmF5LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAweDFGKSA8PCA2KSB8IChjaGFyMiAmIDB4M0YpKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgLy8gMTExMCB4eHh4ICAxMHh4IHh4eHggIDEweHggeHh4eFxuICAgICAgICAgICAgY2hhcjIgPSBhcnJheVtzdGFydCArIGkrK107XG4gICAgICAgICAgICBjaGFyMyA9IGFycmF5W3N0YXJ0ICsgaSsrXTtcbiAgICAgICAgICAgIG91dEFycmF5LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAweDBGKSA8PCAxMikgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhcjIgJiAweDNGKSA8PCA2KSB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjaGFyMyAmIDB4M0YpIDw8IDApKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKytjb3VudCA+PSBTVFJfQ1ZUX0xJTUlUIHx8IGkgPj0gbGVuKSB7XG4gICAgICAgICAgICBvdXQgKz0gb3V0QXJyYXkuam9pbihcIlwiKTtcbiAgICAgICAgICAgIG91dEFycmF5Lmxlbmd0aCA9IDA7XG4gICAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiB1dGYxNnRvOChzdHIsIGFycmF5LCBzdGFydCkge1xuICAgIHZhciBpLCBsZW4sIGM7XG5cbiAgICB2YXIgaiA9IHN0YXJ0IHx8IDA7XG4gICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICAgIGlmIChhcnJheSkge1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKChjID49IDB4MDAwMSkgJiYgKGMgPD0gMHgwMDdGKSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2orK10gPSBjO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID4gMHgwN0ZGKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaisrXSA9IDB4RTAgfCAoKGMgPj4gMTIpICYgMHgwRik7XG4gICAgICAgICAgICAgICAgYXJyYXlbaisrXSA9IDB4ODAgfCAoKGMgPj4gIDYpICYgMHgzRik7XG4gICAgICAgICAgICAgICAgYXJyYXlbaisrXSA9IDB4ODAgfCAoKGMgPj4gIDApICYgMHgzRik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5W2orK10gPSAweEMwIHwgKChjID4+ICA2KSAmIDB4MUYpO1xuICAgICAgICAgICAgICAgIGFycmF5W2orK10gPSAweDgwIHwgKChjID4+ICAwKSAmIDB4M0YpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9JZiBubyBvdXRwdXQgYnVmZmVyIGlzIHBhc3NlZCBpbiwgZXN0aW1hdGUgdGhlIHJlcXVpcmVkXG4gICAgICAgIC8vYnVmZmVyIHNpemUgYW5kIHJldHVybiB0aGF0LlxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKChjID49IDB4MDAwMSkgJiYgKGMgPD0gMHgwMDdGKSkge1xuICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA+IDB4MDdGRikge1xuICAgICAgICAgICAgICAgIGorPTM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGorPTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaiAtIChzdGFydCB8fCAwKTtcbn1cblxuXG52YXIgVVNFX01BTlVBTF9VVEY4ID0gdHJ1ZTtcbnZhciBTQUZFX1VURl9MRU5HVEggPSAxMDI0ICogMTAyNDtcblxuZXhwb3J0IGZ1bmN0aW9uIHV0ZjhBcnJheVRvU3RyaW5nKGFycmF5LCBzdGFydCwgbGVuZ3RoKSB7XG5cbiAgICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKFVTRV9NQU5VQUxfVVRGOCkge1xuICAgICAgICBpZiAobGVuZ3RoID4gU0FGRV9VVEZfTEVOR1RIKSB7XG4gICAgICAgICAgICByZXR1cm4gc2FmZVV0ZjhCbG9iVG9TdHIoYXJyYXksIHN0YXJ0LCBsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGY4QmxvYlRvU3RyKGFycmF5LCBzdGFydCwgbGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZW5jb2RlZFN0cmluZyA9IFwiXCI7XG4gICAgICAgIGZvciAodmFyIGk9c3RhcnQsIGlFbmQ9c3RhcnQrbGVuZ3RoOyBpPGlFbmQ7IGkrKylcbiAgICAgICAgICAgIGVuY29kZWRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhcnJheVtpXSk7XG5cbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZW5jb2RlZFN0cmluZykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2JUb0pzb24oYmxvYikge1xuXG4gICAgdmFyIGRlY29kZWRTdHJpbmcgPSB1dGY4QXJyYXlUb1N0cmluZyhibG9iLCAwLCBibG9iLmxlbmd0aCk7XG5cbiAgICBjb25zdCByZWdleCA9IC9cXHUwMDBlL2dpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICAvLyBMTVYtNjAwNSBTb21lIGJsb2JzIGNvbnRhaW5lZCBhIFNoaWZ0IE91dCB1bmljb2RlIGNoYXJhY3RlciB0aGF0IGNvdWxkIG5vdCBiZSBwYXJzZWQgYnkgSlNPTi5wYXJzZVxuICAgIC8vIFRoaXMgY2F1c2VkIHRoZSBwcm9wZXJ0eSBkYXRhIGJhc2UgdG8gbm90IGxvYWQuXG4gICAgZGVjb2RlZFN0cmluZyA9IGRlY29kZWRTdHJpbmcucmVwbGFjZShyZWdleCwgJycpO1xuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZFN0cmluZyk7XG59XG5cbi8vcGFyc2VzIGEgcGllY2Ugb2YganNvbiBmcm9tIGEgZ2l2ZW4gYmxvYiAocmVwcmVzZW50aW5nIGFuIGFycmF5IG9mIGpzb24gdmFsdWVzKVxuLy91cCB0byB0aGUgbmV4dCBjb21tYStuZXdsaW5lIGNvbWJvIChpLmUuIGFycmF5IGRlbGltaXRlcikuXG5leHBvcnQgZnVuY3Rpb24gc3ViQmxvYlRvSnNvbihibG9iLCBzdGFydEluZGV4KSB7XG4gICAgaWYgKHN0YXJ0SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIGkgPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKGk8YmxvYi5sZW5ndGgtMSkge1xuICAgICAgICB2YXIgYyA9IGJsb2JbaV07XG4gICAgICAgIGlmIChjID09IDQ0ICYmIChibG9iW2krMV0gPT0gMTAgfHwgYmxvYltpKzFdID09IDEzKSkgLy9jb21tYSBmb2xsb3dlZCBieSBuZXdsaW5lP1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChjID09IDEwIHx8IGMgPT0gMTMpIC8vZGV0ZWN0IG5ld2xpbmUgb3IgbGluZSBmZWVkXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHZhciBkZWNvZGVkU3RyaW5nID0gdXRmOEFycmF5VG9TdHJpbmcoYmxvYiwgc3RhcnRJbmRleCwgaS1zdGFydEluZGV4KTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkU3RyaW5nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIHByb3BlcnR5IGJsb2IgdG8gSlNPTiA6IFwiICsgZGVjb2RlZFN0cmluZyk7XG4gICAgICAgIHJldHVybiBkZWNvZGVkU3RyaW5nO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkJsb2JUb0pzb25JbnQoYmxvYiwgc3RhcnRJbmRleCkge1xuICAgIHZhciB2YWwgPSAwO1xuICAgIHZhciBpID0gc3RhcnRJbmRleDtcblxuICAgIC8vQ2hlY2sgZm9yIGludGVnZXJzIHRoYXQgd2VyZSBzZXJpYWxpemVkIGFzIHN0cmluZ3MuXG4gICAgLy9UaGlzIHNob3VsZCBub3QgaGFwcGVuLCBldmVyLCBidXQgaGV5LCBpdCBkb2VzLlxuICAgIGlmIChibG9iW2ldID09IDM0KVxuICAgICAgICBpKys7XG5cbiAgICB3aGlsZSAoaTxibG9iLmxlbmd0aC0xKSB7XG4gICAgICAgIHZhciBjID0gYmxvYltpXTtcbiAgICAgICAgaWYgKGMgPT0gNDQgJiYgKGJsb2JbaSsxXSA9PSAxMCB8fCBibG9iW2krMV0gPT0gMTMpKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGlmIChjID09IDEwIHx8IGMgPT0gMTMgfHwgYyA9PSAzNClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KVxuICAgICAgICAgICAgdmFsID0gdmFsICogMTAgKyAoYyAtIDQ4KTtcblxuICAgICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn1cblxuLy9TaW1wbGUgaW50ZWdlciBhcnJheSBwYXJzZSAtLSBleHBlY3RzIHRoZSBhcnJheSBpbiBwcm9wZXJ0eSBkYXRhYmFzZVxuLy9mb3JtYXQsIHdoZXJlIHRoZSBhcnJheSBpcyBwYWNrZWQgd2l0aCBwb3NzaWJseSBuZXdsaW5lIHNlcGFyYXRvcixcbi8vYnV0IG5vIG90aGVyIHdoaXRlIHNwYWNlLiBEb2VzIG5vdCBkbyBleHRlbnNpdmUgZXJyb3IgY2hlY2tpbmdcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUludEFycmF5KGJsb2IsIHdhbnRTZW50aW5lbCkge1xuXG4gICAgLy9maW5kIG91dCBob3cgbWFueSBpdGVtcyB3ZSBoYXZlXG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICBmb3IgKHZhciBpPSAwLCBpRW5kPWJsb2IubGVuZ3RoOyBpPGlFbmQ7IGkrKylcbiAgICAgICAgaWYgKGJsb2JbaV0gPT0gNDQpIC8vNDQgPSAnLCdcbiAgICAgICAgICAgIGNvdW50Kys7XG5cbiAgICBjb3VudCsrOyAvL2xhc3QgaXRlbSBoYXMgbm8gY29tbWEgYWZ0ZXIgaXRcblxuICAgIHZhciBpdGVtcyA9IG5ldyBVaW50MzJBcnJheShjb3VudCArICh3YW50U2VudGluZWwgPyAxIDogMCkpO1xuXG4gICAgaT0wO1xuICAgIHZhciBlbmQgPSBibG9iLmxlbmd0aDtcblxuICAgIHdoaWxlIChibG9iW2ldICE9IDkxICYmIGk8ZW5kKSAvLzkxID0gJ1snXG4gICAgICAgIGkrKztcblxuICAgIGlmIChpID09IGJsb2IubGVuZ3RoKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIGkrKztcblxuICAgIHZhciBzZWVuRGlnaXQgPSBmYWxzZTtcbiAgICBjb3VudCA9IDA7XG4gICAgdmFyIGN1ckludCA9IDA7XG4gICAgd2hpbGUgKGk8ZW5kKSB7XG4gICAgICAgIHZhciBjID0gYmxvYltpXTtcbiAgICAgICAgaWYgKGMgPj0gNDggJiYgYyA8PSA1NykgeyAvL2RpZ2l0XG4gICAgICAgICAgICBjdXJJbnQgPSAxMCAqIGN1ckludCArIChjIC0gNDgpO1xuICAgICAgICAgICAgc2VlbkRpZ2l0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjID09IDQ0IHx8IGMgPT0gOTMpIHsgLy8nLCcgb3IgJ10nXG4gICAgICAgICAgICBpZiAoc2VlbkRpZ2l0KSB7XG4gICAgICAgICAgICAgICAgaXRlbXNbY291bnQrK10gPSBjdXJJbnQ7XG4gICAgICAgICAgICAgICAgc2VlbkRpZ2l0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY3VySW50ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlZW5EaWdpdCA9IGZhbHNlOyAvL21vc3QgbGlrZWx5IGEgbmV3bGluZSAodGhlIG9ubHkgb3RoZXIgdGhpbmcgd2UgaGF2ZSBpbiBvdXIgYXJyYXlzXG4gICAgICAgICAgICBjdXJJbnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG59XG5cbi8vU2NhbnMgYW4gYXJyYXkgb2YganNvbiB2YWx1ZXMgKHN0cmluZ3MsIGludGVnZXJzLCBkb3VibGVzKSBhbmQgZmluZHMgdGhlXG4vL29mZnNldCBvZiBlYWNoIHZhbHVlIGluIHRoZSBhcnJheSwgc28gdGhhdCB3ZSBjYW4gbGF0ZXIgcGljayBvZmYgdGhhdFxuLy9zcGVjaWZpYyB2YWx1ZSwgd2l0aG91dCBwYXJzaW5nIHRoZSB3aG9sZSAocG90ZW50aWFsbHkgaHVnZSkganNvbiBhcnJheSB1cCBmcm9udC5cbi8vVGhpcyBleHBlY3RzIHRoZSBpbnB1dCBibG9iIHRvIGJlIGluIHRoZSBmb3JtIHNlcmlhbGl6ZWQgYnkgdGhlIHByb3BlcnR5IGRhdGFiYXNlXG4vL0MrKyBjb21wb25lbnQgLS0gb25lIHZhbHVlIHBlciBsaW5lLiBBIG1vcmUgc29waGlzdGljYXRlZCBwYXJzZXIgd291bGQgYmUgbmVlZGVkXG4vL2luIGNhc2UgdGhlIGZvcm1hdCBjaGFuZ2VzIGFuZCB0aGlzIGFzc3VtcHRpb24gaXMgbm90IHRydWUgYW55bW9yZS5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVmFsdWVPZmZzZXRzKGJsb2IpIHtcblxuICAgIC8vZmlyc3QsIGNvdW50IGhvdyBtYW55IGl0ZW1zIHdlIGhhdmVcbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHZhciBlbmQgPSBibG9iLmxlbmd0aC0xO1xuXG4gICAgZm9yICh2YXIgaT0gMDsgaTxlbmQ7IGkrKykge1xuICAgICAgICBpZiAoIGJsb2JbaV0gPT0gNDQgJiYgKGJsb2JbaSsxXSA9PSAxMCB8fCBibG9iW2krMV0gPT0gMTMpKSAvLyAnLCcgKyBuZXdsaW5lIGlzIHRoZSBpdGVtIGRlbGltaXRlclxuICAgICAgICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICBpZiAoIWNvdW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvdW50Kys7IC8vb25lIGZvciB0aGUgbGFzdCBpdGVtXG5cbiAgICB2YXIgaXRlbXMgPSBuZXcgVWludDMyQXJyYXkoY291bnQpO1xuXG4gICAgaT0wO1xuICAgIGNvdW50ID0gMDtcblxuICAgIC8vZmluZCBvcGVuaW5nIFtcbiAgICB3aGlsZSAoYmxvYltpXSAhPSA5MSAmJiBpPGVuZCkgLy85MSA9ICdbJ1xuICAgICAgICBpKys7XG5cbiAgICBpKys7XG5cbiAgICBpdGVtc1tjb3VudCsrXSA9IGk7XG4gICAgdmFyIHNlZW5Fb2wgPSBmYWxzZTtcbiAgICB3aGlsZSAoaTxlbmQpIHtcbiAgICAgICAgaWYgKGJsb2JbaV0gPT0gMTAgfHwgYmxvYltpXSA9PSAxMylcbiAgICAgICAgICAgIHNlZW5Fb2wgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChzZWVuRW9sKSB7XG4gICAgICAgICAgICBzZWVuRW9sID0gZmFsc2U7XG4gICAgICAgICAgICBpdGVtc1tjb3VudCsrXSA9IGk7XG4gICAgICAgIH1cblxuICAgICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1zO1xufVxuIl0sIm5hbWVzIjpbInV0ZjhCbG9iVG9TdHIiLCJhcnJheSIsInN0YXJ0IiwibGVuZ3RoIiwib3V0IiwiaSIsImxlbiIsImMiLCJjaGFyMiIsImNoYXIzIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwic2FmZVV0ZjhCbG9iVG9TdHIiLCJvdXRBcnJheSIsImNvdW50IiwiU1RSX0NWVF9MSU1JVCIsInB1c2giLCJqb2luIiwidXRmMTZ0bzgiLCJzdHIiLCJqIiwiY2hhckNvZGVBdCIsIlVTRV9NQU5VQUxfVVRGOCIsIlNBRkVfVVRGX0xFTkdUSCIsInV0ZjhBcnJheVRvU3RyaW5nIiwidW5kZWZpbmVkIiwiZW5jb2RlZFN0cmluZyIsImlFbmQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJibG9iVG9Kc29uIiwiYmxvYiIsImRlY29kZWRTdHJpbmciLCJyZWdleCIsInJlcGxhY2UiLCJKU09OIiwicGFyc2UiLCJzdWJCbG9iVG9Kc29uIiwic3RhcnRJbmRleCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzdWJCbG9iVG9Kc29uSW50IiwidmFsIiwicGFyc2VJbnRBcnJheSIsIndhbnRTZW50aW5lbCIsIml0ZW1zIiwiVWludDMyQXJyYXkiLCJlbmQiLCJzZWVuRGlnaXQiLCJjdXJJbnQiLCJmaW5kVmFsdWVPZmZzZXRzIiwic2VlbkVvbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/StringUtils.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/common/SvfPlacementUtils.js ": /*!************************************************************!*\ !*** ./src/file-loaders/lmvtk/common/SvfPlacementUtils.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ calculatePlacementWithOffset: ()=> (/* binding */ calculatePlacementWithOffset),\n/* harmony export */ derivePlacementTransform: () => (/* binding */ derivePlacementTransform),\n/* harmony export */ initPlacement: () => (/* binding */ initPlacement),\n/* harmony export */ transformAnimations: () => (/* binding */ transformAnimations),\n/* harmony export */ transformCameraData: () => (/* binding */ transformCameraData)\n/* harmony export */ });\n/* harmony import */ var _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../wgs/scene/LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n/* harmony import */ var _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../wgs/scene/LmvBox3 */ \"./src/wgs/scene/LmvBox3.js\");\n/* harmony import */ var _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../wgs/scene/LmvMatrix4 */ \"./src/wgs/scene/LmvMatrix4.js\");\n\n\n\n\n\nfunction getUnitScale(unit) {\n //Why are translators not using standard strings for those?!?!?!?\n switch (unit) {\n case 'meter':\n case 'meters':\n case 'm':return 1.0;\n case 'feet and inches':\n case 'foot':\n case 'feet':\n case 'ft':return 0.3048;\n case 'inch':\n case 'inches':\n case 'in':return 0.0254;\n case 'centimeter':\n case 'centimeters':\n case 'cm':return 0.01;\n case 'millimeter':\n case 'millimeters':\n case 'mm':return 0.001;\n default:return 1.0;\n }\n}\n\n\nfunction isIdentity(mtx) {\n var e = mtx.elements;\n for (var i = 0; i < 4; i++) {\n for (var j=0 ; j < 4; j++) {\n if (i===j ) {\n if (e[i * 4 + j] !==1 )\n return false;\n } else {\n if (e[i * 4 + j] !==0 )\n return false;\n }\n }\n }\n\n return true;\n}\n\n\nfunction derivePlacementTransform(svf, loadContext) {\n\n var custom_values=s vf.metadata[\ "custom values\"];\n\n // We now will apply overall model transforms, following the following logic:\n // 1) placementTransform=o ptions.placementTransform);\n // 2) placementTransform=p lacementTransform.multiply(scalingTransform);\n // 3) placementTransform=p lacementTransform.multiply(refPointTransform);\n // This is for aggregation scenarios, where multiple models are loaded into the scene\n // In such scenarios the client will most probably manually override the model units\n\n\n //First, take the input placement transform as is (could be null).\n svf.placementTransform=l oadContext.placementTransform;\n\n // Models from Navisworks come with a model to world transform that should be applied\n // in order to get the correct view cube orientation. In ViewCubeUi.js (_initCompass())\n // we also apply the rotation to the compass to get the 'true north' orientation.\n\n // @todo: this is uncommented for hot-fixing/releasing lmv-fluent and lmv respectively.\n // All related issues need to be addressed systematically asap.\n\n // if (!loadContext.avoidNwcRotation && !svf.placementTransform && custom_values && custom_values.nwModelToWorldTransform) {\n // const m=c ustom_values.nwModelToWorldTransform;\n\n // svf.placementTransform=n ew LmvMatrix4(true);\n // svf.placementTransform.set(\n // m[0], m[1], m[2], 0.00,\n // m[3], m[4], m[5], 0.00,\n // m[6], m[7], m[8], 0.00,\n // 0.00, 0.00, 0.00, 1.00,\n // );\n // }\n\n // If requested in the load options, apply scaling from optional 'from' to 'to' units.\n // If unpecified, then units will be read from the models metadata.\n // * usage overloads\n // options.appyScaling: { from: 'ft', to: 'm' }\n // options.appyScaling: 'm' ( equivalent to { to: 'm' })\n // * this is aimed at multiple 3D model situations where models potentialy have different units, but\n // one doesn 't up-front know what these units are.It also allows overriding of such units.\n // * Model methods: getUnitString , getUnitScale & getDisplayUnit will be automatically return corrected values\n // as long as there are no additional options.placementTransform scalings applied.\n if (loadContext.applyScaling) {\n\n // default 'from ' & 'to ' units are from metadata, or 'm ' not present\n var scalingFromUnit = 'm ';\n if (svf.metadata[\"distance unit\"]) {\n scalingFromUnit = svf.metadata[\"distance unit\"][\"value\"];\n }\n svf.scalingUnit = scalingFromUnit;\n\n if ('object ' === typeof loadContext.applyScaling) {\n if (loadContext.applyScaling.from) {\n scalingFromUnit = loadContext.applyScaling.from;\n }\n if (loadContext.applyScaling.to) {\n svf.scalingUnit = loadContext.applyScaling.to;\n }\n } else {\n svf.scalingUnit = loadContext.applyScaling;\n }\n\n\n // Work out overall desired scaling factor.\n var scalingFactor = getUnitScale(scalingFromUnit) / getUnitScale(svf.scalingUnit);\n\n if (1 != scalingFactor) {\n\n var placementS = new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true);\n\n var scalingTransform = new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true);\n scalingTransform.elements[0] = scalingFactor;\n scalingTransform.elements[5] = scalingFactor;\n scalingTransform.elements[10] = scalingFactor;\n\n if (loadContext.placementTransform) {\n // There may well already be a placementTransform from previous options/operations.\n placementS.copy(loadContext.placementTransform);\n\n }\n\n // Combine (optional) placementTransform with scaling\n if (loadContext.applyPlacementInModelUnits) {\n // Apply placementMatrix first, then scale to viewer world units. In this way,\n // the placementMatrix is handled in the same way as a refPointTransform.\n loadContext.placementTransform = scalingTransform.multiply(placementS);\n } else {\n // Apply unitScaling first, then placementTransform\n loadContext.placementTransform = placementS.multiply(scalingTransform);\n }\n svf.placementTransform = loadContext.placementTransform;\n\n // Store scalingFactor, so that we know which unitScaling was applied to this model.\n // Multiplying with this factor converts model file units to viewer world units.\n svf.scalingFactor = scalingFactor;\n }\n }\n\n if (custom_values && custom_values.refPointTransform) {\n\n svf.refPointTransform = new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true);\n var e = svf.refPointTransform.elements;\n var src = custom_values.refPointTransform;\n\n e[0] = src[0];\n e[1] = src[1];\n e[2] = src[2];\n\n e[4] = src[3];\n e[5] = src[4];\n e[6] = src[5];\n\n e[8] = src[6];\n e[9] = src[7];\n e[10] = src[8];\n\n e[12] = src[9];\n e[13] = src[10];\n e[14] = src[11];\n\n } else {\n //Is there an extra offset specified in the georeference?\n //This is important when aggregating Revit models from the same Revit\n //project into the same scene, because Revit SVFs use RVT internal coordinates, which\n //need extra offset to get into the world space.\n var georeference = svf.metadata[\"georeference\"];\n var refPointLMV = georeference && georeference[\"refPointLMV\"];\n\n var angle = 0;\n if (custom_values && Object.prototype.hasOwnProperty.call(custom_values, \"angleToTrueNorth\")) {\n angle = Math.PI / 180.0 * custom_values[\"angleToTrueNorth\"];\n }\n\n if (refPointLMV || angle) {\n\n var rotation = new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true);\n var m = rotation.elements;\n m[0] = m[5] = Math.cos(angle);\n m[1] = -Math.sin(angle);\n m[4] = Math.sin(angle);\n\n //refPointLMV is given in model local coordinates, hence the negation needed\n //to make the translation go from local to shared coordinates.\n var offset = new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true);\n m = offset.elements;\n if (refPointLMV) {\n m[12] = -refPointLMV[0];\n m[13] = -refPointLMV[1];\n m[14] = -refPointLMV[2];\n }\n\n //Compose the rotation and offset.\n svf.refPointTransform = rotation.multiply(offset);\n }\n }\n\n //If request in the load options, apply the reference point transform when loading the model\n if (loadContext.applyRefPoint && svf.refPointTransform) {\n\n var placement = new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true);\n\n //Normally we expect the input placement transform to come in as identity in case\n //we have it specified in the georef here, but, whatever, let's be thorough for once.\n if (loadContext.placementTransform)\n placement.copy(loadContext.placementTransform);\n\n placement.multiply(svf.refPointTransform);\n\n svf.placementTransform=l oadContext.placementTransform=p lacement;\n\n } else if (!loadContext.applyRefPoint && loadContext.placementTransform) {\n\n //In case we are given a placement transform that overrides the icoming refPointTransform\n\n svf.placementTransform=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true).copy(loadContext.placementTransform);\n\n }\n\n if (svf.placementTransform && isIdentity(svf.placementTransform))\n svf.placementTransform=n ull;\n\n return svf.placementTransform;\n}\n\nfunction calculatePlacementWithOffset(svf, pt) {\n var go=s vf.globalOffset;\n if (go.x || go.y || go.z) {\n if (!pt) {\n pt=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true);\n pt.makeTranslation(-go.x, -go.y, -go.z);\n } else {\n var pt2=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4(true);\n pt2.copy(pt);\n pt=p t2;\n pt.elements[12] -=g o.x;\n pt.elements[13] -=g o.y;\n pt.elements[14] -=g o.z;\n }\n\n svf.placementWithOffset=p t;\n } else {\n svf.placementWithOffset=p t;\n }\n}\n\nfunction initPlacement(svf, loadContext) {\n\n if (!svf.metadata)\n return;\n\n //Retrieve world bounding box\n var bbox=s vf.metadata[\ "world bounding box\"];\n var min=n ew _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(bbox.minXYZ[0], bbox.minXYZ[1], bbox.minXYZ[2]);\n var max=n ew _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(bbox.maxXYZ[0], bbox.maxXYZ[1], bbox.maxXYZ[2]);\n svf.bbox=n ew _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_1__.LmvBox3(min, max);\n svf.modelSpaceBBox=s vf.bbox.clone();\n\n var pt=d erivePlacementTransform(svf, loadContext);\n if (pt && !svf.bbox.isEmpty()) {\n svf.bbox.applyMatrix4(pt);\n }\n\n //Global offset is used to avoid floating point precision issues for models\n //located enormous distances from the origin. The default is to move the model to the origin\n //but it can be overridden in case of model aggregation scenarios, where multiple\n //models are loaded into the scene and a common offset is needed for all.\n if (loadContext.globalOffset) {\n // Apply user-defined globalOffset\n svf.globalOffset=l oadContext.globalOffset;\n } else {\n // Choose global offset automatically at the center of the placmenent transformed model. \n svf.globalOffset=s vf.bbox.getCenter(new _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3());\n }\n\n calculatePlacementWithOffset(svf, pt);\n\n // The model boundingBox must finally be in viewer-coords, just like everything else. I.e. with subtracted offset.\n // Therefore, we have to subtract the globaloffset from bbox as well.\n if (!svf.bbox.isEmpty()) {\n svf.bbox.min.sub(svf.globalOffset);\n svf.bbox.max.sub(svf.globalOffset);\n }\n\n if (Object.prototype.hasOwnProperty.call(svf.metadata, \ "double sided geometry\") &&\n svf.metadata[\ "double sided geometry\"][\ "value\"]) //TODO: do we want to check the global flag or drop that and rely on material only?\n {\n svf.doubleSided=t rue;\n }\n\n}\n\nfunction applyOffset(a, offset) {\n a[0] -=o ffset.x;\n a[1] -=o ffset.y;\n a[2] -=o ffset.z;\n}\n\n\nfunction transformAnimations(svf) {\n\n if (!svf.animations)\n return;\n\n // apply global offset to animations\n var animations=s vf.animations[\ "animations\"];\n if (animations) {\n var globalOffset=s vf.globalOffset;\n var t=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4().makeTranslation(globalOffset.x, globalOffset.y, globalOffset.z);\n var tinv=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4().makeTranslation(-globalOffset.x, -globalOffset.y, -globalOffset.z);\n var r=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4();\n var m=n ew _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_2__.LmvMatrix4();\n for (var a=0 ; a < animations.length; a++) {\n var anim=a nimations[a];\n if (anim.hierarchy) {\n for (var h=0 ; h < anim.hierarchy.length; h++) {\n var keys=a nim.hierarchy[h].keys;\n if (keys) {\n for (var k=0 ; k < keys.length; k++) {\n var pos=k eys[k].pos;\n if (pos) {\n var offset=g lobalOffset;\n var rot=k eys[k].rot;\n if (rot) {\n r.makeRotationFromQuaternion({ x: rot[0], y: rot[1], z: rot[2], w: rot[3] });\n m.multiplyMatrices(t, r).multiply(tinv);\n offset={ x: m.elements[12], y: m.elements[13], z: m.elements[14] };\n }\n applyOffset(pos, offset);\n }\n var target=k eys[k].target;\n if (target) {\n applyOffset(target, globalOffset);\n }\n var points=k eys[k].points;\n if (points) {\n for (var p=0 ; p < points.length; p++) {\n applyOffset(points[p], globalOffset);\n }\n }\n }\n }\n }\n }\n }\n }\n}\n\n// Apply transform (if any) to given camera data with { position, target, up, orthoScale }\nfunction transformCameraData(cam, transform) {\n\n if (!transform) {\n return;\n }\n\n transform.transformPoint(cam.position);\n transform.transformPoint(cam.target);\n transform.transformDirection(cam.up);\n\n // If the placement includes scaling (either by unit scaling or manually included \n // in the placement transform), orthoScale values need to be scaled as well.\n //\n // Note: We don 't support non-uniform scaling well. However, home-views cannot be recovered\n // anyway if the model is distorted with non-uniform transforms.\n if (isFinite(cam.orthoScale)) {\n const scale = transform.getMaxScaleOnAxis();\n cam.orthoScale *= scale;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9TdmZQbGFjZW1lbnRVdGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDMkQ7QUFDTjtBQUNNOztBQUUzRCxTQUFTRyxZQUFZQSxDQUFDQyxJQUFJLEVBQUU7RUFDeEI7RUFDQSxRQUFRQSxJQUFJO0lBQ1IsS0FBSyxPQUFPO0lBQ1osS0FBSyxRQUFRO0lBQ2IsS0FBSyxHQUFHLENBQVksT0FBTyxHQUFHO0lBQzlCLEtBQUssaUJBQWlCO0lBQ3RCLEtBQUssTUFBTTtJQUNYLEtBQUssTUFBTTtJQUNYLEtBQUssSUFBSSxDQUFXLE9BQU8sTUFBTTtJQUNqQyxLQUFLLE1BQU07SUFDWCxLQUFLLFFBQVE7SUFDYixLQUFLLElBQUksQ0FBVyxPQUFPLE1BQU07SUFDakMsS0FBSyxZQUFZO0lBQ2pCLEtBQUssYUFBYTtJQUNsQixLQUFLLElBQUksQ0FBVyxPQUFPLElBQUk7SUFDL0IsS0FBSyxZQUFZO0lBQ2pCLEtBQUssYUFBYTtJQUNsQixLQUFLLElBQUksQ0FBVyxPQUFPLEtBQUs7SUFDaEMsUUFBUyxPQUFPLEdBQUc7RUFDdkI7QUFDSjs7O0FBR0EsU0FBU0MsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFO0VBQ3JCLElBQUlDLENBQUMsR0FBR0QsR0FBRyxDQUFDRSxRQUFRO0VBQ3BCLEtBQUssSUFBSUMsQ0FBQyxHQUFDLENBQUMsRUFBRUEsQ0FBQyxHQUFDLENBQUMsRUFBRUEsQ0FBQyxFQUFFLEVBQUU7SUFDcEIsS0FBSyxJQUFJQyxDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtNQUNwQixJQUFJRCxDQUFDLEtBQUtDLENBQUMsRUFBRTtRQUNULElBQUlILENBQUMsQ0FBQ0UsQ0FBQyxHQUFDLENBQUMsR0FBQ0MsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNkLE9BQU8sS0FBSztNQUNwQixDQUFDLE1BQU07UUFDSCxJQUFJSCxDQUFDLENBQUNF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QWMsQ0FBQ0YsR0FBRyxDQUFDRyxRQUFRLENBQUM7RUFDdENGLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDRixHQUFHLENBQUNKLE1BQU0sQ0FBQztFQUNwQ0ssU0FBUyxDQUFDRyxrQkFBa0IsQ0FBQ0osR0FBRyxDQUFDSyxFQUFFLENBQUM7O0VBRXBDO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJQyxRQUFRLENBQUNOLEdBQUcsQ0FBQ08sVUFBVSxDQUFDLEVBQUU7SUFDMUIsTUFBTUMsS0FBSyxHQUFHUCxTQUFTLENBQUNRLGlCQUFpQixDQUFDLENBQUM7SUFDM0NULEdBQUcsQ0FBQ08sVUFBVSxJQUFJQyxLQUFLO0VBQzNCO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9TdmZQbGFjZW1lbnRVdGlscy5qcz9mZTE2Il0sInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgTG12VmVjdG9yMyB9IGZyb20gJy4uLy4uLy4uL3dncy9zY2VuZS9MbXZWZWN0b3IzJztcbmltcG9ydCB7IExtdkJveDMgfSBmcm9tICcuLi8uLi8uLi93Z3Mvc2NlbmUvTG12Qm94Myc7XG5pbXBvcnQgeyBMbXZNYXRyaXg0IH0gZnJvbSAnLi4vLi4vLi4vd2dzL3NjZW5lL0xtdk1hdHJpeDQnO1xuXG5mdW5jdGlvbiBnZXRVbml0U2NhbGUodW5pdCkge1xuICAgIC8vV2h5IGFyZSB0cmFuc2xhdG9ycyBub3QgdXNpbmcgc3RhbmRhcmQgc3RyaW5ncyBmb3IgdGhvc2U/IT8hPyE/XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgIGNhc2UgJ21ldGVyJyAgICAgIDpcbiAgICAgICAgY2FzZSAnbWV0ZXJzJyAgICAgOlxuICAgICAgICBjYXNlICdtJyAgICAgICAgICA6IHJldHVybiAxLjA7XG4gICAgICAgIGNhc2UgJ2ZlZXQgYW5kIGluY2hlcyc6XG4gICAgICAgIGNhc2UgJ2Zvb3QnICAgICAgIDpcbiAgICAgICAgY2FzZSAnZmVldCcgICAgICAgOlxuICAgICAgICBjYXNlICdmdCcgICAgICAgICA6IHJldHVybiAwLjMwNDg7XG4gICAgICAgIGNhc2UgJ2luY2gnICAgICAgIDpcbiAgICAgICAgY2FzZSAnaW5jaGVzJyAgICAgOlxuICAgICAgICBjYXNlICdpbicgICAgICAgICA6IHJldHVybiAwLjAyNTQ7XG4gICAgICAgIGNhc2UgJ2NlbnRpbWV0ZXInIDpcbiAgICAgICAgY2FzZSAnY2VudGltZXRlcnMnOlxuICAgICAgICBjYXNlICdjbScgICAgICAgICA6IHJldHVybiAwLjAxO1xuICAgICAgICBjYXNlICdtaWxsaW1ldGVyJyA6XG4gICAgICAgIGNhc2UgJ21pbGxpbWV0ZXJzJzpcbiAgICAgICAgY2FzZSAnbW0nICAgICAgICAgOiByZXR1cm4gMC4wMDE7XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAxLjA7XG4gICAgfVxufVxuXG5cbmZ1bmN0aW9uIGlzSWRlbnRpdHkobXR4KSB7XG4gICAgdmFyIGUgPSBtdHguZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaT0wOyBpPDQ7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqPTA7IGo8NDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgICAgIGlmIChlW2kqNCtqXSAhPT0gMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZVtpKjQral0gIT09IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVQbGFjZW1lbnRUcmFuc2Zvcm0oc3ZmLCBsb2FkQ29udGV4dCkge1xuICAgIFxuICAgIHZhciBjdXN0b21fdmFsdWVzID0gc3ZmLm1ldGFkYXRhW1wiY3VzdG9tIHZhbHVlc1wiXTtcblxuICAgIC8vIFdlIG5vdyB3aWxsIGFwcGx5IG92ZXJhbGwgbW9kZWwgdHJhbnNmb3JtcywgZm9sbG93aW5nIHRoZSBmb2xsb3dpbmcgbG9naWM6XG4gICAgLy8gICAgMSkgcGxhY2VtZW50VHJhbnNmb3JtID0gb3B0aW9ucy5wbGFjZW1lbnRUcmFuc2Zvcm0pO1xuICAgIC8vICAgIDIpIHBsYWNlbWVudFRyYW5zZm9ybSA9IHBsYWNlbWVudFRyYW5zZm9ybS5tdWx0aXBseShzY2FsaW5nVHJhbnNmb3JtKTtcbiAgICAvLyAgICAzKSBwbGFjZW1lbnRUcmFuc2Zvcm0gPSBwbGFjZW1lbnRUcmFuc2Zvcm0ubXVsdGlwbHkocmVmUG9pbnRUcmFuc2Zvcm0pO1xuICAgIC8vIFRoaXMgaXMgZm9yIGFnZ3JlZ2F0aW9uIHNjZW5hcmlvcywgd2hlcmUgbXVsdGlwbGUgbW9kZWxzIGFyZSBsb2FkZWQgaW50byB0aGUgc2NlbmVcbiAgICAvLyBJbiBzdWNoIHNjZW5hcmlvcyB0aGUgY2xpZW50IHdpbGwgbW9zdCBwcm9iYWJseSBtYW51YWxseSBvdmVycmlkZSB0aGUgbW9kZWwgdW5pdHNcblxuXG4gICAgLy9GaXJzdCwgdGFrZSB0aGUgaW5wdXQgcGxhY2VtZW50IHRyYW5zZm9ybSBhcyBpcyAoY291bGQgYmUgbnVsbCkuXG4gICAgc3ZmLnBsYWNlbWVudFRyYW5zZm9ybSA9IGxvYWRDb250ZXh0LnBsYWNlbWVudFRyYW5zZm9ybTtcblxuICAgIC8vIE1vZGVscyBmcm9tIE5hdmlzd29ya3MgY29tZSB3aXRoIGEgbW9kZWwgdG8gd29ybGQgdHJhbnNmb3JtIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWRcbiAgICAvLyBpbiBvcmRlciB0byBnZXQgdGhlIGNvcnJlY3QgdmlldyBjdWJlIG9yaWVudGF0aW9uLiBJbiBWaWV3Q3ViZVVpLmpzIChfaW5pdENvbXBhc3MoKSlcbiAgICAvLyB3ZSBhbHNvIGFwcGx5IHRoZSByb3RhdGlvbiB0byB0aGUgY29tcGFzcyB0byBnZXQgdGhlICd0cnVlIG5vcnRoJyBvcmllbnRhdGlvbi5cbiAgICBcbiAgICAvLyBAdG9kbzogdGhpcyBpcyB1bmNvbW1lbnRlZCBmb3IgaG90LWZpeGluZy9yZWxlYXNpbmcgbG12LWZsdWVudCBhbmQgbG12IHJlc3BlY3RpdmVseS5cbiAgICAvLyAgICAgICAgQWxsIHJlbGF0ZWQgaXNzdWVzIG5lZWQgdG8gYmUgYWRkcmVzc2VkIHN5c3RlbWF0aWNhbGx5IGFzYXAuXG5cbiAgICAvLyBpZiAoIWxvYWRDb250ZXh0LmF2b2lkTndjUm90YXRpb24gJiYgIXN2Zi5wbGFjZW1lbnRUcmFuc2Zvcm0gJiYgY3VzdG9tX3ZhbHVlcyAmJiBjdXN0b21fdmFsdWVzLm53TW9kZWxUb1dvcmxkVHJhbnNmb3JtKSB7XG4gICAgLy8gICAgIGNvbnN0IG0gPSBjdXN0b21fdmFsdWVzLm53TW9kZWxUb1dvcmxkVHJhbnNmb3JtO1xuXG4gICAgLy8gICAgIHN2Zi5wbGFjZW1lbnRUcmFuc2Zvcm0gPSBuZXcgTG12TWF0cml4NCh0cnVlKTtcbiAgICAvLyAgICAgc3ZmLnBsYWNlbWVudFRyYW5zZm9ybS5zZXQoXG4gICAgLy8gICAgICAgICBtWzBdLCBtWzFdLCBtWzJdLCAwLjAwLFxuICAgIC8vICAgICAgICAgbVszXSwgbVs0XSwgbVs1XSwgMC4wMCxcbiAgICAvLyAgICAgICAgIG1bNl0sIG1bN10sIG1bOF0sIDAuMDAsXG4gICAgLy8gICAgICAgICAwLjAwLCAwLjAwLCAwLjAwLCAxLjAwLFxuICAgIC8vICAgICApO1xuICAgIC8vIH1cblxuICAgIC8vIElmIHJlcXVlc3RlZCBpbiB0aGUgbG9hZCBvcHRpb25zLCBhcHBseSBzY2FsaW5nIGZyb20gb3B0aW9uYWwgJ2Zyb20nIHRvICd0bycgdW5pdHMuXG4gICAgLy8gSWYgdW5wZWNpZmllZCwgdGhlbiB1bml0cyB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgbW9kZWxzIG1ldGFkYXRhLlxuICAgIC8vICogdXNhZ2Ugb3ZlcmxvYWRzXG4gICAgLy8gICAgICBvcHRpb25zLmFwcHlTY2FsaW5nOiB7IGZyb206ICdmdCcsIHRvOiAnbScgfVxuICAgIC8vICAgICAgb3B0aW9ucy5hcHB5U2NhbGluZzogJ20nICAgKCBlcXVpdmFsZW50IHRvIHsgdG86ICdtJyB9KVxuICAgIC8vICogdGhpcyBpcyBhaW1lZCBhdCBtdWx0aXBsZSAzRCBtb2RlbCBzaXR1YXRpb25zIHdoZXJlIG1vZGVscyBwb3RlbnRpYWx5IGhhdmUgZGlmZmVyZW50IHVuaXRzLCBidXRcbiAgICAvLyAgIG9uZSAgZG9lc24ndCB1cC1mcm9udCBrbm93IHdoYXQgdGhlc2UgdW5pdHMgYXJlLkl0IGFsc28gYWxsb3dzIG92ZXJyaWRpbmcgb2Ygc3VjaCB1bml0cy5cbiAgICAvLyAqIE1vZGVsIG1ldGhvZHM6IGdldFVuaXRTdHJpbmcgLCBnZXRVbml0U2NhbGUgJiAgZ2V0RGlzcGxheVVuaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJldHVybiBjb3JyZWN0ZWQgdmFsdWVzXG4gICAgLy8gICBhcyBsb25nIGFzIHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIG9wdGlvbnMucGxhY2VtZW50VHJhbnNmb3JtIHNjYWxpbmdzIGFwcGxpZWQuXG4gICAgaWYgKGxvYWRDb250ZXh0LmFwcGx5U2NhbGluZykge1xuXG4gICAgICAgIC8vIGRlZmF1bHQgJ2Zyb20nICYgJ3RvJyAgdW5pdHMgYXJlIGZyb20gbWV0YWRhdGEsIG9yICdtJyBub3QgcHJlc2VudFxuICAgICAgICB2YXIgc2NhbGluZ0Zyb21Vbml0ID0gJ20nO1xuICAgICAgICBpZiAoc3ZmLm1ldGFkYXRhW1wiZGlzdGFuY2UgdW5pdFwiXSkge1xuICAgICAgICAgICAgc2NhbGluZ0Zyb21Vbml0ID0gc3ZmLm1ldGFkYXRhW1wiZGlzdGFuY2UgdW5pdFwiXVtcInZhbHVlXCJdO1xuICAgICAgICB9XG4gICAgICAgIHN2Zi5zY2FsaW5nVW5pdCA9IHNjYWxpbmdGcm9tVW5pdDtcblxuICAgICAgICBpZignb2JqZWN0JyA9PT0gdHlwZW9mKGxvYWRDb250ZXh0LmFwcGx5U2NhbGluZykpe1xuICAgICAgICAgICAgaWYobG9hZENvbnRleHQuYXBwbHlTY2FsaW5nLmZyb20pIHtcbiAgICAgICAgICAgICAgICBzY2FsaW5nRnJvbVVuaXQgPSBsb2FkQ29udGV4dC5hcHBseVNjYWxpbmcuZnJvbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGxvYWRDb250ZXh0LmFwcGx5U2NhbGluZy50bykge1xuICAgICAgICAgICAgICAgc3ZmLnNjYWxpbmdVbml0ID0gbG9hZENvbnRleHQuYXBwbHlTY2FsaW5nLnRvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ZmLnNjYWxpbmdVbml0ID0gbG9hZENvbnRleHQuYXBwbHlTY2FsaW5nO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyBXb3JrIG91dCBvdmVyYWxsIGRlc2lyZWQgc2NhbGluZyBmYWN0b3IuXG4gICAgICAgIHZhciBzY2FsaW5nRmFjdG9yID0gZ2V0VW5pdFNjYWxlKHNjYWxpbmdGcm9tVW5pdCkgLyBnZXRVbml0U2NhbGUoc3ZmLnNjYWxpbmdVbml0KTtcblxuICAgICAgICBpZigxICE9IHNjYWxpbmdGYWN0b3IpIHtcblxuICAgICAgICAgICAgdmFyIHBsYWNlbWVudFMgPSBuZXcgTG12TWF0cml4NCh0cnVlKTtcblxuICAgICAgICAgICAgIHZhciBzY2FsaW5nVHJhbnNmb3JtID0gbmV3IExtdk1hdHJpeDQodHJ1ZSk7XG4gICAgICAgICAgICAgc2NhbGluZ1RyYW5zZm9ybS5lbGVtZW50c1swXSA9IHNjYWxpbmdGYWN0b3I7XG4gICAgICAgICAgICAgc2NhbGluZ1RyYW5zZm9ybS5lbGVtZW50c1s1XSAgPSBzY2FsaW5nRmFjdG9yO1xuICAgICAgICAgICAgIHNjYWxpbmdUcmFuc2Zvcm0uZWxlbWVudHNbMTBdID0gc2NhbGluZ0ZhY3RvcjtcblxuICAgICAgICAgICAgaWYgKGxvYWRDb250ZXh0LnBsYWNlbWVudFRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZXJlIG1heSB3ZWxsIGFscmVhZHkgYmUgYSBwbGFjZW1lbnRUcmFuc2Zvcm0gZnJvbSBwcmV2aW91cyBvcHRpb25zL29wZXJhdGlvbnMuXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50Uy5jb3B5KGxvYWRDb250ZXh0LnBsYWNlbWVudFRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ29tYmluZSAob3B0aW9uYWwpIHBsYWNlbWVudFRyYW5zZm9ybSB3aXRoIHNjYWxpbmdcbiAgICAgICAgICAgIGlmIChsb2FkQ29udGV4dC5hcHBseVBsYWNlbWVudEluTW9kZWxVbml0cykge1xuICAgICAgICAgICAgICAgIC8vIEFwcGx5IHBsYWNlbWVudE1hdHJpeCBmaXJzdCwgdGhlbiBzY2FsZSB0byB2aWV3ZXIgd29ybGQgdW5pdHMuIEluIHRoaXMgd2F5LFxuICAgICAgICAgICAgICAgIC8vIHRoZSBwbGFjZW1lbnRNYXRyaXggaXMgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYSByZWZQb2ludFRyYW5zZm9ybS5cbiAgICAgICAgICAgICAgICBsb2FkQ29udGV4dC5wbGFjZW1lbnRUcmFuc2Zvcm0gPSBzY2FsaW5nVHJhbnNmb3JtLm11bHRpcGx5KHBsYWNlbWVudFMpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgdW5pdFNjYWxpbmcgZmlyc3QsIHRoZW4gcGxhY2VtZW50VHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgbG9hZENvbnRleHQucGxhY2VtZW50VHJhbnNmb3JtID0gcGxhY2VtZW50Uy5tdWx0aXBseShzY2FsaW5nVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN2Zi5wbGFjZW1lbnRUcmFuc2Zvcm0gPSBsb2FkQ29udGV4dC5wbGFjZW1lbnRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgIC8vIFN0b3JlIHNjYWxpbmdGYWN0b3IsIHNvIHRoYXQgd2Uga25vdyB3aGljaCB1bml0U2NhbGluZyB3YXMgYXBwbGllZCB0byB0aGlzIG1vZGVsLlxuICAgICAgICAgICAgLy8gTXVsdGlwbHlpbmcgd2l0aCB0aGlzIGZhY3RvciBjb252ZXJ0cyBtb2RlbCBmaWxlIHVuaXRzIHRvIHZpZXdlciB3b3JsZCB1bml0cy5cbiAgICAgICAgICAgIHN2Zi5zY2FsaW5nRmFjdG9yID0gc2NhbGluZ0ZhY3RvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjdXN0b21fdmFsdWVzICYmIGN1c3RvbV92YWx1ZXMucmVmUG9pbnRUcmFuc2Zvcm0pIHtcblxuICAgICAgICBzdmYucmVmUG9pbnRUcmFuc2Zvcm0gPSBuZXcgTG12TWF0cml4NCh0cnVlKTtcbiAgICAgICAgdmFyIGUgPSBzdmYucmVmUG9pbnRUcmFuc2Zvcm0uZWxlbWVudHM7XG4gICAgICAgIHZhciBzcmMgPSAgY3VzdG9tX3ZhbHVlcy5yZWZQb2ludFRyYW5zZm9ybTtcblxuICAgICAgICBlWzBdID0gc3JjWzBdO1xuICAgICAgICBlWzFdID0gc3JjWzFdO1xuICAgICAgICBlWzJdID0gc3JjWzJdO1xuXG4gICAgICAgIGVbNF0gPSBzcmNbM107XG4gICAgICAgIGVbNV0gPSBzcmNbNF07XG4gICAgICAgIGVbNl0gPSBzcmNbNV07XG5cbiAgICAgICAgZVs4XSA9IHNyY1s2XTtcbiAgICAgICAgZVs5XSA9IHNyY1s3XTtcbiAgICAgICAgZVsxMF0gPSBzcmNbOF07XG5cbiAgICAgICAgZVsxMl0gPSBzcmNbOV07XG4gICAgICAgIGVbMTNdID0gc3JjWzEwXTtcbiAgICAgICAgZVsxNF0gPSBzcmNbMTFdO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9JcyB0aGVyZSBhbiBleHRyYSBvZmZzZXQgc3BlY2lmaWVkIGluIHRoZSBnZW9yZWZlcmVuY2U/XG4gICAgICAgIC8vVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiBhZ2dyZWdhdGluZyBSZXZpdCBtb2RlbHMgZnJvbSB0aGUgc2FtZSBSZXZpdFxuICAgICAgICAvL3Byb2plY3QgaW50byB0aGUgc2FtZSBzY2VuZSwgYmVjYXVzZSBSZXZpdCBTVkZzIHVzZSBSVlQgaW50ZXJuYWwgY29vcmRpbmF0ZXMsIHdoaWNoXG4gICAgICAgIC8vbmVlZCBleHRyYSBvZmZzZXQgdG8gZ2V0IGludG8gdGhlIHdvcmxkIHNwYWNlLlxuICAgICAgICB2YXIgZ2VvcmVmZXJlbmNlID0gc3ZmLm1ldGFkYXRhW1wiZ2VvcmVmZXJlbmNlXCJdO1xuICAgICAgICB2YXIgcmVmUG9pbnRMTVYgPSBnZW9yZWZlcmVuY2UgJiYgZ2VvcmVmZXJlbmNlW1wicmVmUG9pbnRMTVZcIl07XG5cbiAgICAgICAgdmFyIGFuZ2xlID0gMDtcbiAgICAgICAgaWYgKGN1c3RvbV92YWx1ZXMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1c3RvbV92YWx1ZXMsIFwiYW5nbGVUb1RydWVOb3J0aFwiKSkge1xuICAgICAgICAgICAgYW5nbGUgPSAoTWF0aC5QSSAvIDE4MC4wKSAqIGN1c3RvbV92YWx1ZXNbXCJhbmdsZVRvVHJ1ZU5vcnRoXCJdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlZlBvaW50TE1WIHx8IGFuZ2xlKSB7XG5cbiAgICAgICAgICAgIHZhciByb3RhdGlvbiA9IG5ldyBMbXZNYXRyaXg0KHRydWUpO1xuICAgICAgICAgICAgdmFyIG0gPSByb3RhdGlvbi5lbGVtZW50cztcbiAgICAgICAgICAgIG1bMF0gPSBtWzVdID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICAgICAgbVsxXSA9IC1NYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICBtWzRdID0gTWF0aC5zaW4oYW5nbGUpO1xuXG4gICAgICAgICAgICAvL3JlZlBvaW50TE1WIGlzIGdpdmVuIGluIG1vZGVsIGxvY2FsIGNvb3JkaW5hdGVzLCBoZW5jZSB0aGUgbmVnYXRpb24gbmVlZGVkXG4gICAgICAgICAgICAvL3RvIG1ha2UgdGhlIHRyYW5zbGF0aW9uIGdvIGZyb20gbG9jYWwgdG8gc2hhcmVkIGNvb3JkaW5hdGVzLlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IG5ldyBMbXZNYXRyaXg0KHRydWUpO1xuICAgICAgICAgICAgbSA9IG9mZnNldC5lbGVtZW50cztcbiAgICAgICAgICAgIGlmIChyZWZQb2ludExNVikge1xuICAgICAgICAgICAgICAgIG1bMTJdID0gLXJlZlBvaW50TE1WWzBdO1xuICAgICAgICAgICAgICAgIG1bMTNdID0gLXJlZlBvaW50TE1WWzFdO1xuICAgICAgICAgICAgICAgIG1bMTRdID0gLXJlZlBvaW50TE1WWzJdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL0NvbXBvc2UgdGhlIHJvdGF0aW9uIGFuZCBvZmZzZXQuXG4gICAgICAgICAgICBzdmYucmVmUG9pbnRUcmFuc2Zvcm0gPSByb3RhdGlvbi5tdWx0aXBseShvZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9JZiByZXF1ZXN0IGluIHRoZSBsb2FkIG9wdGlvbnMsIGFwcGx5IHRoZSByZWZlcmVuY2UgcG9pbnQgdHJhbnNmb3JtIHdoZW4gbG9hZGluZyB0aGUgbW9kZWxcbiAgICBpZiAobG9hZENvbnRleHQuYXBwbHlSZWZQb2ludCAmJiBzdmYucmVmUG9pbnRUcmFuc2Zvcm0pIHtcblxuICAgICAgICB2YXIgcGxhY2VtZW50ID0gbmV3IExtdk1hdHJpeDQodHJ1ZSk7XG5cbiAgICAgICAgLy9Ob3JtYWxseSB3ZSBleHBlY3QgdGhlIGlucHV0IHBsYWNlbWVudCB0cmFuc2Zvcm0gdG8gY29tZSBpbiBhcyBpZGVudGl0eSBpbiBjYXNlXG4gICAgICAgIC8vd2UgaGF2ZSBpdCBzcGVjaWZpZWQgaW4gdGhlIGdlb3JlZiBoZXJlLCBidXQsIHdoYXRldmVyLCBsZXQncyBiZSB0aG9yb3VnaCBmb3Igb25jZS5cbiAgICAgICAgaWYgKGxvYWRDb250ZXh0LnBsYWNlbWVudFRyYW5zZm9ybSlcbiAgICAgICAgICAgIHBsYWNlbWVudC5jb3B5KGxvYWRDb250ZXh0LnBsYWNlbWVudFRyYW5zZm9ybSk7XG5cbiAgICAgICAgcGxhY2VtZW50Lm11bHRpcGx5KHN2Zi5yZWZQb2ludFRyYW5zZm9ybSk7XG5cbiAgICAgICAgc3ZmLnBsYWNlbWVudFRyYW5zZm9ybSA9IGxvYWRDb250ZXh0LnBsYWNlbWVudFRyYW5zZm9ybSA9IHBsYWNlbWVudDtcblxuICAgIH0gZWxzZSBpZiAoIWxvYWRDb250ZXh0LmFwcGx5UmVmUG9pbnQgJiYgbG9hZENvbnRleHQucGxhY2VtZW50VHJhbnNmb3JtKSB7XG5cbiAgICAgICAgLy9JbiBjYXNlIHdlIGFyZSBnaXZlbiBhIHBsYWNlbWVudCB0cmFuc2Zvcm0gdGhhdCBvdmVycmlkZXMgdGhlIGljb21pbmcgcmVmUG9pbnRUcmFuc2Zvcm1cblxuICAgICAgICBzdmYucGxhY2VtZW50VHJhbnNmb3JtID0gbmV3IExtdk1hdHJpeDQodHJ1ZSkuY29weShsb2FkQ29udGV4dC5wbGFjZW1lbnRUcmFuc2Zvcm0pO1xuXG4gICAgfVxuXG4gICAgaWYgKHN2Zi5wbGFjZW1lbnRUcmFuc2Zvcm0gJiYgaXNJZGVudGl0eShzdmYucGxhY2VtZW50VHJhbnNmb3JtKSlcbiAgICAgICAgc3ZmLnBsYWNlbWVudFRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICByZXR1cm4gc3ZmLnBsYWNlbWVudFRyYW5zZm9ybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVBsYWNlbWVudFdpdGhPZmZzZXQoc3ZmLCBwdCkge1xuICAgIHZhciBnbyA9IHN2Zi5nbG9iYWxPZmZzZXQ7XG4gICAgaWYgKGdvLnggfHwgZ28ueSB8fCBnby56KSB7XG4gICAgICAgIGlmICghcHQpIHtcbiAgICAgICAgICAgIHB0ID0gbmV3IExtdk1hdHJpeDQodHJ1ZSk7XG4gICAgICAgICAgICBwdC5tYWtlVHJhbnNsYXRpb24oLWdvLngsIC1nby55LCAtZ28ueik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHQyID0gbmV3IExtdk1hdHJpeDQodHJ1ZSk7XG4gICAgICAgICAgICBwdDIuY29weShwdCk7XG4gICAgICAgICAgICBwdCA9IHB0MjtcbiAgICAgICAgICAgIHB0LmVsZW1lbnRzWzEyXSAtPSBnby54O1xuICAgICAgICAgICAgcHQuZWxlbWVudHNbMTNdIC09IGdvLnk7XG4gICAgICAgICAgICBwdC5lbGVtZW50c1sxNF0gLT0gZ28uejtcbiAgICAgICAgfVxuXG4gICAgICAgIHN2Zi5wbGFjZW1lbnRXaXRoT2Zmc2V0ID0gcHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3ZmLnBsYWNlbWVudFdpdGhPZmZzZXQgPSBwdDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0UGxhY2VtZW50KHN2ZiwgbG9hZENvbnRleHQpIHtcblxuICAgIGlmICghc3ZmLm1ldGFkYXRhKVxuICAgICAgICByZXR1cm47XG5cbiAgICAvL1JldHJpZXZlIHdvcmxkIGJvdW5kaW5nIGJveFxuICAgIHZhciBiYm94ID0gc3ZmLm1ldGFkYXRhW1wid29ybGQgYm91bmRpbmcgYm94XCJdO1xuICAgIHZhciBtaW4gPSBuZXcgTG12VmVjdG9yMyhiYm94Lm1pblhZWlswXSwgYmJveC5taW5YWVpbMV0sIGJib3gubWluWFlaWzJdKTtcbiAgICB2YXIgbWF4ID0gbmV3IExtdlZlY3RvcjMoYmJveC5tYXhYWVpbMF0sIGJib3gubWF4WFlaWzFdLCBiYm94Lm1heFhZWlsyXSk7XG4gICAgc3ZmLmJib3ggPSBuZXcgTG12Qm94MyhtaW4sIG1heCk7XG4gICAgc3ZmLm1vZGVsU3BhY2VCQm94ID0gc3ZmLmJib3guY2xvbmUoKTtcblxuICAgIHZhciBwdCA9IGRlcml2ZVBsYWNlbWVudFRyYW5zZm9ybShzdmYsIGxvYWRDb250ZXh0KTtcbiAgICBpZiAocHQgJiYgIXN2Zi5iYm94LmlzRW1wdHkoKSkge1xuICAgICAgICBzdmYuYmJveC5hcHBseU1hdHJpeDQocHQpO1xuICAgIH1cblxuICAgIC8vR2xvYmFsIG9mZnNldCBpcyB1c2VkIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbiBpc3N1ZXMgZm9yIG1vZGVsc1xuICAgIC8vbG9jYXRlZCBlbm9ybW91cyBkaXN0YW5jZXMgZnJvbSB0aGUgb3JpZ2luLiBUaGUgZGVmYXVsdCBpcyB0byBtb3ZlIHRoZSBtb2RlbCB0byB0aGUgb3JpZ2luXG4gICAgLy9idXQgaXQgY2FuIGJlIG92ZXJyaWRkZW4gaW4gY2FzZSBvZiBtb2RlbCBhZ2dyZWdhdGlvbiBzY2VuYXJpb3MsIHdoZXJlIG11bHRpcGxlXG4gICAgLy9tb2RlbHMgYXJlIGxvYWRlZCBpbnRvIHRoZSBzY2VuZSBhbmQgYSBjb21tb24gb2Zmc2V0IGlzIG5lZWRlZCBmb3IgYWxsLlxuICAgIGlmIChsb2FkQ29udGV4dC5nbG9iYWxPZmZzZXQpIHtcbiAgICAgICAgLy8gQXBwbHkgdXNlci1kZWZpbmVkIGdsb2JhbE9mZnNldFxuICAgICAgICBzdmYuZ2xvYmFsT2Zmc2V0ID0gbG9hZENvbnRleHQuZ2xvYmFsT2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENob29zZSBnbG9iYWwgb2Zmc2V0IGF1dG9tYXRpY2FsbHkgYXQgdGhlIGNlbnRlciBvZiB0aGUgcGxhY21lbmVudCB0cmFuc2Zvcm1lZCBtb2RlbC4gXG4gICAgICAgIHN2Zi5nbG9iYWxPZmZzZXQgPSBzdmYuYmJveC5nZXRDZW50ZXIobmV3IExtdlZlY3RvcjMoKSk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUGxhY2VtZW50V2l0aE9mZnNldChzdmYsIHB0KTtcblxuICAgIC8vIFRoZSBtb2RlbCBib3VuZGluZ0JveCBtdXN0IGZpbmFsbHkgYmUgaW4gdmlld2VyLWNvb3JkcywganVzdCBsaWtlIGV2ZXJ5dGhpbmcgZWxzZS4gSS5lLiB3aXRoIHN1YnRyYWN0ZWQgb2Zmc2V0LlxuICAgIC8vIFRoZXJlZm9yZSwgd2UgaGF2ZSB0byBzdWJ0cmFjdCB0aGUgZ2xvYmFsb2Zmc2V0IGZyb20gYmJveCBhcyB3ZWxsLlxuICAgIGlmICghc3ZmLmJib3guaXNFbXB0eSgpKSB7XG4gICAgICAgIHN2Zi5iYm94Lm1pbi5zdWIoc3ZmLmdsb2JhbE9mZnNldCk7XG4gICAgICAgIHN2Zi5iYm94Lm1heC5zdWIoc3ZmLmdsb2JhbE9mZnNldCk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdmYubWV0YWRhdGEsIFwiZG91YmxlIHNpZGVkIGdlb21ldHJ5XCIpXG4gICAgICAgICYmIHN2Zi5tZXRhZGF0YVtcImRvdWJsZSBzaWRlZCBnZW9tZXRyeVwiXVtcInZhbHVlXCJdKSAvL1RPRE86IGRvIHdlIHdhbnQgdG8gY2hlY2sgdGhlIGdsb2JhbCBmbGFnIG9yIGRyb3AgdGhhdCBhbmQgcmVseSBvbiBtYXRlcmlhbCBvbmx5P1xuICAgIHtcbiAgICAgICAgc3ZmLmRvdWJsZVNpZGVkID0gdHJ1ZTtcbiAgICB9XG5cbn1cblxuZnVuY3Rpb24gYXBwbHlPZmZzZXQoYSwgb2Zmc2V0KSB7XG4gICAgYVswXSAtPSBvZmZzZXQueDtcbiAgICBhWzFdIC09IG9mZnNldC55O1xuICAgIGFbMl0gLT0gb2Zmc2V0Lno7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUFuaW1hdGlvbnMoc3ZmKSB7XG5cbiAgICBpZiAoIXN2Zi5hbmltYXRpb25zKVxuICAgICAgICByZXR1cm47XG5cbiAgICAvLyBhcHBseSBnbG9iYWwgb2Zmc2V0IHRvIGFuaW1hdGlvbnNcbiAgICB2YXIgYW5pbWF0aW9ucyA9IHN2Zi5hbmltYXRpb25zW1wiYW5pbWF0aW9uc1wiXTtcbiAgICBpZiAoYW5pbWF0aW9ucykge1xuICAgICAgICB2YXIgZ2xvYmFsT2Zmc2V0ID0gc3ZmLmdsb2JhbE9mZnNldDtcbiAgICAgICAgdmFyIHQgPSBuZXcgTG12TWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbihnbG9iYWxPZmZzZXQueCwgZ2xvYmFsT2Zmc2V0LnksIGdsb2JhbE9mZnNldC56KTtcbiAgICAgICAgdmFyIHRpbnYgPSBuZXcgTG12TWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbigtZ2xvYmFsT2Zmc2V0LngsIC1nbG9iYWxPZmZzZXQueSwgLWdsb2JhbE9mZnNldC56KTtcbiAgICAgICAgdmFyIHIgPSBuZXcgTG12TWF0cml4NCgpO1xuICAgICAgICB2YXIgbSA9IG5ldyBMbXZNYXRyaXg0KCk7XG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYW5pbWF0aW9ucy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgdmFyIGFuaW0gPSBhbmltYXRpb25zW2FdO1xuICAgICAgICAgICAgaWYgKGFuaW0uaGllcmFyY2h5KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaCA9IDA7IGggPCBhbmltLmhpZXJhcmNoeS5sZW5ndGg7IGgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGFuaW0uaGllcmFyY2h5W2hdLmtleXM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0ga2V5c1trXS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZ2xvYmFsT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90ID0ga2V5c1trXS5yb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oe3g6cm90WzBdLCB5OnJvdFsxXSwgejpyb3RbMl0sIHc6cm90WzNdfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLm11bHRpcGx5TWF0cmljZXModCwgcikubXVsdGlwbHkodGludik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSB7eDogbS5lbGVtZW50c1sxMl0sIHk6IG0uZWxlbWVudHNbMTNdLCB6OiBtLmVsZW1lbnRzWzE0XX07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlPZmZzZXQocG9zLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0ga2V5c1trXS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseU9mZnNldCh0YXJnZXQsIGdsb2JhbE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSBrZXlzW2tdLnBvaW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgcG9pbnRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseU9mZnNldChwb2ludHNbcF0sIGdsb2JhbE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIEFwcGx5IHRyYW5zZm9ybSAoaWYgYW55KSB0byBnaXZlbiBjYW1lcmEgZGF0YSB3aXRoIHsgcG9zaXRpb24sIHRhcmdldCwgdXAsIG9ydGhvU2NhbGUgfVxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUNhbWVyYURhdGEoY2FtLCB0cmFuc2Zvcm0pIHtcblxuICAgIGlmICghdHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm0udHJhbnNmb3JtUG9pbnQoY2FtLnBvc2l0aW9uKTtcbiAgICB0cmFuc2Zvcm0udHJhbnNmb3JtUG9pbnQoY2FtLnRhcmdldCk7XG4gICAgdHJhbnNmb3JtLnRyYW5zZm9ybURpcmVjdGlvbihjYW0udXApO1xuXG4gICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpbmNsdWRlcyBzY2FsaW5nIChlaXRoZXIgYnkgdW5pdCBzY2FsaW5nIG9yIG1hbnVhbGx5IGluY2x1ZGVkIFxuICAgIC8vIGluIHRoZSBwbGFjZW1lbnQgdHJhbnNmb3JtKSwgb3J0aG9TY2FsZSB2YWx1ZXMgbmVlZCB0byBiZSBzY2FsZWQgYXMgd2VsbC5cbiAgICAvL1xuICAgIC8vIE5vdGU6IFdlIGRvbid0IHN1cHBvcnQgbm9uLXVuaWZvcm0gc2NhbGluZyB3ZWxsLiBIb3dldmVyLCBob21lLXZpZXdzIGNhbm5vdCBiZSByZWNvdmVyZWRcbiAgICAvLyAgICAgICBhbnl3YXkgaWYgdGhlIG1vZGVsIGlzIGRpc3RvcnRlZCB3aXRoIG5vbi11bmlmb3JtIHRyYW5zZm9ybXMuXG4gICAgaWYgKGlzRmluaXRlKGNhbS5vcnRob1NjYWxlKSkge1xuICAgICAgICBjb25zdCBzY2FsZSA9IHRyYW5zZm9ybS5nZXRNYXhTY2FsZU9uQXhpcygpO1xuICAgICAgICBjYW0ub3J0aG9TY2FsZSAqPSBzY2FsZTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiTG12VmVjdG9yMyIsIkxtdkJveDMiLCJMbXZNYXRyaXg0IiwiZ2V0VW5pdFNjYWxlIiwidW5pdCIsImlzSWRlbnRpdHkiLCJtdHgiLCJlIiwiZWxlbWVudHMiLCJpIiwiaiIsImRlcml2ZVBsYWNlbWVudFRyYW5zZm9ybSIsInN2ZiIsImxvYWRDb250ZXh0IiwiY3VzdG9tX3ZhbHVlcyIsIm1ldGFkYXRhIiwicGxhY2VtZW50VHJhbnNmb3JtIiwiYXBwbHlTY2FsaW5nIiwic2NhbGluZ0Zyb21Vbml0Iiwic2NhbGluZ1VuaXQiLCJmcm9tIiwidG8iLCJzY2FsaW5nRmFjdG9yIiwicGxhY2VtZW50UyIsInNjYWxpbmdUcmFuc2Zvcm0iLCJjb3B5IiwiYXBwbHlQbGFjZW1lbnRJbk1vZGVsVW5pdHMiLCJtdWx0aXBseSIsInJlZlBvaW50VHJhbnNmb3JtIiwic3JjIiwiZ2VvcmVmZXJlbmNlIiwicmVmUG9pbnRMTVYiLCJhbmdsZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk1hdGgiLCJQSSIsInJvdGF0aW9uIiwibSIsImNvcyIsInNpbiIsIm9mZnNldCIsImFwcGx5UmVmUG9pbnQiLCJwbGFjZW1lbnQiLCJjYWxjdWxhdGVQbGFjZW1lbnRXaXRoT2Zmc2V0IiwicHQiLCJnbyIsImdsb2JhbE9mZnNldCIsIngiLCJ5IiwieiIsIm1ha2VUcmFuc2xhdGlvbiIsInB0MiIsInBsYWNlbWVudFdpdGhPZmZzZXQiLCJpbml0UGxhY2VtZW50IiwiYmJveCIsIm1pbiIsIm1pblhZWiIsIm1heCIsIm1heFhZWiIsIm1vZGVsU3BhY2VCQm94IiwiY2xvbmUiLCJpc0VtcHR5IiwiYXBwbHlNYXRyaXg0IiwiZ2V0Q2VudGVyIiwic3ViIiwiZG91YmxlU2lkZWQiLCJhcHBseU9mZnNldCIsImEiLCJ0cmFuc2Zvcm1BbmltYXRpb25zIiwiYW5pbWF0aW9ucyIsInQiLCJ0aW52IiwiciIsImxlbmd0aCIsImFuaW0iLCJoaWVyYXJjaHkiLCJoIiwia2V5cyIsImsiLCJwb3MiLCJyb3QiLCJtYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiIsInciLCJtdWx0aXBseU1hdHJpY2VzIiwidGFyZ2V0IiwicG9pbnRzIiwicCIsInRyYW5zZm9ybUNhbWVyYURhdGEiLCJjYW0iLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1Qb2ludCIsInBvc2l0aW9uIiwidHJhbnNmb3JtRGlyZWN0aW9uIiwidXAiLCJpc0Zpbml0ZSIsIm9ydGhvU2NhbGUiLCJzY2FsZSIsImdldE1heFNjYWxlT25BeGlzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/SvfPlacementUtils.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/common/VbUtils.js": /*!**************************************************!*\ !*** ./src/file-loaders/lmvtk/common/VbUtils.js ***! \**************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VBUtils: () => (/* binding */ VBUtils)\n/* harmony export */ });\n\n\n\nconst VBUtils = {\n\n\n deduceUVRepetition: function (mesh) {\n\n for (var p in mesh.vblayout) {\n\n if (p.indexOf(\"uv\") != 0 || p.indexOf(\"uvw\") == 0)\n continue;\n\n var baseOffset = mesh.vblayout[p].offset;\n var floatStride = mesh.vbstride;\n var vbf = mesh.vb;\n var vcount = mesh.vb.length / floatStride;\n\n for (var i = 0, offset = baseOffset; i < vcount; i++, offset += floatStride)\n {\n var u = vbf[offset];\n var v = vbf[offset + 1];\n if (u > 2 || u < 0 || v > 2 || v < 0) {\n mesh.vblayout[p].isPattern = true;\n break;\n }\n }\n }\n },\n\n\n //Calculate the 3D bounding box and bounding sphere\n //of a mesh containing an interleaved vertex buffer\n computeBounds3D: function (mesh) {\n\n var minx = Infinity,miny = Infinity,minz = Infinity;\n var maxx = -Infinity,maxy = -Infinity,maxz = -Infinity;\n var i, offset, x, y, z;\n\n var floatStride = mesh.vbstride;\n var baseOffset = mesh.vblayout.position.offset;\n var vbf = mesh.vb;\n var vcount = mesh.vb.length / floatStride;\n\n for (i = 0, offset = baseOffset; i < vcount; i++, offset += floatStride)\n {\n x = vbf[offset];\n y = vbf[offset + 1];\n z = vbf[offset + 2];\n\n if (minx > x) minx = x;\n if (miny > y) miny = y;\n if (minz > z) minz = z;\n\n if (maxx < x) maxx = x;\n if (maxy < y) maxy = y;\n if (maxz < z) maxz = z;\n }\n\n mesh.boundingBox = {\n min: { x: minx, y: miny, z: minz },\n max: { x: maxx, y: maxy, z: maxz }\n };\n\n var cx = 0.5 * (minx + maxx),cy = 0.5 * (miny + maxy),cz = 0.5 * (minz + maxz);\n\n var bs = mesh.boundingSphere = {};\n bs.center = { x: cx, y: cy, z: cz };\n\n var maxRadiusSq = 0;\n for (i = 0, offset = baseOffset; i < vcount; i++, offset += floatStride) {\n\n x = vbf[offset];\n y = vbf[offset + 1];\n z = vbf[offset + 2];\n\n var dx = x - cx;\n var dy = y - cy;\n var dz = z - cz;\n var distsq = dx * dx + dy * dy + dz * dz;\n if (distsq > maxRadiusSq)\n maxRadiusSq = distsq;\n }\n\n bs.radius = Math.sqrt(maxRadiusSq);\n\n },\n\n bboxUnion: function (bdst, bsrc) {\n if (bsrc.min.x < bdst.min.x)\n bdst.min.x = bsrc.min.x;\n if (bsrc.min.y < bdst.min.y)\n bdst.min.y = bsrc.min.y;\n if (bsrc.min.z < bdst.min.z)\n bdst.min.z = bsrc.min.z;\n\n if (bsrc.max.x > bdst.max.x)\n bdst.max.x = bsrc.max.x;\n if (bsrc.max.y > bdst.max.y)\n bdst.max.y = bsrc.max.y;\n if (bsrc.max.z > bdst.max.z)\n bdst.max.z = bsrc.max.z;\n }\n\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9WYlV0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBYTs7O0FBR04sTUFBTUEsT0FBTyxHQUFHOzs7RUFHbkJDLGtCQUFrQixFQUFFLFNBQUFBLENBQVNDLElBQUksRUFBRTs7SUFFL0IsS0FBSyxJQUFJQyxDQUFDLElBQUlELElBQUksQ0FBQ0UsUUFBUSxFQUFFOztNQUV6QixJQUFJRCxDQUFDLENBQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUlGLENBQUMsQ0FBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7TUFDN0M7O01BRUosSUFBSUMsVUFBVSxHQUFHSixJQUFJLENBQUNFLFFBQVEsQ0FBQ0QsQ0FBQyxDQUFDLENBQUNJLE1BQU07TUFDeEMsSUFBSUMsV0FBVyxHQUFHTixJQUFJLENBQUNPLFFBQVE7TUFDL0IsSUFBSUMsR0FBRyxHQUFHUixJQUFJLENBQUNTLEVBQUU7TUFDakIsSUFBSUMsTUFBTSxHQUFHVixJQUFJLENBQUNTLEVBQUUsQ0FBQ0UsTUFBTSxHQUFDTCxXQUFXOztNQUV2QyxLQUFLLElBQUlNLENBQUMsR0FBRyxDQUFDLEVBQUVQLE1BQU0sR0FBR0QsVUFBVSxFQUFFUSxDQUFDLEdBQUNGLE1BQU0sRUFBRUUsQ0FBQyxFQUFFLEVBQUVQLE1BQU0sSUFBSUMsV0FBVztNQUN6RTtRQUNJLElBQUlPLENBQUMsR0FBR0wsR0FBRyxDQUFDSCxNQUFNLENBQUM7UUFDbkIsSUFBSVMsQ0FBQyxHQUFHTixHQUFHLENBQUNILE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDckIsSUFBSVEsQ0FBQyxHQUFHLENBQUMsSUFBSUEsQ0FBQyxHQUFHLENBQUMsSUFBSUMsQ0FBQyxHQUFHLENBQUMsSUFBSUEsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUNsQ2QsSUFBSSxDQUFDRSxRQUFRLENBQUNELENBQUMsQ0FBQyxDQUFDYyxTQUFTLEdBQUcsSUFBSTtVQUNqQztRQUNKO01B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SSxDQUFDakIsR0FBRyxDQUFDTixDQUFDLEdBQUdzQixJQUFJLENBQUNoQixHQUFHLENBQUNOLENBQUM7SUFDdkJzQixJQUFJLENBQUNoQixHQUFHLENBQUNOLENBQUMsR0FBR3VCLElBQUksQ0FBQ2pCLEdBQUcsQ0FBQ04sQ0FBQztJQUMzQixJQUFJdUIsSUFBSSxDQUFDakIsR0FBRyxDQUFDTCxDQUFDLEdBQUdxQixJQUFJLENBQUNoQixHQUFHLENBQUNMLENBQUM7SUFDdkJxQixJQUFJLENBQUNoQixHQUFHLENBQUNMLENBQUMsR0FBR3NCLElBQUksQ0FBQ2pCLEdBQUcsQ0FBQ0wsQ0FBQztJQUMzQixJQUFJc0IsSUFBSSxDQUFDakIsR0FBRyxDQUFDSixDQUFDLEdBQUdvQixJQUFJLENBQUNoQixHQUFHLENBQUNKLENBQUM7SUFDdkJvQixJQUFJLENBQUNoQixHQUFHLENBQUNKLENBQUMsR0FBR3FCLElBQUksQ0FBQ2pCLEdBQUcsQ0FBQ0osQ0FBQztFQUMvQjs7QUFFSixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9jb21tb24vVmJVdGlscy5qcz8xMTVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5cbmV4cG9ydCBjb25zdCBWQlV0aWxzID0ge1xuXG5cbiAgICBkZWR1Y2VVVlJlcGV0aXRpb246IGZ1bmN0aW9uKG1lc2gpIHtcblxuICAgICAgICBmb3IgKHZhciBwIGluIG1lc2gudmJsYXlvdXQpIHtcblxuICAgICAgICAgICAgaWYgKHAuaW5kZXhPZihcInV2XCIpICE9IDAgfHwgcC5pbmRleE9mKFwidXZ3XCIpID09IDApXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIHZhciBiYXNlT2Zmc2V0ID0gbWVzaC52YmxheW91dFtwXS5vZmZzZXQ7XG4gICAgICAgICAgICB2YXIgZmxvYXRTdHJpZGUgPSBtZXNoLnZic3RyaWRlO1xuICAgICAgICAgICAgdmFyIHZiZiA9IG1lc2gudmI7XG4gICAgICAgICAgICB2YXIgdmNvdW50ID0gbWVzaC52Yi5sZW5ndGgvZmxvYXRTdHJpZGU7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvZmZzZXQgPSBiYXNlT2Zmc2V0OyBpPHZjb3VudDsgaSsrLCBvZmZzZXQgKz0gZmxvYXRTdHJpZGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHUgPSB2YmZbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHZiZltvZmZzZXQrMV07XG4gICAgICAgICAgICAgICAgaWYgKHUgPiAyIHx8IHUgPCAwIHx8IHYgPiAyIHx8IHYgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc2gudmJsYXlvdXRbcF0uaXNQYXR0ZXJuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuXG4gICAgLy9DYWxjdWxhdGUgdGhlIDNEIGJvdW5kaW5nIGJveCBhbmQgYm91bmRpbmcgc3BoZXJlXG4gICAgLy9vZiBhIG1lc2ggY29udGFpbmluZyBhbiBpbnRlcmxlYXZlZCB2ZXJ0ZXggYnVmZmVyXG4gICAgY29tcHV0ZUJvdW5kczNEIDogZnVuY3Rpb24obWVzaCkge1xuXG4gICAgICAgIHZhciBtaW54ID0gSW5maW5pdHksIG1pbnkgPSBJbmZpbml0eSwgbWlueiA9IEluZmluaXR5O1xuICAgICAgICB2YXIgbWF4eCA9IC1JbmZpbml0eSwgbWF4eSA9IC1JbmZpbml0eSwgbWF4eiA9IC1JbmZpbml0eTtcbiAgICAgICAgdmFyIGksIG9mZnNldCwgeCwgeSwgejtcblxuICAgICAgICB2YXIgZmxvYXRTdHJpZGUgPSBtZXNoLnZic3RyaWRlO1xuICAgICAgICB2YXIgYmFzZU9mZnNldCA9IG1lc2gudmJsYXlvdXQucG9zaXRpb24ub2Zmc2V0O1xuICAgICAgICB2YXIgdmJmID0gbWVzaC52YjtcbiAgICAgICAgdmFyIHZjb3VudCA9IG1lc2gudmIubGVuZ3RoL2Zsb2F0U3RyaWRlO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIG9mZnNldCA9IGJhc2VPZmZzZXQ7IGk8dmNvdW50OyBpKyssIG9mZnNldCArPSBmbG9hdFN0cmlkZSlcbiAgICAgICAge1xuICAgICAgICAgICAgeCA9IHZiZltvZmZzZXRdO1xuICAgICAgICAgICAgeSA9IHZiZltvZmZzZXQrMV07XG4gICAgICAgICAgICB6ID0gdmJmW29mZnNldCsyXTtcblxuICAgICAgICAgICAgaWYgKG1pbnggPiB4KSBtaW54ID0geDtcbiAgICAgICAgICAgIGlmIChtaW55ID4geSkgbWlueSA9IHk7XG4gICAgICAgICAgICBpZiAobWlueiA+IHopIG1pbnogPSB6O1xuXG4gICAgICAgICAgICBpZiAobWF4eCA8IHgpIG1heHggPSB4O1xuICAgICAgICAgICAgaWYgKG1heHkgPCB5KSBtYXh5ID0geTtcbiAgICAgICAgICAgIGlmIChtYXh6IDwgeikgbWF4eiA9IHo7XG4gICAgICAgIH1cblxuICAgICAgICBtZXNoLmJvdW5kaW5nQm94ID0ge1xuICAgICAgICAgICAgICAgIG1pbjp7eDptaW54LCB5Om1pbnksIHo6bWluen0sXG4gICAgICAgICAgICAgICAgbWF4Ont4Om1heHgsIHk6bWF4eSwgejptYXh6fVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBjeCA9IDAuNSoobWlueCArIG1heHgpLCBjeSA9IDAuNSoobWlueSArIG1heHkpLCBjeiA9IDAuNSoobWlueiArIG1heHopO1xuXG4gICAgICAgIHZhciBicyA9IG1lc2guYm91bmRpbmdTcGhlcmUgPSB7fTtcbiAgICAgICAgYnMuY2VudGVyID0ge3g6Y3gsIHk6Y3ksIHo6Y3p9O1xuXG4gICAgICAgIHZhciBtYXhSYWRpdXNTcSA9IDA7XG4gICAgICAgIGZvciAoaSA9IDAsIG9mZnNldCA9IGJhc2VPZmZzZXQ7IGkgPCB2Y291bnQ7IGkrKywgb2Zmc2V0ICs9IGZsb2F0U3RyaWRlKSB7XG5cbiAgICAgICAgICAgIHggPSB2YmZbb2Zmc2V0XTtcbiAgICAgICAgICAgIHkgPSB2YmZbb2Zmc2V0KzFdO1xuICAgICAgICAgICAgeiA9IHZiZltvZmZzZXQrMl07XG5cbiAgICAgICAgICAgIHZhciBkeCA9IHggLSBjeDtcbiAgICAgICAgICAgIHZhciBkeSA9IHkgLSBjeTtcbiAgICAgICAgICAgIHZhciBkeiA9IHogLSBjejtcbiAgICAgICAgICAgIHZhciBkaXN0c3EgPSBkeCpkeCArIGR5KmR5ICsgZHoqZHo7XG4gICAgICAgICAgICBpZiAoZGlzdHNxID4gbWF4UmFkaXVzU3EpXG4gICAgICAgICAgICAgICAgbWF4UmFkaXVzU3EgPSBkaXN0c3E7XG4gICAgICAgIH1cblxuICAgICAgICBicy5yYWRpdXMgPSBNYXRoLnNxcnQobWF4UmFkaXVzU3EpO1xuXG4gICAgfSxcblxuICAgIGJib3hVbmlvbiA6IGZ1bmN0aW9uKGJkc3QsIGJzcmMpIHtcbiAgICAgICAgaWYgKGJzcmMubWluLnggPCBiZHN0Lm1pbi54KVxuICAgICAgICAgICAgYmRzdC5taW4ueCA9IGJzcmMubWluLng7XG4gICAgICAgIGlmIChic3JjLm1pbi55IDwgYmRzdC5taW4ueSlcbiAgICAgICAgICAgIGJkc3QubWluLnkgPSBic3JjLm1pbi55O1xuICAgICAgICBpZiAoYnNyYy5taW4ueiA8IGJkc3QubWluLnopXG4gICAgICAgICAgICBiZHN0Lm1pbi56ID0gYnNyYy5taW4uejtcblxuICAgICAgICBpZiAoYnNyYy5tYXgueCA+IGJkc3QubWF4LngpXG4gICAgICAgICAgICBiZHN0Lm1heC54ID0gYnNyYy5tYXgueDtcbiAgICAgICAgaWYgKGJzcmMubWF4LnkgPiBiZHN0Lm1heC55KVxuICAgICAgICAgICAgYmRzdC5tYXgueSA9IGJzcmMubWF4Lnk7XG4gICAgICAgIGlmIChic3JjLm1heC56ID4gYmRzdC5tYXgueilcbiAgICAgICAgICAgIGJkc3QubWF4LnogPSBic3JjLm1heC56O1xuICAgIH1cblxufTtcbiJdLCJuYW1lcyI6WyJWQlV0aWxzIiwiZGVkdWNlVVZSZXBldGl0aW9uIiwibWVzaCIsInAiLCJ2YmxheW91dCIsImluZGV4T2YiLCJiYXNlT2Zmc2V0Iiwib2Zmc2V0IiwiZmxvYXRTdHJpZGUiLCJ2YnN0cmlkZSIsInZiZiIsInZiIiwidmNvdW50IiwibGVuZ3RoIiwiaSIsInUiLCJ2IiwiaXNQYXR0ZXJuIiwiY29tcHV0ZUJvdW5kczNEIiwibWlueCIsIkluZmluaXR5IiwibWlueSIsIm1pbnoiLCJtYXh4IiwibWF4eSIsIm1heHoiLCJ4IiwieSIsInoiLCJwb3NpdGlvbiIsImJvdW5kaW5nQm94IiwibWluIiwibWF4IiwiY3giLCJjeSIsImN6IiwiYnMiLCJib3VuZGluZ1NwaGVyZSIsImNlbnRlciIsIm1heFJhZGl1c1NxIiwiZHgiLCJkeSIsImR6IiwiZGlzdHNxIiwicmFkaXVzIiwiTWF0aCIsInNxcnQiLCJiYm94VW5pb24iLCJiZHN0IiwiYnNyYyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/VbUtils.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/common/VertexBufferBuilder.js": /*!**************************************************************!*\ !*** ./src/file-loaders/lmvtk/common/VertexBufferBuilder.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VertexBufferBuilder: () => (/* binding */ VertexBufferBuilder)\n/* harmony export */ });\n\n\n\nvar TAU = Math.PI * 2;\n\nvar VBB_GT_TRIANGLE_INDEXED = 0,\n VBB_GT_LINE_SEGMENT = 1,\n VBB_GT_ARC_CIRCULAR = 2,\n VBB_GT_ARC_ELLIPTICAL = 3,\n VBB_GT_TEX_QUAD = 4,\n VBB_GT_ONE_TRIANGLE = 5,\n VBB_GT_MSDF_TRIANGLE_INDEXED = 6,\n VBB_GT_TEX_TRIANGLE_INDEXED = 7,\n VBB_GT_LINE_SEGMENT_CAPPED = 8,\n VBB_GT_LINE_SEGMENT_CAPPED_START = 9,\n VBB_GT_LINE_SEGMENT_CAPPED_END = 10,\n VBB_GT_LINE_SEGMENT_MITER = 11;\n\nvar VBB_SEG_START_RIGHT = 0, // this starts intentionally at 0!\n VBB_SEG_START_LEFT = 1,\n VBB_SEG_END_RIGHT = 2,\n VBB_SEG_END_LEFT = 3;\n\nvar VBB_COLOR_OFFSET = 6,\n VBB_DBID_OFFSET = 7,\n VBB_FLAGS_OFFSET = 8,\n VBB_LAYER_VP_OFFSET = 9;\n\nvar QUAD_TRIANGLE_INDICES = [0, 1, 3, 0, 3, 2];\n\n// align changes here with the uniforms in LineShaderSS.js!!!\nvar VBB_MITER_SEGMENT_SCALE_FACTOR = 1023.0;\nvar VBB_MITER_SEGMENT_CP = 65536.0;\n\n// VBB_MITER_SEGMENT_SCALE_FACTOR * VBB_MITER_SEGMENT_MAX < VBB_MITER_SEGMENT_CP\nvar VBB_MITER_SEGMENT_MAX = 64.0;\n\nfunction VertexBufferBuilder(useInstancing, allocSize, fullCount, useCompactBuffers)\n{\n var MAX_VCOUNT = allocSize || 65536;\n this.FULL_COUNT = (fullCount || 32767) | 0;\n\n this.useInstancing = useInstancing;\n this.useCompactBuffers = useCompactBuffers;\n\n this.stride = 10;\n this.allocVcount = 4 * (this.useInstancing ? MAX_VCOUNT / 4 : MAX_VCOUNT);\n\n this.vb = new ArrayBuffer(this.stride * this.allocVcount);\n this.vbf = new Float32Array(this.vb);\n this.vbi = new Int32Array(this.vb);\n this.ib = this.useInstancing ? null : new Uint16Array(MAX_VCOUNT);\n this.minLineWidth = Number.MAX_VALUE;\n this.reset(0);\n\n}\n\nVertexBufferBuilder.prototype.reset = function (vcount) {\n // This is used to restore the vcount when restoring stream state as well as at init time.\n this.vcount = vcount;\n\n this.icount = 0;\n\n this.minx = this.miny = Infinity;\n this.maxx = this.maxy = -Infinity;\n\n //Keeps track of objectIds referenced by geometry in the VB\n this.dbIds = {};\n this.lastDbId = null;\n\n //Keep track of unique colors used by this VB\n this.colors = {};\n\n this.numEllipticals = 0;\n this.numCirculars = 0;\n this.numTriangleGeoms = 0;\n this.numMiterLines = 0;\n\n // If false, all lines are of type 0 (solid), so that we don't need line-pattern support.\n this.hasLineStyles=f alse;\n\n //Certain fields can be invariant over large numbers of primitives.\n //We keep track of those in order to optimize the vertex layout by\n //pulling invariants into shader uniforms.\n this.changeTracking={ };\n\n this.stride=1 0;\n};\n\nVertexBufferBuilder.prototype.expandStride=f unction ()\n{\n //Currently hardcoded to expand by 4 floats.\n var expandBy=2 ;\n\n var stride=t his.stride;\n\n if (stride>= 12)\n return;\n\n var nstride = this.stride + expandBy;\n\n var nvb = new ArrayBuffer(nstride * this.allocVcount);\n\n var src = new Uint8Array(this.vb);\n var dst = new Uint8Array(nvb);\n\n for (var i = 0, iEnd = this.vcount; i < iEnd; i++) {\n var os=i * stride * 4;\n var od=i * nstride * 4;\n\n for (var j=0 ; j < stride * 4; j++)\n dst[od + j]=s rc[os + j];\n }\n\n this.vb=n vb;\n this.vbf=n ew Float32Array(nvb);\n this.vbi=n ew Int32Array(nvb);\n this.stride=n stride;\n\n};\n\nVertexBufferBuilder.prototype.addToBounds=f unction (x, y)\n{\n if (x < this.minx) this.minx=x ;\n if (x> this.maxx) this.maxx = x;\n if (y < this.miny) this.miny=y ;\n if (y> this.maxy) this.maxy = y;\n};\n\nvar _toInt32 = new Int32Array(1);\nfunction toInt32(c) {\n _toInt32[0] = c;\n return _toInt32[0];\n}\n\nVertexBufferBuilder.prototype.trackChanges = function (geomType, color, dbId, layerId, vpId, linePattern) {\n\n if (dbId !== this.lastDbId) {\n this.dbIds[toInt32(dbId)] = 1;\n this.lastDbId = dbId;\n }\n\n if (linePattern) {\n this.hasLineStyles = true;\n }\n\n if (!this.useCompactBuffers)\n return;\n\n var ct = this.changeTracking;\n\n function checkOne(whichAttr, val) {\n if (ct[whichAttr] === undefined)\n ct[whichAttr] = geomType;else\n if (ct[whichAttr] === val)\n ct[whichAttr + \"Varies\"] = true;\n }\n\n checkOne(\"geomType\", geomType);\n checkOne(\"color\", color);\n checkOne(\"dbId\", dbId);\n checkOne(\"layerId\", layerId);\n checkOne(\"viewportId\", vpId);\n checkOne(\"linePattern\", linePattern);\n\n this.colors[toInt32(color)] = 1;\n};\n\n\nVertexBufferBuilder.prototype.setCommonVertexAttribs = function (offset, vertexId, geomType, color, dbId, layerId, vpId, linePattern)\n{\n this.trackChanges(geomType, color, dbId, layerId, vpId, linePattern);\n\n // align changes here with the \"decodeCommonAttribs()\" function in LineShader.js and VertexBufferReader.js!!!\n vertexId = vertexId & 0xff; // 8 bit\n geomType = geomType & 0xff; // 8 bit\n linePattern = linePattern & 0xff; // 8 bit\n layerId = layerId & 0xffff; // 16 bit\n vpId = vpId & 0xffff; // 16 bit\n\n this.vbi[offset + VBB_FLAGS_OFFSET] = vertexId | geomType << 8 | linePattern << 16; // vertexId: int8; geomType: int8; linePattern: int8; ghostingFlag: int8\n this.vbi[offset + VBB_COLOR_OFFSET]=c olor;\n this.vbi[offset + VBB_DBID_OFFSET]=d bId;\n this.vbi[offset + VBB_LAYER_VP_OFFSET]=l ayerId | vpId << 16; // layerId: int16; vpId: int16\n};\n\n//Creates a non-indexed triangle geometry vertex (triangle vertex coords stored in single vertex structure)\nVertexBufferBuilder.prototype.addVertexTriangleGeom=f unction (x1, y1, x2, y2, x3, y3, color, dbId, layerId, vpId)\n{\n var vi=t his.vcount;\n var vbf=t his.vbf;\n\n var repeat=t his.useInstancing ? 1 : 4;\n for (var i=0 ; i < repeat; i++) {\n var offset=( vi + i) * this.stride;\n\n // align changes here with the \ "decodeTriangleData()\" function in LineShader.js!!!\n vbf[offset]=x 1;\n vbf[offset + 1]=y 1;\n vbf[offset + 2]=x 2;\n\n vbf[offset + 3]=y 2;\n vbf[offset + 4]=x 3;\n vbf[offset + 5]=y 3;\n\n this.setCommonVertexAttribs(offset, VBB_SEG_START_RIGHT + i, VBB_GT_ONE_TRIANGLE, color, dbId, layerId, vpId, /*linePattern*/0);\n this.vcount++;\n }\n\n return vi;\n};\n\n\nVertexBufferBuilder.prototype.addVertexLine=f unction (x, y, angle, distanceAlong, totalDistance, lineWidth, color, dbId, layerId, vpId, lineType, buttCapStart, buttCapEnd)\n{\n var vi=t his.vcount;\n var vbf=t his.vbf;\n\n if (dbId>= 0 && lineWidth > 0 && distanceAlong > 0) {\n this.minLineWidth = Math.min(this.minLineWidth, lineWidth);\n }\n\n var geomType = VBB_GT_LINE_SEGMENT;\n if (buttCapStart && buttCapEnd) {\n geomType = VBB_GT_LINE_SEGMENT_CAPPED;\n } else\n if (buttCapStart) {\n geomType = VBB_GT_LINE_SEGMENT_CAPPED_START;\n } else\n if (buttCapEnd) {\n geomType = VBB_GT_LINE_SEGMENT_CAPPED_END;\n }\n\n var repeat = this.useInstancing ? 1 : 4;\n for (var i = 0; i < repeat; i++) {\n var offset=( vi + i) * this.stride;\n\n // align changes here with the \ "decodeSegmentData()\" function in LineShader.js and VertexBufferReader!!!\n vbf[offset]=x ;\n vbf[offset + 1]=y ;\n vbf[offset + 2]=( angle + Math.PI) / TAU;\n\n vbf[offset + 3]=d istanceAlong;\n vbf[offset + 4]=l ineWidth * 0.5; // we are storing only the half width (i.e., the radius)\n vbf[offset + 5]=t otalDistance;\n\n this.setCommonVertexAttribs(offset, VBB_SEG_START_RIGHT + i, geomType, color, dbId, layerId, vpId, lineType);\n this.vcount++;\n }\n\n return vi;\n};\n\nVertexBufferBuilder.prototype.addVertexMiterLine=f unction (x, y, angle, anglePrev, angleNext, distanceAlong, distanceAlongPN, lineWidth, color, dbId, layerId, vpId, lineType)\n{\n var vi=t his.vcount;\n var vbf=t his.vbf;\n\n if (dbId>= 0 && lineWidth > 0) {\n this.minLineWidth = Math.min(this.minLineWidth, lineWidth);\n }\n\n var repeat = this.useInstancing ? 1 : 4;\n for (var i = 0; i < repeat; i++) {\n var offset=( vi + i) * this.stride;\n\n // align changes here with the \ "decodeMiterSegment()\" function in LineShaderSS.js!!!\n vbf[offset]=x ;\n vbf[offset + 1]=y ;\n vbf[offset + 2]=( angle + Math.PI) / TAU;\n\n vbf[offset + 3]=d istanceAlong;\n vbf[offset + 4]=l ineWidth * 0.5; // we are storing only the half width (i.e., the radius)\n vbf[offset + 5]=( anglePrev + Math.PI) / TAU;\n\n vbf[offset + 10]=( angleNext + Math.PI) / TAU;\n vbf[offset + 11]=d istanceAlongPN;\n\n this.setCommonVertexAttribs(offset, VBB_SEG_START_RIGHT + i, VBB_GT_LINE_SEGMENT_MITER, color, dbId, layerId, vpId, lineType);\n this.vcount++;\n }\n\n return vi;\n};\n\nVertexBufferBuilder.prototype.addVertexTexQuad=f unction (centerX, centerY, width, height, rotation, color, dbId, layerId, vpId)\n{\n var vi=t his.vcount;\n var vbf=t his.vbf;\n\n var repeat=t his.useInstancing ? 1 : 4;\n for (var i=0 ; i < repeat; i++) {\n var offset=( vi + i) * this.stride;\n\n // align changes here with the \ "decodeTexQuadData()\" function in LineShader.js!!!\n vbf[offset]=c enterX;\n vbf[offset + 1]=c enterY;\n vbf[offset + 2]=r otation / TAU;\n\n vbf[offset + 3]=w idth;\n vbf[offset + 4]=h eight;\n\n this.setCommonVertexAttribs(offset, VBB_SEG_START_RIGHT + i, VBB_GT_TEX_QUAD, color, dbId, layerId, vpId, /*linePattern*/0);\n this.vcount++;\n }\n\n return vi;\n};\n\n\nVertexBufferBuilder.prototype.addVertexArc=f unction (x, y, startAngle, endAngle, major, minor, tilt, lineWidth, color, dbId, layerId, vpId)\n{\n var vi=t his.vcount;\n var vbf=t his.vbf;\n\n var geomType=m ajor==m inor ? VBB_GT_ARC_CIRCULAR : VBB_GT_ARC_ELLIPTICAL;\n\n var repeat=t his.useInstancing ? 1 : 4;\n for (var i=0 ; i < repeat; i++) {\n var offset=( vi + i) * this.stride;\n\n // align changes here with the \ "decodeArcData()\" function in LineShader.js!!!\n vbf[offset]=x ;\n vbf[offset + 1]=y ;\n vbf[offset + 2]=s tartAngle / TAU;\n\n vbf[offset + 3]=e ndAngle / TAU;\n vbf[offset + 4]=l ineWidth * 0.5; // we are storing only the half width (i.e., the radius)\n vbf[offset + 5]=m ajor; //=r adius for circular arcs\n\n if (geomType===V BB_GT_ARC_ELLIPTICAL) {\n vbf[offset + 10]=m inor;\n vbf[offset + 11]=t ilt;\n }\n\n this.setCommonVertexAttribs(offset, VBB_SEG_START_RIGHT + i, geomType, color, dbId, layerId, vpId, /*linePattern*/0);\n this.vcount++;\n }\n\n return vi;\n};\n\n\n\n\n//====================================================================================================\n//====================================================================================================\n// Indexed triangle code path can only be used when hardware instancing is not in use.\n// Otherwise, the addTriangleGeom operation should be used to add simple triangles to the buffer.\n//====================================================================================================\n//====================================================================================================\n\nVertexBufferBuilder.prototype.addVertex=f unction (x, y, color, dbId, layerId, vpId)\n{let flag=a rguments.length> 6 && arguments[6] !== undefined ? arguments[6] : VBB_GT_TRIANGLE_INDEXED;\n if (this.useInstancing)\n return; //not supported if instancing is used.\n\n var vi = this.vcount;\n var offset = this.stride * vi;\n var vbf = this.vbf;\n\n // align changes here with the \"decodeTriangleData()\" function in LineShader.js!!!\n vbf[offset] = x;\n vbf[offset + 1] = y;\n\n this.setCommonVertexAttribs(offset, /*vertexId*/0, flag, color, dbId, layerId, vpId, /*linePattern*/0);\n this.vcount++;\n\n return vi;\n};\n\n\nVertexBufferBuilder.prototype.addVertexPolytriangle = function (x, y, color, dbId, layerId, vpId)\n{\n if (this.useInstancing)\n return; //not supported if instancing is used.\n\n this.addVertex(x, y, color, dbId, layerId, vpId);\n\n this.addToBounds(x, y);\n};\n\nVertexBufferBuilder.prototype.addVertexMSDFPolytriangle = function (x, y, u, v, color, dbId, layerId, vpId)\n{\n this.addVertexTexPolytriangle(x, y, u, v, color, dbId, layerId, vpId, VBB_GT_MSDF_TRIANGLE_INDEXED);\n};\n\nVertexBufferBuilder.prototype.addIndices = function (indices, vindex) {\n\n if (this.useInstancing)\n return; //not supported if instancing is used.\n\n var ib = this.ib;\n var ii = this.icount;\n\n if (ii + indices.length >= ib.length) {\n var ibnew = new Uint16Array(Math.max(indices.length, ib.length) * 2);\n for (let i = 0; i < ii; ++i) {\n ibnew[i]=i b[i];\n }\n this.ib=i b=i bnew;\n }\n\n for (let i=0 ; i < indices.length; ++i) {\n ib[ii + i]=v index + indices[i];\n }\n\n this.icount +=i ndices.length;\n};\n\n//====================================================================================================\n//====================================================================================================\n// End indexed triangle code path.\n//====================================================================================================\n//====================================================================================================\n\n\nVertexBufferBuilder.prototype.finalizeQuad=f unction (vindex)\n{\n if (!this.useInstancing) {\n this.addIndices(QUAD_TRIANGLE_INDICES, vindex);\n }\n};\n\n\nVertexBufferBuilder.prototype.addSegment=f unction (x1, y1, x2, y2, totalDistance, lineWidth, color, dbId, layerId, vpId, lineType, buttCapStart, buttCapEnd)\n{\n var dx=x 2 - x1;\n var dy=y 2 - y1;\n var angle=d x || dy ? Math.atan2(dy, dx) : 0.0;\n var segLen=d x || dy ? Math.sqrt(dx * dx + dy * dy) : 0.0;\n\n //Add four vertices for the bbox of this line segment\n //This call sets the stuff that 's common for all four\n var v = this.addVertexLine(x1, y1, angle, segLen, totalDistance, lineWidth, color, dbId, layerId, vpId, lineType, buttCapStart, buttCapEnd);\n\n this.finalizeQuad(v);\n this.addToBounds(x1, y1);\n this.addToBounds(x2, y2);\n};\n\nVertexBufferBuilder.prototype.addMiterSegment = function (x1, y1, x2, y2, x3, y3, x4, y4, totalDistance, lineWidth, color, dbId, layerId, vpId, lineType, buttCapStart, buttCapEnd)\n{\n if (this.useCompactBuffers) {\n this.addSegment(x2, y2, x3, y3, totalDistance, lineWidth, color, dbId, layerId, vpId, lineType, buttCapStart, buttCapEnd);\n return;\n }\n\n this.numMiterLines++;\n\n //Miter segments need large vertex layout\n this.expandStride();\n\n //Primary segment to be drawn\n var dx2 = x3 - x2;\n var dy2 = y3 - y2;\n var angle = dx2 || dy2 ? Math.atan2(dy2, dx2) : 0.0;\n var segLen = dx2 || dy2 ? Math.sqrt(dx2 * dx2 + dy2 * dy2) : 0.0;\n\n //Supporting segments (previous + next) to calculate miter joints\n var dx = x2 - x1;\n var dy = y2 - y1;\n var anglePrev = dx || dy ? Math.atan2(dy, dx) : angle;\n var segLenPrev = dx || dy ? Math.sqrt(dx * dx + dy * dy) : 1.0;\n\n var dx3 = x4 - x3;\n var dy3 = y4 - y3;\n var angleNext = dx3 || dy3 ? Math.atan2(dy3, dx3) : angle;\n var segLenNext = dx3 || dy3 ? Math.sqrt(dx3 * dx3 + dy3 * dy3) : 1.0;\n\n // Compress previous and next seg length to fit into one float, loses precision.\n var prev = Math.floor(Math.min(VBB_MITER_SEGMENT_MAX, segLenPrev) * VBB_MITER_SEGMENT_SCALE_FACTOR);\n var next = Math.floor(Math.min(VBB_MITER_SEGMENT_MAX, segLenNext) * VBB_MITER_SEGMENT_SCALE_FACTOR);\n var segLenPN = next * VBB_MITER_SEGMENT_CP + prev;\n\n //Add four vertices for the bbox of this line segment\n //This call sets the stuff that's common for all four\n var v=t his.addVertexMiterLine(x2, y2, angle, anglePrev, angleNext, segLen, segLenPN, lineWidth, color, dbId, layerId, vpId, lineType);\n\n this.finalizeQuad(v);\n this.addToBounds(x2, y2);\n this.addToBounds(x3, y3);\n};\n\n\n//Creates a non-indexed triangle geometry (triangle vertex coords stored in single vertex structure)\nVertexBufferBuilder.prototype.addTriangleGeom=f unction (x1, y1, x2, y2, x3, y3, color, dbId, layerId, vpId)\n{\n this.numTriangleGeoms++;\n\n var v=t his.addVertexTriangleGeom(x1, y1, x2, y2, x3, y3, color, dbId, layerId, vpId);\n\n this.finalizeQuad(v);\n this.addToBounds(x1, y1);\n this.addToBounds(x2, y2);\n this.addToBounds(x3, y3);\n};\n\nVertexBufferBuilder.prototype.addArc=f unction (cx, cy, start, end, major, minor, tilt, lineWidth, color, dbId, layerId, vpId)\n{\n if (major==m inor) {\n this.numCirculars++;\n } else {\n this.numEllipticals++;\n\n //Ellipticals need large vertex layout\n this.expandStride();\n }\n\n // This is a workaround, when the circular arc has rotation, the extractor cannot handle it.\n // After the fix is deployed in extractor, this can be removed.\n var result=f ixUglyArc(start, end);\n start=r esult.start;\n end=r esult.end;\n\n //If both start and end angles are exactly 0, it 's a complete ellipse/circle\n //This is working around a bug in the F2D writer, where an fmod operation will potentially.\n //convert 2pi to 0.\n if (start == 0 && end == 0)\n end = TAU;\n\n //Add two zero length segments as round caps at the end points\n {\n //If it's a full ellipse, then we don 't need caps\n var range = Math.abs(start - end);\n if (range > 0.0001 && Math.abs(range - TAU) > 0.0001)\n {\n var sx = cx + major * Math.cos(start);\n var sy = cy + minor * Math.sin(start);\n this.addSegment(sx, sy, sx, sy, 0, lineWidth, color, dbId, layerId, vpId);\n\n var ex = cx + major * Math.cos(end);\n var ey = cy + minor * Math.sin(end);\n this.addSegment(ex, ey, ex, ey, 0, lineWidth, color, dbId, layerId, vpId);\n\n //TODO: also must add all the vertices at all multiples of PI/2 in the start-end range to get exact bounds\n } else\n\n {\n this.addToBounds(cx - major, cy - minor);\n this.addToBounds(cx + major, cy + minor);\n }\n\n // Add the center of the circle / ellipse as a single transparent dot - So it wil be snappable.\n const hiddenColor = 0x01ffffff; // Note that lineShader discards fully transparent fragments. Therefore, we use a white here with very small, but nonzero alpha.\n var c = this.addVertexLine(cx, cy, 0, 0.0001, 0, 0, hiddenColor, dbId, layerId, vpId);\n this.finalizeQuad(c);\n }\n\n var v = this.addVertexArc(cx, cy, start, end, major, minor, tilt, lineWidth, color, dbId, layerId, vpId);\n\n this.finalizeQuad(v);\n\n //Testing caps\n //If it's a full ellipse, then we don 't need caps\n // let range = Math.abs(start - end);\n // if (Math.abs(range - TAU) > 0.0001)\n // {\n // let sx = cx + major * Math.cos(start);\n // let sy = cy + minor * Math.sin(start);\n // this.addSegment(sx, sy, sx, sy, 0, lineWidth, 0xff00ffff, dbId, layerId, vpId);\n\n // let ex = cx + major * Math.cos(end);\n // let ey = cy + minor * Math.sin(end);\n // this.addSegment(ex, ey, ex, ey, 0, lineWidth, 0xff00ffff, dbId, layerId, vpId);\n // }\n};\n\n\nVertexBufferBuilder.prototype.addTexturedQuad = function (centerX, centerY, width, height, rotation, color, dbId, layerId, vpId)\n{\n //Height is specified using the line weight field.\n //This will result in height being clamped to at least one pixel\n //but that's ok (zero height for an image would be rare).\n var v=t his.addVertexTexQuad(centerX, centerY, width, height, rotation, color, dbId, layerId, vpId);\n\n this.finalizeQuad(v);\n\n var cos=0 .5 * Math.cos(rotation);\n var sin=0 .5 * Math.sin(rotation);\n var w=M ath.abs(width * cos) + Math.abs(height * sin);\n var h=M ath.abs(width * sin) + Math.abs(height * cos);\n this.addToBounds(centerX - w, centerY - h);\n this.addToBounds(centerX + w, centerY + h);\n};\n\nVertexBufferBuilder.prototype.addVertexImagePolytriangle=f unction (x, y, u, v, color, dbId, layerId, vpId) {\n return this.addVertexTexPolytriangle(x, y, u, v, color, dbId, layerId, vpId, VBB_GT_TEX_TRIANGLE_INDEXED);\n};\n\nVertexBufferBuilder.prototype.addVertexTexPolytriangle=f unction (x, y, u, v, color, dbId, layerId, vpId, type) {\n if (this.useInstancing)\n return; //not supported if instancing is used.\n\n let vi=t his.vcount;\n let vbf=t his.vbf;\n this.addVertex(x, y, color, dbId, layerId, vpId, type);\n\n // put the UV data into the fields2 attribute\n vbf[vi * this.stride + 2]=u ;\n vbf[vi * this.stride + 3]=v ;\n\n this.addToBounds(x, y);\n};\n\n\nVertexBufferBuilder.prototype.isFull=f unction (addCount)\n{\n addCount=a ddCount || 3;\n var mult=t his.useInstancing ? 4 : 1;\n\n return this.vcount * mult + addCount> this.FULL_COUNT;\n};\n\n/**\n * Determines if there are invariant memebers in the vertex layout,\n * which can be moved out to shader uniforms to save space.\n * Determines if uint16 can be used to store positions data\n * @returns {MeshData}\n */\nVertexBufferBuilder.prototype.makeCompactVertexLayout = function () {\n\n var colorKeys = Object.keys(this.colors);\n var dbIdsKeys = Object.keys(this.dbIds);\n\n // if (this.changeTracking.geomType === VBB_GT_LINE_SEGMENT && !this.changeTracking.geomTypeVaries) {\n // console.log(\"Vertex buffer only has lines\");\n // }\n\n // if (this.changeTracking.color === VBB_GT_LINE_SEGMENT && !this.changeTracking.colorVaries) {\n // console.log(\"Vertex buffer has invariant color\");\n // } else {\n // console.log(\"Num colors:\", colorKeys.length);\n // }\n\n // if (!this.changeTracking.viewportIdVaries) {\n // console.log(\"Vertex buffer has invariant viewportId\");\n // }\n\n // if (!this.changeTracking.layerIdVaries) {\n // console.log(\"Vertex buffer has invariant layerId\");\n // }\n\n // if (!this.changeTracking.dbIdVaries) {\n // console.log(\"Vertex buffer has invariant dbId\");\n // } else {\n // console.log(\"Num dbIds:\", dbIdsKeys.length);\n // }\n\n if (this.stride !== 10)\n return null;\n\n //create the color/dbId index texture\n var texLen = colorKeys.length + dbIdsKeys.length;\n\n if (colorKeys.length + dbIdsKeys.length > 65536)\n return null;\n\n var texData = new Int32Array(texLen + 1);\n texData[0] = 0;\n var count = 1;\n for (let i = 0; i < colorKeys.length; i++, count++) {\n texData[count]=p arseInt(colorKeys[i]);\n this.colors[colorKeys[i]]=c ount;\n }\n for (let i=0 ; i < dbIdsKeys.length; i++, count++) {\n texData[count]=p arseInt(dbIdsKeys[i]);\n this.dbIds[dbIdsKeys[i]]=c ount;\n }\n\n var compactStride=6 ;\n\n var vb=n ew ArrayBuffer(compactStride * 4 * this.vcount);\n var vbi=n ew Int32Array(vb);\n var vbs=n ew Uint16Array(vb);\n\n var sx=t his.maxx - this.minx || 1;\n var sy=t his.maxy - this.miny || 1;\n var ox=t his.minx;\n var oy=t his.miny;\n var ss=M ath.max(sx, sy);\n\n function tx(x) {\n return 0 | Math.round((x - ox) / sx * 65535);\n }\n\n function ty(y) {\n return 0 | Math.round((y - oy) / sy * 65535);\n }\n\n function ts(x) {\n return 0 | Math.round(x / ss * 65535);\n }\n\n function unit(x) {\n return 0 | x * 65535;\n }\n\n function lineWeight(x) {\n if (x < 0) {\n return 32768 + Math.min(1.0, -x / 1024) * 32767;\n } else {\n // Don 't allow non-zero line weights to become 0 because\n // of the compact buffer format.\n return x ? 0 | Math.round(x / ss * 32767) || 1 : x;\n }\n }\n\n for (var i = 0; i < this.vcount; i++) {\n\n var srcOffset = this.stride * i;\n var dstOffset = compactStride * i;\n var ushortOffset = dstOffset * 2;\n\n var gt = this.vbi[srcOffset + VBB_FLAGS_OFFSET] >> 8 & 0xff;\n\n //Handle data that varies per geometry type and needs scaling\n //to uint16 packing, e.g. positions and angles\n switch (gt) {\n case VBB_GT_TRIANGLE_INDEXED:\n vbs[ushortOffset] = tx(this.vbf[srcOffset]);\n vbs[ushortOffset + 1] = ty(this.vbf[srcOffset + 1]);\n break;\n\n case VBB_GT_LINE_SEGMENT:\n case VBB_GT_LINE_SEGMENT_CAPPED:\n case VBB_GT_LINE_SEGMENT_CAPPED_START:\n case VBB_GT_LINE_SEGMENT_CAPPED_END:\n vbs[ushortOffset] = tx(this.vbf[srcOffset]);\n vbs[ushortOffset + 1] = ty(this.vbf[srcOffset + 1]);\n vbs[ushortOffset + 2] = unit(this.vbf[srcOffset + 2]);\n vbs[ushortOffset + 3] = ts(this.vbf[srcOffset + 3]);\n vbs[ushortOffset + 4] = lineWeight(this.vbf[srcOffset + 4]);\n break;\n\n case VBB_GT_ARC_CIRCULAR:\n vbs[ushortOffset] = tx(this.vbf[srcOffset]);\n vbs[ushortOffset + 1] = ty(this.vbf[srcOffset + 1]);\n vbs[ushortOffset + 2] = unit(this.vbf[srcOffset + 2]);\n vbs[ushortOffset + 3] = unit(this.vbf[srcOffset + 3]);\n vbs[ushortOffset + 4] = lineWeight(this.vbf[srcOffset + 4]);\n vbs[ushortOffset + 5] = ts(this.vbf[srcOffset + 5]);\n break;\n\n case VBB_GT_ARC_ELLIPTICAL:\n case VBB_GT_LINE_SEGMENT_MITER:\n //will not happen\n break;\n\n case VBB_GT_TEX_QUAD:\n vbs[ushortOffset] = tx(this.vbf[srcOffset]);\n vbs[ushortOffset + 1] = ty(this.vbf[srcOffset + 1]);\n vbs[ushortOffset + 2] = unit(this.vbf[srcOffset + 2]);\n vbs[ushortOffset + 3] = ts(this.vbf[srcOffset + 3]);\n vbs[ushortOffset + 4] = ts(this.vbf[srcOffset + 4]);\n break;\n\n case VBB_GT_ONE_TRIANGLE:\n vbs[ushortOffset] = tx(this.vbf[srcOffset]);\n vbs[ushortOffset + 1] = ty(this.vbf[srcOffset + 1]);\n vbs[ushortOffset + 2] = tx(this.vbf[srcOffset + 2]);\n vbs[ushortOffset + 3] = ty(this.vbf[srcOffset + 3]);\n vbs[ushortOffset + 4] = tx(this.vbf[srcOffset + 4]);\n vbs[ushortOffset + 5] = ty(this.vbf[srcOffset + 5]);\n break;\n\n default:console.error(\"Unknown geometry type\");break;\n }\n\n //Copy the common data to the new offset\n vbs[ushortOffset + 6] = this.colors[this.vbi[srcOffset + VBB_COLOR_OFFSET]] || 0;\n vbs[ushortOffset + 7] = this.dbIds[this.vbi[srcOffset + VBB_DBID_OFFSET]] || 0;\n\n vbi[dstOffset + 4] = this.vbi[srcOffset + VBB_FLAGS_OFFSET];\n vbi[dstOffset + 5] = this.vbi[srcOffset + VBB_LAYER_VP_OFFSET];\n }\n\n var mesh = {};\n\n mesh.vb = new Float32Array(vb);\n mesh.vbstride = compactStride;\n\n var d = this.useInstancing ? 1 : 0;\n\n mesh.vblayout = {\n \"fields1\": { offset: 0, itemSize: 2, bytesPerItem: 2, divisor: d, normalized: true },\n \"fields2\": { offset: 1, itemSize: 4, bytesPerItem: 2, divisor: d, normalized: true },\n \"uvIdColor\": { offset: 3, itemSize: 2, bytesPerItem: 2, divisor: d, normalized: false },\n \"flags4b\": { offset: 4, itemSize: 4, bytesPerItem: 1, divisor: d, normalized: false },\n \"layerVp4b\": { offset: 5, itemSize: 4, bytesPerItem: 1, divisor: d, normalized: false }\n };\n\n mesh.unpackXform = { x: sx, y: sy, z: ox, w: oy };\n mesh.texData = texData;\n\n return mesh;\n};\n\nVertexBufferBuilder.prototype.makeWideVertexLayout = function () {\n var mesh = {};\n\n mesh.vb = new Float32Array(this.vb.slice(0, this.vcount * this.stride * 4));\n mesh.vbstride = this.stride;\n\n var d = this.useInstancing ? 1 : 0;\n\n mesh.vblayout = {\n \"fields1\": { offset: 0, itemSize: 2, bytesPerItem: 4, divisor: d, normalized: false },\n \"fields2\": { offset: 2, itemSize: 4, bytesPerItem: 4, divisor: d, normalized: false },\n \"color4b\": { offset: VBB_COLOR_OFFSET, itemSize: 4, bytesPerItem: 1, divisor: d, normalized: true },\n \"dbId4b\": { offset: VBB_DBID_OFFSET, itemSize: 4, bytesPerItem: 1, divisor: d, normalized: false },\n \"flags4b\": { offset: VBB_FLAGS_OFFSET, itemSize: 4, bytesPerItem: 1, divisor: d, normalized: false },\n \"layerVp4b\": { offset: VBB_LAYER_VP_OFFSET, itemSize: 4, bytesPerItem: 1, divisor: d, normalized: false }\n };\n\n //Set the expanded vertex layout to use the last two floats in the buffer. If the\n //were allocated then it is good. If they weren't it overlaps the flags4b and layerVp4b\n //channels, but since the extraParams won 't be used in the shader it won't matter.\n //Doing this lets the shader connect to something and prevents crashes on iOS.\n mesh.vblayout[\ "extraParams\"]={ offset: this.stride - 2, itemSize: 2, bytesPerItem: 4, divisor: d, normalized: false };\n return mesh;\n};\n\nVertexBufferBuilder.prototype.toMesh=f unction ()\n{\n var mesh=n ull;\n\n if (this.useCompactBuffers)\n mesh=t his.makeCompactVertexLayout();\n\n if (!mesh)\n mesh=t his.makeWideVertexLayout();\n\n if (this.useInstancing) {\n mesh.numInstances=t his.vcount;\n\n //Set up trivial vertexId and index attributes\n\n var instFlags=n ew Int32Array([VBB_SEG_START_RIGHT, VBB_SEG_START_LEFT, VBB_SEG_END_RIGHT, VBB_SEG_END_LEFT]);\n mesh.vblayout.instFlags4b={ offset: 0, itemSize: 4, bytesPerItem: 1, divisor: 0, normalized: false };\n mesh.vblayout.instFlags4b.array=i nstFlags.buffer;\n\n mesh.indices=n ew Uint16Array(QUAD_TRIANGLE_INDICES);\n } else {\n mesh.indices=n ew Uint16Array(this.ib.buffer.slice(0, 2 * this.icount));\n }\n\n mesh.dbIds=t his.dbIds;\n\n var w=t his.maxx - this.minx;\n var h=t his.maxy - this.miny;\n var sz=M ath.max(w, h);\n\n mesh.boundingBox={ \n min: { x: this.minx, y: this.miny, z: -sz * 1e-3 },\n max: { x: this.maxx, y: this.maxy, z: sz * 1e-3 }\n };\n\n //Also compute a rough bounding sphere\n mesh.boundingSphere={ \n center: {\n x: 0.5 * (this.minx + this.maxx),\n y: 0.5 * (this.miny + this.maxy),\n z: 0.0\n },\n radius: 0.5 * Math.sqrt(w * w + h * h)\n };\n\n return mesh;\n};\n\n// The following logic attempts to \ "fix\" imprecisions in arc definitions introduced\n// by Heidi 's fixed point math, in case that the extractor doesn't handle it correctly.\n\nvar fixUglyArc=f unction (start, end)\n{\n //Snap critical angles exactly\n function snapCritical() {\n function fuzzyEquals(a, b) {return Math.abs(a - b) < 1e-3;}\n\n if (fuzzyEquals(start, 0)) start=0 .0;\n if (fuzzyEquals(end, 0)) end=0 .0;\n if (fuzzyEquals(start, TAU)) start=T AU;\n if (fuzzyEquals(end, TAU)) end=T AU;\n }\n\n snapCritical();\n\n //OK, in some cases the angles are both over-rotated...\n if (start> end) {\n while (start > TAU) {\n start -= TAU;\n end -= TAU;\n }\n } else {\n while (end > TAU) {\n start -= TAU;\n end -= TAU;\n }\n }\n\n //Snap critical angles exactly -- again\n snapCritical();\n\n //If the arc crosses the x axis, we have to make it clockwise...\n //This is a side effect of bringing over-rotated arcs in range above.\n //For example start = 5.0, end = 7.0 will result in start < 0 and end> 0,\n //so we have to make start > end in order to indicate we are crossing angle = 0.\n if (start < 0 && end> 0) {\n start += TAU;\n }\n\n return { start: start, end: end };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9WZXJ0ZXhCdWZmZXJCdWlsZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQ2E7O0FBRWIsSUFBSUEsR0FBRyxHQUFHQyxJQUFJLENBQUNDLEVBQUUsR0FBRyxDQUFDOztBQUVyQixJQUFJQyx1QkFBdUIsR0FBRyxDQUFDO0VBQzNCQyxtQkFBbUIsR0FBTyxDQUFDO0VBQzNCQyxtQkFBbUIsR0FBTyxDQUFDO0VBQzNCQyxxQkFBcUIsR0FBSyxDQUFDO0VBQzNCQyxlQUFlLEdBQVcsQ0FBQztFQUMzQkMsbUJBQW1CLEdBQU8sQ0FBQztFQUMzQkMsNEJBQTRCLEdBQUcsQ0FBQztFQUNoQ0MsMkJBQTJCLEdBQUcsQ0FBQztFQUMvQkMsMEJBQTBCLEdBQUcsQ0FBQztFQUM5QkMsZ0NBQWdDLEdBQUcsQ0FBQztFQUNwQ0MsOEJBQThCLEdBQUcsRUFBRTtFQUNuQ0MseUJBQXlCLEdBQUcsRUFBRTs7QUFFbEMsSUFBSUMsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFO0VBQ3pCQyxrQkFBa0IsR0FBSSxDQUFDO0VBQ3ZCQyxpQkFBaUIsR0FBSyxDQUFDO0VBQ3ZCQyxnQkFBZ0IsR0FBTSxDQUFDOztBQUUzQixJQUFJQyxnQkFBZ0IsR0FBTSxDQUFDO0VBQ3ZCQyxlQUFlLEdBQU8sQ0FBQztFQUN2QkMsZ0JBQWdCLEdBQU0sQ0FBQztFQUN2QkMsbUJBQW1CLEdBQUcsQ0FBQzs7QUFFM0IsSUFBSUMscUJBQXFCLEdBQUcsQ0FBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBRTs7QUFFNUM7QUFDQSxJQUFJQyw4QkFBOEIsR0FBRyxNQUFNO0FBQzNDLElBQUlDLG9CQUFvQixHQUFHLE9BQU87O0FBRWxDO0FBQ0EsSUFBSUMscUJBQXFCLEdBQUcsSUFBSTs7QUFFekIsU0FBU0MsbUJBQW1CQSxDQUFDQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxpQkFBaUI7QUFDMUY7RUFDSSxJQUFJQyxVQUFVLEdBQUdILFNBQVMsSUFBSSxLQUFLO0VBQ25DLElBQUksQ0FBQ0ksVUFBVSxHQUFHLENBQUNILFNBQVMsSUFBSSxLQUFLLElBQUksQ0FBQzs7RUFFMUMsSUFBSSxDQUFDRixhQUFhLEdBQUdBLGFBQWE7RUFDbEMsSUFBSSxDQUFDRyxpQkFBaUIsR0FBR0EsaUJBQWlCOztFQUUxQyxJQUFJLENBQUNHLE1BQU0sR0FBRyxFQUFFO0VBQ2hCLElBQUksQ0FBQ0MsV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUNQLGFBQWEsR0FBR0ksVUFBVSxHQUFHLENBQUMsR0FBR0EsVUFBVSxDQUFDOztFQUV6RSxJQUFJLENBQUNJLEVBQUUsR0FBSSxJQUFJQyxXQUFXLENBQUMsSUFBSSxDQUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUM7RUFDMUQsSUFBSSxDQUFDRyxHQUFHLEdBQUcsSUFBSUMsWUFBWSxDQUFDLElBQUksQ0FBQ0gsRUFBRSxDQUFDO0VBQ3BDLElBQUksQ0FBQ0ksR0FBRyxHQUFHLElBQUlDLFVBQVUsQ0FBQyxJQUFJLENBQUNMLEVBQUUsQ0FBQztFQUNsQyxJQUFJLENBQUNNLEVBQUUsR0FBRyxJQUFJLENBQUNkLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSWUsV0FBVyxDQUFDWCxVQUFVLENBQUM7RUFDakUsSUFBSSxDQUFDWSxZQUFZLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUztFQUNwQyxJQUFJLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUM7O0FBRWpCOztBQUVBcEIsbUJBQW1CLENBQUNxQixTQUFTLENBQUNELEtBQUssR0FBRyxVQUFTRSxNQUFNLEVBQUU7RUFDbkQ7RUFDQSxJQUFJLENBQUNBLE1BQU0sR0FBR0EsTUFBTTs7RUFFcEIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQzs7RUFFZixJQUFJLENBQUNDLElBQUksR0FBRyxJQUFJLENBQUNDLElBQUksR0FBSUMsUUFBUTtFQUNqQyxJQUFJLENBQUNDLElBQUksR0FBRyxJQUFJLENBQUNDLElBQUksR0FBRyxDQUFDRixRQUFROztFQUVqQztFQUNBLElBQUksQ0FBQ0csS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNmLElBQUksQ0FBQ0MsUUFBUSxHQUFHLElBQUk7O0VBRXBCO0VBQ0EsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztFQUVoQixJQUFJLENBQUNDLGNBQWMsR0FBSyxDQUFDO0VBQ3pCLElBQUksQ0FBQ0MsWUFBWSxHQUFPLENBQUM7RUFDekIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxDQUFDO0VBQ3pCLElBQUksQ0FBQ0MsYUFBYSxHQUFNLENBQUM7O0VBRXpCO0VBQ0EsSUFBSSxDQUFDQyxhQUFhLEdBQUcsS0FBSzs7RUFFMUI7RUFDQTtFQUNBO0VBQ0EsSUFBSSxDQUFDQyxjQUFjLEdBQUcsQ0FBQyxDQUFDOztFQUV4QixJQUFJLENBQUM5QixNQUFNLEdBQUcsRUFBRTtBQUNwQixDQUFDOztBQUVEUCxtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQ2lCLFlBQVksR0FBRztBQUM3QztFQUNJO0VBQ0EsSUFBSUMsUUFBUSxHQUFHLENBQUM7O0VBRWhCLElBQUloQyxNQUFNLEdBQUcsSUFBSSxDQUFDQSxNQUFNOztFQUV4QixJQUFJQSxNQUFNLElBQUksRUFBRTtFQUNaOztFQUVKLElBQUlpQyxPQUFPLEdBQUcsSUFBSSxDQUFDakMsTUFBTSxHQUFHZ0MsUUFBUTs7RUFFcEMsSUFBSUUsR0FBRyxHQUFHLElBQUkvQixXQUFXLENBQUM4QixPQUFPLEdBQUcsSUFBSSxDQUFDaEMsV0FBVyxDQUFDOztFQUVyRCxJQUFJa0MsR0FBRyxHQUFHLElBQUlDLFVBQVUsQ0FBQyxJQUFJLENBQUNsQyxFQUFFLENBQUM7RUFDakMsSUFBSW1DLEdBQUcsR0FBRyxJQUFJRCxVQUFVLENBQUNGLEdBQUcsQ0FBQzs7RUFFN0IsS0FBSyxJQUFJSSxDQUFDLEdBQUcsQ0FBQyxFQUFFQyxJQUFJLEdBQUcsSUFBSSxDQUFDeEIsTUFBTSxFQUFFdUIsQ0FBQyxHQUFDQyxJQUFJLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQzdDLElBQUlFLEVBQUUsR0FBR0YsQ0FBQyxHQUFHdEMsTUFBTSxHQUFHLENBQUM7SUFDdkIsSUFBSXlDLEVBQUUsR0FBR0gsQ0FBQyxHQUFHTCxPQUFPLEdBQUcsQ0FBQzs7SUFFeEIsS0FBSyxJQUFJUyxDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUMxQyxNQUFNLEdBQUcsQ0FBQyxFQUFFMEMsQ0FBQyxFQUFFO0lBQzNCTCxHQUFHLENBQUNJLEVBQUUsR0FBQ0MsQ0FBQyxDQUFDLEdBQUdQLEdBQUcsQ0FBQ0ssRUFBRSxHQUFDRSxDQUFDLENBQUM7RUFDN0I7O0VBRUEsSUFBSSxDQUFDeEMsRUFBRSxHQUFHZ0MsR0FBRztFQUNiLElBQUksQ0FBQzlCLEdBQUcsR0FBRyxJQUFJQyxZQUFZLENBQUM2QixHQUFHLENBQUM7RUFDaEMsSUFBSSxDQUFDNUIsR0FBRyxHQUFHLElBQUlDLFVBQVUsQ0FBQzJCLEdBQUcsQ0FBQztFQUM5QixJQUFJLENBQUNsQyxNQUFNLEdBQUdpQyxPQUFPOztBQUV6QixDQUFDOztBQUVEeEMsbUJBQW1CLENBQUNxQixTQUFTLENBQUM2QixXQUFXLEdBQUcsVUFBU0MsQ0FBQyxFQUFFQyxDQUFDO0FBQ3pEO0VBQ0ksSUFBSUQsQ0FBQyxHQUFHLElBQUksQ0FBQzNCLElBQUksRUFBRSxJQUFJLENBQUNBLElBQUksR0FBRzJCLENBQUM7RUFDaEMsSUFBSUEsQ0FBQyxHQUFHLElBQUksQ0FBQ3hCLElBQUksRUFBRSxJQUFJLENBQUNBLElBQUksR0FBR3dCLENBQUM7RUFDaEMsSUFBSUMsQ0FBQyxHQUFHLElBQUksQ0FBQzNCLElBQUksRUFBRSxJQUFJLENBQUNBLElBQUksR0FBRzJCLENBQUM7RUFDaEMsSUFBSUEsQ0FBQyxHQUFHLElBQUksQ0FBQ3hCLElBQUksRUFBRSxJQUFJLENBQUNBLElBQUksR0FBR3dCLENBQUM7QUFDcEMsQ0FBQzs7QUFFRCxJQUFJQyxRQUFRLEdBQUcsSUFBSXZDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsU0FBU3dDLE9BQU9BLENBQUNDLENBQUMsRUFBRTtFQUNoQkYsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHRSxDQUFDO0VBQ2YsT0FBT0YsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN0Qjs7QUFFQXJELG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDbUMsWUFBWSxHQUFHLFVBQVNDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFQyxXQUFXLEVBQUU7O0VBRXJHLElBQUlILElBQUksS0FBSyxJQUFJLENBQUM3QixRQUFRLEVBQUU7SUFDeEIsSUFBSSxDQUFDRCxLQUFLLENBQUN5QixPQUFPLENBQUNLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM3QixJQUFJLENBQUM3QixRQUFRLEdBQUc2QixJQUFJO0VBQ3hCOztFQUVBLElBQUlHLFdBQVcsRUFBRTtJQUNiLElBQUksQ0FBQzFCLGFBQWEsR0FBRyxJQUFJO0VBQzdCOztFQUVBLElBQUksQ0FBQyxJQUFJLENBQUNoQyxpQkFBaUI7RUFDdkI7O0VBRUosSUFBSTJELEVBQUUsR0FBRyxJQUFJLENBQUMxQixjQUFjOztFQUU1QixTQUFTMkIsUUFBUUEsQ0FBQ0MsU0FBUyxFQUFFQyxHQUFHLEVBQUU7SUFDOUIsSUFBSUgsRUFBRSxDQUFDRSxTQUFTLENBQUMsS0FBS0UsU0FBUztJQUMzQkosRUFBRSxDQUFDRSxTQUFTLENBQUMsR0FBR1IsUUFBUSxDQUFDO0lBQ3hCLElBQUlNLEVBQUUsQ0FBQ0UsU0FBUyxDQUFDLEtBQUtDLEdBQUc7SUFDMUJILEVBQUUsQ0FBQ0UsU0FBUyxHQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUk7RUFDckM7O0VBRUFELFFBQVEsQ0FBQyxVQUFVLEVBQUVQLFFBQVEsQ0FBQztFQUM5Qk8sUUFBUSxDQUFDLE9BQU8sRUFBRU4sS0FBSyxDQUFDO0VBQ3hCTSxRQUFRLENBQUMsTUFBTSxFQUFFTCxJQUFJLENBQUM7RUFDdEJLLFFBQVEsQ0FBQyxTQUFTLEVBQUVKLE9BQU8sQ0FBQztFQUM1QkksUUFBUSxDQUFDLFlBQVksRUFBRUgsSUFBSSxDQUFDO0VBQzVCRyxRQUFRLENBQUMsYUFBYSxFQUFFRixXQUFXLENBQUM7O0VBRXBDLElBQUksQ0FBQy9CLE1BQU0sQ0FBQ3VCLE9BQU8sQ0FBQ0ksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25DLENBQUM7OztBQUdEMUQsbUJBQW1CLENBQUNxQixTQUFTLENBQUMrQyxzQkFBc0IsR0FBRyxVQUFTQyxNQUFNLEVBQUVDLFFBQVEsRUFBRWIsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUVDLFdBQVc7QUFDbkk7RUFDSSxJQUFJLENBQUNOLFlBQVksQ0FBQ0MsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUVDLFdBQVcsQ0FBQzs7RUFFcEU7RUFDQVEsUUFBUSxHQUFPQSxRQUFRLEdBQVEsSUFBSyxDQUFDLENBQUM7RUFDdENiLFFBQVEsR0FBT0EsUUFBUSxHQUFRLElBQUssQ0FBQyxDQUFDO0VBQ3RDSyxXQUFXLEdBQUlBLFdBQVcsR0FBSyxJQUFLLENBQUMsQ0FBQztFQUN0Q0YsT0FBTyxHQUFRQSxPQUFPLEdBQU8sTUFBTyxDQUFDLENBQUM7RUFDdENDLElBQUksR0FBV0EsSUFBSSxHQUFVLE1BQU8sQ0FBQyxDQUFDOztFQUV0QyxJQUFJLENBQUNoRCxHQUFHLENBQUN3RCxNQUFNLEdBQUczRSxnQkFBZ0IsQ0FBQyxHQUFNNEUsUUFBUSxHQUFJYixRQUFRLElBQUksQ0FBRSxHQUFJSyxXQUFXLElBQUksRUFBRyxDQUFDLENBQUM7RUFDM0YsSUFBSSxDQUFDakQsR0FBRyxDQUFDd0QsTUFBTSxHQUFHN0UsZ0JBQWdCLENBQUMsR0FBTWtFLEtBQUs7RUFDOUMsSUFBSSxDQUFDN0MsR0FBRyxDQUFDd0QsTUFBTSxHQUFHNUUsZUFBZSxDQUFDLEdBQU9rRSxJQUFJO0VBQzdDLElBQUksQ0FBQzlDLEdBQUcsQ0FBQ3dELE1BQU0sR0FBRzFFLG1CQUFtQixDQUFDLEdBQUdpRSxPQUFPLEdBQUlDLElBQUksSUFBSSxFQUFHLENBQUMsQ0FBQztBQUNyRSxDQUFDOztBQUVEO0FBQ0E3RCxtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQ2tELHFCQUFxQixHQUFHLFVBQVNDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVuQixLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJO0FBQ2pIO0VBQ0ksSUFBSWlCLEVBQUUsR0FBSSxJQUFJLENBQUN4RCxNQUFNO0VBQ3JCLElBQUlYLEdBQUcsR0FBRyxJQUFJLENBQUNBLEdBQUc7O0VBRWxCLElBQUlvRSxNQUFNLEdBQUcsSUFBSSxDQUFDOUUsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQ3ZDLEtBQUssSUFBSTRDLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ2tDLE1BQU0sRUFBRWxDLENBQUMsRUFBRSxFQUFFO0lBQ3pCLElBQUl3QixNQUFNLEdBQUcsQ0FBQ1MsRUFBRSxHQUFDakMsQ0FBQyxJQUFJLElBQUksQ0FBQ3RDLE1BQU07O0lBRWpDO0lBQ0FJLEdBQUcsQ0FBQzBELE1BQU0sQ0FBQyxHQUFLRyxFQUFFO0lBQ2xCN0QsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHSSxFQUFFO0lBQ2xCOUQsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHSyxFQUFFOztJQUVsQi9ELEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBR00sRUFBRTtJQUNsQmhFLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBR08sRUFBRTtJQUNsQmpFLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBR1EsRUFBRTs7SUFFbEIsSUFBSSxDQUFDVCxzQkFBc0IsQ0FBQ0MsTUFBTSxFQUFFakYsbUJBQW1CLEdBQUd5RCxDQUFDLEVBQUVoRSxtQkFBbUIsRUFBRTZFLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMvSCxJQUFJLENBQUN2QyxNQUFNLEVBQUU7RUFDakI7O0VBRUEsT0FBT3dELEVBQUU7QUFDYixDQUFDOzs7QUFHRDlFLG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDMkQsYUFBYSxHQUFHLFVBQVM3QixDQUFDLEVBQUVDLENBQUMsRUFBRTZCLEtBQUssRUFBRUMsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRTFCLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRXdCLFFBQVEsRUFBRUMsWUFBWSxFQUFFQyxVQUFVO0FBQzNLO0VBQ0ksSUFBSVQsRUFBRSxHQUFJLElBQUksQ0FBQ3hELE1BQU07RUFDckIsSUFBSVgsR0FBRyxHQUFHLElBQUksQ0FBQ0EsR0FBRzs7RUFFbEIsSUFBSWdELElBQUksSUFBSSxDQUFDLElBQUl5QixTQUFTLEdBQUcsQ0FBQyxJQUFJRixhQUFhLEdBQUcsQ0FBQyxFQUFFO0lBQ2pELElBQUksQ0FBQ2pFLFlBQVksR0FBRzNDLElBQUksQ0FBQ2tILEdBQUcsQ0FBQyxJQUFJLENBQUN2RSxZQUFZLEVBQUVtRSxTQUFTLENBQUM7RUFDOUQ7O0VBRUEsSUFBSTNCLFFBQVEsR0FBR2hGLG1CQUFtQjtFQUNsQyxJQUFJNkcsWUFBWSxJQUFJQyxVQUFVLEVBQUU7SUFDNUI5QixRQUFRLEdBQUd6RSwwQkFBMEI7RUFDekMsQ0FBQztFQUNJLElBQUlzRyxZQUFZLEVBQUU7SUFDbkI3QixRQUFRLEdBQUd4RSxnQ0FBZ0M7RUFDL0MsQ0FBQztFQUNJLElBQUlzRyxVQUFVLEVBQUU7SUFDakI5QixRQUFRLEdBQUd2RSw4QkFBOEI7RUFDN0M7O0VBRUEsSUFBSTZGLE1BQU0sR0FBRyxJQUFJLENBQUM5RSxhQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUM7RUFDdkMsS0FBSyxJQUFJNEMsQ0FBQyxHQUFDLENBQUMsRUFBRUEsQ0FBQyxHQUFDa0MsTUFBTSxFQUFFbEMsQ0FBQyxFQUFFLEVBQUU7SUFDekIsSUFBSXdCLE1BQU0sR0FBRyxDQUFDUyxFQUFFLEdBQUdqQyxDQUFDLElBQUksSUFBSSxDQUFDdEMsTUFBTTs7SUFFbkM7SUFDQUksR0FBRyxDQUFDMEQsTUFBTSxDQUFDLEdBQUtsQixDQUFDO0lBQ2pCeEMsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHakIsQ0FBQztJQUNqQnpDLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDWSxLQUFLLEdBQUczRyxJQUFJLENBQUNDLEVBQUUsSUFBSUYsR0FBRzs7SUFFdkNzQyxHQUFHLENBQUMwRCxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUdhLGFBQWE7SUFDN0J2RSxHQUFHLENBQUMwRCxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUdlLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQ3pFLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBR2MsYUFBYTs7SUFFN0IsSUFBSSxDQUFDZixzQkFBc0IsQ0FBQ0MsTUFBTSxFQUFFakYsbUJBQW1CLEdBQUd5RCxDQUFDLEVBQUVZLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFd0IsUUFBUSxDQUFDO0lBQzVHLElBQUksQ0FBQy9ELE1BQU0sRUFBRTtFQUNqQjs7RUFFQSxPQUFPd0QsRUFBRTtBQUNiLENBQUM7O0FBRUQ5RSxtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQ29FLGtCQUFrQixHQUFHLFVBQVN0QyxDQUFDLEVBQUVDLENBQUMsRUFBRTZCLEtBQUssRUFBRVMsU0FBUyxFQUFFQyxTQUFTLEVBQUVULGFBQWEsRUFBRVUsZUFBZSxFQUFFUixTQUFTLEVBQUUxQixLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUV3QixRQUFRO0FBQzlLO0VBQ0ksSUFBSVAsRUFBRSxHQUFJLElBQUksQ0FBQ3hELE1BQU07RUFDckIsSUFBSVgsR0FBRyxHQUFHLElBQUksQ0FBQ0EsR0FBRzs7RUFFbEIsSUFBSWdELElBQUksSUFBSSxDQUFDLElBQUl5QixTQUFTLEdBQUcsQ0FBQyxFQUFFO0lBQzVCLElBQUksQ0FBQ25FLFlBQVksR0FBRzNDLElBQUksQ0FBQ2tILEdBQUcsQ0FBQyxJQUFJLENBQUN2RSxZQUFZLEVBQUVtRSxTQUFTLENBQUM7RUFDOUQ7O0VBRUEsSUFBSUwsTUFBTSxHQUFHLElBQUksQ0FBQzlFLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQztFQUN2QyxLQUFLLElBQUk0QyxDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUNrQyxNQUFNLEVBQUVsQyxDQUFDLEVBQUUsRUFBRTtJQUN6QixJQUFJd0IsTUFBTSxHQUFHLENBQUNTLEVBQUUsR0FBR2pDLENBQUMsSUFBSSxJQUFJLENBQUN0QyxNQUFNOztJQUVuQztJQUNBSSxHQUFHLENBQUMwRCxNQUFNLENBQUMsR0FBS2xCLENBQUM7SUFDakJ4QyxHQUFHLENBQUMwRCxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUdqQixDQUFDO0lBQ2pCekMsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNZLEtBQUssR0FBRzNHLElBQUksQ0FBQ0MsRUFBRSxJQUFJRixHQUFHOztJQUV2Q3NDLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBR2EsYUFBYTtJQUM3QnZFLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBR2UsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDekUsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUNxQixTQUFTLEdBQUdwSCxJQUFJLENBQUNDLEVBQUUsSUFBSUYsR0FBRzs7SUFFM0NzQyxHQUFHLENBQUMwRCxNQUFNLEdBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQ3NCLFNBQVMsR0FBR3JILElBQUksQ0FBQ0MsRUFBRSxJQUFJRixHQUFHO0lBQzVDc0MsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLEVBQUUsQ0FBQyxHQUFHdUIsZUFBZTs7SUFFaEMsSUFBSSxDQUFDeEIsc0JBQXNCLENBQUNDLE1BQU0sRUFBRWpGLG1CQUFtQixHQUFHeUQsQ0FBQyxFQUFFMUQseUJBQXlCLEVBQUV1RSxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUV3QixRQUFRLENBQUM7SUFDN0gsSUFBSSxDQUFDL0QsTUFBTSxFQUFFO0VBQ2pCOztFQUVBLE9BQU93RCxFQUFFO0FBQ2IsQ0FBQzs7QUFFRDlFLG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDd0UsZ0JBQWdCLEdBQUcsVUFBU0MsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUV4QyxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJO0FBQy9IO0VBQ0ksSUFBSWlCLEVBQUUsR0FBSSxJQUFJLENBQUN4RCxNQUFNO0VBQ3JCLElBQUlYLEdBQUcsR0FBRyxJQUFJLENBQUNBLEdBQUc7O0VBRWxCLElBQUlvRSxNQUFNLEdBQUcsSUFBSSxDQUFDOUUsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQ3ZDLEtBQUssSUFBSTRDLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ2tDLE1BQU0sRUFBRWxDLENBQUMsRUFBRSxFQUFFO0lBQ3pCLElBQUl3QixNQUFNLEdBQUcsQ0FBQ1MsRUFBRSxHQUFHakMsQ0FBQyxJQUFJLElBQUksQ0FBQ3RDLE1BQU07O0lBRW5DO0lBQ0FJLEdBQUcsQ0FBQzBELE1BQU0sQ0FBQyxHQUFLeUIsT0FBTztJQUN2Qm5GLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBRzBCLE9BQU87SUFDdkJwRixHQUFHLENBQUMwRCxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUc2QixRQUFRLEdBQUc3SCxHQUFHOztJQUU5QnNDLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBRzJCLEtBQUs7SUFDckJyRixHQUFHLENBQUMwRCxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUc0QixNQUFNOztJQUV0QixJQUFJLENBQUM3QixzQkFBc0IsQ0FBQ0MsTUFBTSxFQUFFakYsbUJBQW1CLEdBQUd5RCxDQUFDLEVBQUVqRSxlQUFlLEVBQUU4RSxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDM0gsSUFBSSxDQUFDdkMsTUFBTSxFQUFFO0VBQ2pCOztFQUVBLE9BQU93RCxFQUFFO0FBQ2IsQ0FBQzs7O0FBR0Q5RSxtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQzhFLFlBQVksR0FBRyxVQUFTaEQsQ0FBQyxFQUFFQyxDQUFDLEVBQUVnRCxVQUFVLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRXBCLFNBQVMsRUFBRTFCLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUk7QUFDM0k7RUFDSSxJQUFJaUIsRUFBRSxHQUFJLElBQUksQ0FBQ3hELE1BQU07RUFDckIsSUFBSVgsR0FBRyxHQUFHLElBQUksQ0FBQ0EsR0FBRzs7RUFFbEIsSUFBSThDLFFBQVEsR0FBSTZDLEtBQUssSUFBSUMsS0FBSyxHQUFJN0gsbUJBQW1CLEdBQUdDLHFCQUFxQjs7RUFFN0UsSUFBSW9HLE1BQU0sR0FBRyxJQUFJLENBQUM5RSxhQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUM7RUFDdkMsS0FBSyxJQUFJNEMsQ0FBQyxHQUFDLENBQUMsRUFBRUEsQ0FBQyxHQUFDa0MsTUFBTSxFQUFFbEMsQ0FBQyxFQUFFLEVBQUU7SUFDekIsSUFBSXdCLE1BQU0sR0FBRyxDQUFDUyxFQUFFLEdBQUNqQyxDQUFDLElBQUksSUFBSSxDQUFDdEMsTUFBTTs7SUFFakM7SUFDQUksR0FBRyxDQUFDMEQsTUFBTSxDQUFDLEdBQUtsQixDQUFDO0lBQ2pCeEMsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHakIsQ0FBQztJQUNqQnpDLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBRytCLFVBQVUsR0FBRy9ILEdBQUc7O0lBRWhDc0MsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHZ0MsUUFBUSxHQUFHaEksR0FBRztJQUM5QnNDLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBR2UsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDekUsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHaUMsS0FBSyxDQUFDLENBQUM7O0lBRXZCLElBQUk3QyxRQUFRLEtBQUs5RSxxQkFBcUIsRUFBRTtNQUNwQ2dDLEdBQUcsQ0FBQzBELE1BQU0sR0FBQyxFQUFFLENBQUMsR0FBR2tDLEtBQUs7TUFDdEI1RixHQUFHLENBQUMwRCxNQUFNLEdBQUMsRUFBRSxDQUFDLEdBQUdtQyxJQUFJO0lBQ3pCOztJQUVBLElBQUksQ0FBQ3BDLHNCQUFzQixDQUFDQyxNQUFNLEVBQUVqRixtQkFBbUIsR0FBR3lELENBQUMsRUFBRVksUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEgsSUFBSSxDQUFDdkMsTUFBTSxFQUFFO0VBQ2pCOztFQUVBLE9BQU93RCxFQUFFO0FBQ2IsQ0FBQzs7Ozs7QUFLRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE5RSxtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQ29GLFNBQVMsR0FBRyxVQUFTdEQsQ0FBQyxFQUFFQyxDQUFDLEVBQUVNLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUk7QUFDbkYsS0FEcUY2QyxJQUFJLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF4QyxTQUFBLEdBQUF3QyxTQUFBLE1BQUNuSSx1QkFBdUI7RUFFN0csSUFBSSxJQUFJLENBQUN5QixhQUFhO0VBQ2xCLE9BQU87O0VBRVgsSUFBSTZFLEVBQUUsR0FBTyxJQUFJLENBQUN4RCxNQUFNO0VBQ3hCLElBQUkrQyxNQUFNLEdBQUcsSUFBSSxDQUFDOUQsTUFBTSxHQUFHdUUsRUFBRTtFQUM3QixJQUFJbkUsR0FBRyxHQUFNLElBQUksQ0FBQ0EsR0FBRzs7RUFFckI7RUFDQUEsR0FBRyxDQUFDMEQsTUFBTSxDQUFDLEdBQUtsQixDQUFDO0VBQ2pCeEMsR0FBRyxDQUFDMEQsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHakIsQ0FBQzs7RUFFakIsSUFBSSxDQUFDZ0Isc0JBQXNCLENBQUNDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRXFDLElBQUksRUFBRWhELEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztFQUN0RyxJQUFJLENBQUN2QyxNQUFNLEVBQUU7O0VBRWIsT0FBT3dELEVBQUU7QUFDYixDQUFDOzs7QUFHRDlFLG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDd0YscUJBQXFCLEdBQUcsVUFBUzFELENBQUMsRUFBRUMsQ0FBQyxFQUFFTSxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJO0FBQy9GO0VBQ0ksSUFBSSxJQUFJLENBQUM1RCxhQUFhO0VBQ2xCLE9BQU87O0VBRVgsSUFBSSxDQUFDd0csU0FBUyxDQUFDdEQsQ0FBQyxFQUFFQyxDQUFDLEVBQUVNLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksQ0FBQzs7RUFFaEQsSUFBSSxDQUFDWCxXQUFXLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxDQUFDO0FBQzFCLENBQUM7O0FBRURwRCxtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQ3lGLHlCQUF5QixHQUFHLFVBQVMzRCxDQUFDLEVBQUVDLENBQUMsRUFBRTJELENBQUMsRUFBRUMsQ0FBQyxFQUFFdEQsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSTtBQUN6RztFQUNJLElBQUksQ0FBQ29ELHdCQUF3QixDQUFDOUQsQ0FBQyxFQUFFQyxDQUFDLEVBQUUyRCxDQUFDLEVBQUVDLENBQUMsRUFBRXRELEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRS9FLDRCQUE0QixDQUFDO0FBQ3ZHLENBQUM7O0FBRURrQixtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQzZGLFVBQVUsR0FBRyxVQUFTQyxPQUFPLEVBQUVDLE1BQU0sRUFBRTs7RUFFakUsSUFBSSxJQUFJLENBQUNuSCxhQUFhO0VBQ2xCLE9BQU8sQ0FBQzs7RUFFWixJQUFJYyxFQUFFLEdBQUcsSUFBSSxDQUFDQSxFQUFFO0VBQ2hCLElBQUlzRyxFQUFFLEdBQUcsSUFBSSxDQUFDOUYsTUFBTTs7RUFFcEIsSUFBSThGLEVBQUUsR0FBR0YsT0FBTyxDQUFDUCxNQUFNLElBQUk3RixFQUFFLENBQUM2RixNQUFNLEVBQUU7SUFDbEMsSUFBSVUsS0FBSyxHQUFHLElBQUl0RyxXQUFXLENBQUMxQyxJQUFJLENBQUNpSixHQUFHLENBQUNKLE9BQU8sQ0FBQ1AsTUFBTSxFQUFFN0YsRUFBRSxDQUFDNkYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLEtBQUssSUFBSS9ELENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ3dFLEVBQUUsRUFBRSxFQUFFeEUsQ0FBQyxFQUFFO01BQ3JCeUUsS0FBSyxDQUFDekUsQ0FBQyxDQUFDLEdBQUc5QixFQUFFLENBQUM4QixDQUFDLENBQUM7SUFDcEI7SUFDQSxJQUFJLENBQUM5QixFQUFFLEdBQUdBLEVBQUUsR0FBR3VHLEtBQUs7RUFDeEI7O0VBRUEsS0FBSSxJQUFJekUsQ0FBQyxHQUFDLENBQUMsRUFBRUEsQ0FBQyxHQUFDc0UsT0FBTyxDQUFDUCxNQUFNLEVBQUUsRUFBRS9ELENBQUMsRUFBRTtJQUNoQzlCLEVBQUUsQ0FBQ3NHLEVBQUUsR0FBQ3hFLENBQUMsQ0FBQyxHQUFHdUUsTUFBTSxHQUFHRCxPQUFPLENBQUN0RSxDQUFDLENBQUM7RUFDbEM7O0VBRUEsSUFBSSxDQUFDdEIsTUFBTSxJQUFJNEYsT0FBTyxDQUFDUCxNQUFNO0FBQ2pDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E1RyxtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQ21HLFlBQVksR0FBRyxVQUFTSixNQUFNO0FBQzVEO0VBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQ25ILGFBQWEsRUFBRTtJQUNyQixJQUFJLENBQUNpSCxVQUFVLENBQUN0SCxxQkFBcUIsRUFBRXdILE1BQU0sQ0FBQztFQUNsRDtBQUNKLENBQUM7OztBQUdEcEgsbUJBQW1CLENBQUNxQixTQUFTLENBQUNvRyxVQUFVLEdBQUcsVUFBU2pELEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRVEsYUFBYSxFQUFFQyxTQUFTLEVBQUUxQixLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUV3QixRQUFRLEVBQUVDLFlBQVksRUFBRUMsVUFBVTtBQUM1SjtFQUNJLElBQUltQyxFQUFFLEdBQUdoRCxFQUFFLEdBQUdGLEVBQUU7RUFDaEIsSUFBSW1ELEVBQUUsR0FBR2hELEVBQUUsR0FBR0YsRUFBRTtFQUNoQixJQUFJUSxLQUFLLEdBQUt5QyxFQUFFLElBQUlDLEVBQUUsR0FBSXJKLElBQUksQ0FBQ3NKLEtBQUssQ0FBQ0QsRUFBRSxFQUFFRCxFQUFFLENBQUMsR0FBUyxHQUFHO0VBQ3hELElBQUlHLE1BQU0sR0FBSUgsRUFBRSxJQUFJQyxFQUFFLEdBQUlySixJQUFJLENBQUN3SixJQUFJLENBQUNKLEVBQUUsR0FBQ0EsRUFBRSxHQUFHQyxFQUFFLEdBQUNBLEVBQUUsQ0FBQyxHQUFHLEdBQUc7O0VBRXhEO0VBQ0E7RUFDQSxJQUFJWCxDQUFDLEdBQUcsSUFBSSxDQUFDaEMsYUFBYSxDQUFDUixFQUFFLEVBQUVDLEVBQUUsRUFBRVEsS0FBSyxFQUFFNEMsTUFBTSxFQUFFMUMsYUFBYSxFQUFFQyxTQUFTLEVBQUUxQixLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUV3QixRQUFRLEVBQUVDLFlBQVksRUFBRUMsVUFBVSxDQUFDOztFQUUzSSxJQUFJLENBQUNpQyxZQUFZLENBQUNSLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUM5RCxXQUFXLENBQUNzQixFQUFFLEVBQUVDLEVBQUUsQ0FBQztFQUN4QixJQUFJLENBQUN2QixXQUFXLENBQUN3QixFQUFFLEVBQUVDLEVBQUUsQ0FBQztBQUM1QixDQUFDOztBQUVEM0UsbUJBQW1CLENBQUNxQixTQUFTLENBQUMwRyxlQUFlLEdBQUcsVUFBU3ZELEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVtRCxFQUFFLEVBQUVDLEVBQUUsRUFBRTlDLGFBQWEsRUFBRUMsU0FBUyxFQUFFMUIsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFd0IsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLFVBQVU7QUFDakw7RUFDSSxJQUFJLElBQUksQ0FBQ25GLGlCQUFpQixFQUFFO0lBQ3hCLElBQUksQ0FBQ3FILFVBQVUsQ0FBQy9DLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRU0sYUFBYSxFQUFFQyxTQUFTLEVBQUUxQixLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUV3QixRQUFRLEVBQUVDLFlBQVksRUFBRUMsVUFBVSxDQUFDO0lBQ3pIO0VBQ0o7O0VBRUEsSUFBSSxDQUFDcEQsYUFBYSxFQUFFOztFQUVwQjtFQUNBLElBQUksQ0FBQ0csWUFBWSxDQUFDLENBQUM7O0VBRW5CO0VBQ0EsSUFBSTRGLEdBQUcsR0FBR3RELEVBQUUsR0FBR0YsRUFBRTtFQUNqQixJQUFJeUQsR0FBRyxHQUFHdEQsRUFBRSxHQUFHRixFQUFFO0VBQ2pCLElBQUlNLEtBQUssR0FBS2lELEdBQUcsSUFBSUMsR0FBRyxHQUFJN0osSUFBSSxDQUFDc0osS0FBSyxDQUFDTyxHQUFHLEVBQUVELEdBQUcsQ0FBQyxHQUFjLEdBQUc7RUFDakUsSUFBSUwsTUFBTSxHQUFJSyxHQUFHLElBQUlDLEdBQUcsR0FBSTdKLElBQUksQ0FBQ3dKLElBQUksQ0FBQ0ksR0FBRyxHQUFDQSxHQUFHLEdBQUdDLEdBQUcsR0FBQ0EsR0FBRyxDQUFDLEdBQUcsR0FBRzs7RUFFOUQ7RUFDQSxJQUFJVCxFQUFFLEdBQUdoRCxFQUFFLEdBQUdGLEVBQUU7RUFDaEIsSUFBSW1ELEVBQUUsR0FBR2hELEVBQUUsR0FBR0YsRUFBRTtFQUNoQixJQUFJaUIsU0FBUyxHQUFLZ0MsRUFBRSxJQUFJQyxFQUFFLEdBQUlySixJQUFJLENBQUNzSixLQUFLLENBQUNELEVBQUUsRUFBRUQsRUFBRSxDQUFDLEdBQWN6QyxLQUFLO0VBQ25FLElBQUltRCxVQUFVLEdBQUlWLEVBQUUsSUFBSUMsRUFBRSxHQUFJckosSUFBSSxDQUFDd0osSUFBSSxDQUFDSixFQUFFLEdBQUNBLEVBQUUsR0FBR0MsRUFBRSxHQUFDQSxFQUFFLENBQUMsR0FBSyxHQUFHOztFQUU5RCxJQUFJVSxHQUFHLEdBQUdMLEVBQUUsR0FBR3BELEVBQUU7RUFDakIsSUFBSTBELEdBQUcsR0FBR0wsRUFBRSxHQUFHcEQsRUFBRTtFQUNqQixJQUFJYyxTQUFTLEdBQUswQyxHQUFHLElBQUlDLEdBQUcsR0FBSWhLLElBQUksQ0FBQ3NKLEtBQUssQ0FBQ1UsR0FBRyxFQUFFRCxHQUFHLENBQUMsR0FBY3BELEtBQUs7RUFDdkUsSUFBSXNELFVBQVUsR0FBSUYsR0FBRyxJQUFJQyxHQUFHLEdBQUloSyxJQUFJLENBQUN3SixJQUFJLENBQUNPLEdBQUcsR0FBQ0EsR0FBRyxHQUFHQyxHQUFHLEdBQUNBLEdBQUcsQ0FBQyxHQUFHLEdBQUc7O0VBRWxFO0VBQ0EsSUFBSUUsSUFBSSxHQUFHbEssSUFBSSxDQUFDbUssS0FBSyxDQUFDbkssSUFBSSxDQUFDa0gsR0FBRyxDQUFDekYscUJBQXFCLEVBQUVxSSxVQUFVLENBQUMsR0FBR3ZJLDhCQUE4QixDQUFDO0VBQ25HLElBQUk2SSxJQUFJLEdBQUdwSyxJQUFJLENBQUNtSyxLQUFLLENBQUNuSyxJQUFJLENBQUNrSCxHQUFHLENBQUN6RixxQkFBcUIsRUFBRXdJLFVBQVUsQ0FBQyxHQUFHMUksOEJBQThCLENBQUM7RUFDbkcsSUFBSThJLFFBQVEsR0FBSUQsSUFBSSxHQUFHNUksb0JBQW9CLEdBQUkwSSxJQUFJOztFQUVuRDtFQUNBO0VBQ0EsSUFBSXhCLENBQUMsR0FBRyxJQUFJLENBQUN2QixrQkFBa0IsQ0FBQ2YsRUFBRSxFQUFFQyxFQUFFLEVBQUVNLEtBQUssRUFBRVMsU0FBUyxFQUFFQyxTQUFTLEVBQUVrQyxNQUFNLEVBQUVjLFFBQVEsRUFBRXZELFNBQVMsRUFBRTFCLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksRUFBRXdCLFFBQVEsQ0FBQzs7RUFFdkksSUFBSSxDQUFDbUMsWUFBWSxDQUFDUixDQUFDLENBQUM7RUFDcEIsSUFBSSxDQUFDOUQsV0FBVyxDQUFDd0IsRUFBRSxFQUFFQyxFQUFFLENBQUM7RUFDeEIsSUFBSSxDQUFDekIsV0FBVyxDQUFDMEIsRUFBRSxFQUFFQyxFQUFFLENBQUM7QUFDNUIsQ0FBQzs7O0FBR0Q7QUFDQTdFLG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDdUgsZUFBZSxHQUFHLFVBQVNwRSxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFbkIsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSTtBQUMzRztFQUNJLElBQUksQ0FBQzNCLGdCQUFnQixFQUFFOztFQUV2QixJQUFJOEUsQ0FBQyxHQUFHLElBQUksQ0FBQ3pDLHFCQUFxQixDQUFDQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFbkIsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxDQUFDOztFQUV0RixJQUFJLENBQUMyRCxZQUFZLENBQUNSLENBQUMsQ0FBQztFQUNwQixJQUFJLENBQUM5RCxXQUFXLENBQUNzQixFQUFFLEVBQUVDLEVBQUUsQ0FBQztFQUN4QixJQUFJLENBQUN2QixXQUFXLENBQUN3QixFQUFFLEVBQUVDLEVBQUUsQ0FBQztFQUN4QixJQUFJLENBQUN6QixXQUFXLENBQUMwQixFQUFFLEVBQUVDLEVBQUUsQ0FBQztBQUM1QixDQUFDOztBQUVEN0UsbUJBQW1CLENBQUNxQixTQUFTLENBQUN3SCxNQUFNLEdBQUcsVUFBU0MsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEtBQUssRUFBRUMsR0FBRyxFQUFFM0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRXBCLFNBQVMsRUFBRTFCLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUk7QUFDN0g7RUFDSSxJQUFHeUMsS0FBSyxJQUFJQyxLQUFLLEVBQUc7SUFDaEIsSUFBSSxDQUFDdEUsWUFBWSxFQUFFO0VBQ3ZCLENBQUMsTUFBTTtJQUNILElBQUksQ0FBQ0QsY0FBYyxFQUFFOztJQUVyQjtJQUNBLElBQUksQ0FBQ00sWUFBWSxDQUFDLENBQUM7RUFDdkI7O0VBRUE7RUFDQTtFQUNBLElBQUk0RyxNQUFNLEdBQUdDLFVBQVUsQ0FBQ0gsS0FBSyxFQUFFQyxHQUFHLENBQUM7RUFDbkNELEtBQUssR0FBR0UsTUFBTSxDQUFDRixLQUFLO0VBQ3BCQyxHQUFHLEdBQUtDLE1BQU0sQ0FBQ0QsR0FBRzs7RUFFbEI7RUFDQTtFQUNBO0VBQ0EsSUFBSUQsS0FBSyxJQUFJLENBQUMsSUFBSUMsR0FBRyxJQUFJLENBQUM7RUFDdEJBLEdBQUcsR0FBRzVLLEdBQUc7O0VBRWI7RUFDQTtJQUNJO0lBQ0EsSUFBSStLLEtBQUssR0FBRzlLLElBQUksQ0FBQytLLEdBQUcsQ0FBQ0wsS0FBSyxHQUFHQyxHQUFHLENBQUM7SUFDakMsSUFBSUcsS0FBSyxHQUFHLE1BQU0sSUFBSTlLLElBQUksQ0FBQytLLEdBQUcsQ0FBQ0QsS0FBSyxHQUFHL0ssR0FBRyxDQUFDLEdBQUcsTUFBTTtJQUNwRDtNQUNJLElBQUlpTCxFQUFFLEdBQUdSLEVBQUUsR0FBR3hDLEtBQUssR0FBR2hJLElBQUksQ0FBQ2lMLEdBQUcsQ0FBQ1AsS0FBSyxDQUFDO01BQ3JDLElBQUlRLEVBQUUsR0FBR1QsRUFBRSxHQUFHeEMsS0FBSyxHQUFHakksSUFBSSxDQUFDbUwsR0FBRyxDQUFDVCxLQUFLLENBQUM7TUFDckMsSUFBSSxDQUFDdkIsVUFBVSxDQUFDNkIsRUFBRSxFQUFFRSxFQUFFLEVBQUVGLEVBQUUsRUFBRUUsRUFBRSxFQUFFLENBQUMsRUFBRXBFLFNBQVMsRUFBRTFCLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksQ0FBQzs7TUFFekUsSUFBSTZGLEVBQUUsR0FBR1osRUFBRSxHQUFHeEMsS0FBSyxHQUFHaEksSUFBSSxDQUFDaUwsR0FBRyxDQUFDTixHQUFHLENBQUM7TUFDbkMsSUFBSVUsRUFBRSxHQUFHWixFQUFFLEdBQUd4QyxLQUFLLEdBQUdqSSxJQUFJLENBQUNtTCxHQUFHLENBQUNSLEdBQUcsQ0FBQztNQUNuQyxJQUFJLENBQUN4QixVQUFVLENBQUNpQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUQsRUFBRSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFdkUsU0FBUyxFQUFFMUIsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxDQUFDOztNQUV6RTtJQUNKLENBQUM7O0lBRUQ7TUFDSSxJQUFJLENBQUNYLFdBQVcsQ0FBQzRGLEVBQUUsR0FBR3hDLEtBQUssRUFBRXlDLEVBQUUsR0FBR3hDLEtBQUssQ0FBQztNQUN4QyxJQUFJLENBQUNyRCxXQUFXLENBQUM0RixFQUFFLEdBQUd4QyxLQUFLLEVBQUV5QyxFQUFFLEdBQUd4QyxLQUFLLENBQUM7SUFDNUM7O0lBRUE7SUFDQSxNQUFNcUQsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLElBQUlyRyxDQUFDLEdBQUcsSUFBSSxDQUFDeUIsYUFBYSxDQUFDOEQsRUFBRSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFYSxXQUFXLEVBQUVqRyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxDQUFDO0lBQ3JGLElBQUksQ0FBQzJELFlBQVksQ0FBQ2pFLENBQUMsQ0FBQztFQUN4Qjs7RUFFQSxJQUFJeUQsQ0FBQyxHQUFHLElBQUksQ0FBQ2IsWUFBWSxDQUFDMkMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEtBQUssRUFBRUMsR0FBRyxFQUFFM0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRXBCLFNBQVMsRUFBRTFCLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksQ0FBQzs7RUFFeEcsSUFBSSxDQUFDMkQsWUFBWSxDQUFDUixDQUFDLENBQUM7O0VBRXBCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7QUFDSixDQUFDOzs7QUFHRGhILG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDd0ksZUFBZSxHQUFHLFVBQVMvRCxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRXhDLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUk7QUFDOUg7RUFDSTtFQUNBO0VBQ0E7RUFDQSxJQUFJbUQsQ0FBQyxHQUFHLElBQUksQ0FBQ25CLGdCQUFnQixDQUFDQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRXhDLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLElBQUksQ0FBQzs7RUFFcEcsSUFBSSxDQUFDMkQsWUFBWSxDQUFDUixDQUFDLENBQUM7O0VBRXBCLElBQUl1QyxHQUFHLEdBQUcsR0FBRyxHQUFHakwsSUFBSSxDQUFDaUwsR0FBRyxDQUFDckQsUUFBUSxDQUFDO0VBQ2xDLElBQUl1RCxHQUFHLEdBQUcsR0FBRyxHQUFHbkwsSUFBSSxDQUFDbUwsR0FBRyxDQUFDdkQsUUFBUSxDQUFDO0VBQ2xDLElBQUk0RCxDQUFDLEdBQUd4TCxJQUFJLENBQUMrSyxHQUFHLENBQUNyRCxLQUFLLEdBQUd1RCxHQUFHLENBQUMsR0FBR2pMLElBQUksQ0FBQytLLEdBQUcsQ0FBQ3BELE1BQU0sR0FBR3dELEdBQUcsQ0FBQztFQUN0RCxJQUFJTSxDQUFDLEdBQUd6TCxJQUFJLENBQUMrSyxHQUFHLENBQUNyRCxLQUFLLEdBQUd5RCxHQUFHLENBQUMsR0FBR25MLElBQUksQ0FBQytLLEdBQUcsQ0FBQ3BELE1BQU0sR0FBR3NELEdBQUcsQ0FBQztFQUN0RCxJQUFJLENBQUNyRyxXQUFXLENBQUM0QyxPQUFPLEdBQUdnRSxDQUFDLEVBQUUvRCxPQUFPLEdBQUdnRSxDQUFDLENBQUM7RUFDMUMsSUFBSSxDQUFDN0csV0FBVyxDQUFDNEMsT0FBTyxHQUFHZ0UsQ0FBQyxFQUFFL0QsT0FBTyxHQUFHZ0UsQ0FBQyxDQUFDO0FBQzlDLENBQUM7O0FBRUQvSixtQkFBbUIsQ0FBQ3FCLFNBQVMsQ0FBQzJJLDBCQUEwQixHQUFHLFVBQVM3RyxDQUFDLEVBQUVDLENBQUMsRUFBRTJELENBQUMsRUFBRUMsQ0FBQyxFQUFFdEQsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFO0VBQ3hHLE9BQU8sSUFBSSxDQUFDb0Qsd0JBQXdCLENBQUM5RCxDQUFDLEVBQUVDLENBQUMsRUFBRTJELENBQUMsRUFBRUMsQ0FBQyxFQUFFdEQsS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFOUUsMkJBQTJCLENBQUM7QUFDN0csQ0FBQzs7QUFFRGlCLG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDNEYsd0JBQXdCLEdBQUcsVUFBUzlELENBQUMsRUFBRUMsQ0FBQyxFQUFFMkQsQ0FBQyxFQUFFQyxDQUFDLEVBQUV0RCxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUVvRyxJQUFJLEVBQUU7RUFDNUcsSUFBSSxJQUFJLENBQUNoSyxhQUFhO0VBQ2xCLE9BQU8sQ0FBQzs7RUFFWixJQUFJNkUsRUFBRSxHQUFHLElBQUksQ0FBQ3hELE1BQU07RUFDcEIsSUFBSVgsR0FBRyxHQUFHLElBQUksQ0FBQ0EsR0FBRztFQUNsQixJQUFJLENBQUM4RixTQUFTLENBQUN0RCxDQUFDLEVBQUVDLENBQUMsRUFBRU0sS0FBSyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFb0csSUFBSSxDQUFDOztFQUV0RDtFQUNBdEosR0FBRyxDQUFDbUUsRUFBRSxHQUFHLElBQUksQ0FBQ3ZFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBR3dHLENBQUM7RUFDN0JwRyxHQUFHLENBQUNtRSxFQUFFLEdBQUcsSUFBSSxDQUFDdkUsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHeUcsQ0FBQzs7RUFFN0IsSUFBSSxDQUFDOUQsV0FBVyxDQUFDQyxDQUFDLEVBQUVDLENBQUMsQ0FBQztBQUMxQixDQUFDOzs7QUFHRHBELG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDNkksTUFBTSxHQUFHLFVBQVNDLFFBQVE7QUFDeEQ7RUFDSUEsUUFBUSxHQUFHQSxRQUFRLElBQUksQ0FBQztFQUN4QixJQUFJQyxJQUFJLEdBQUcsSUFBSSxDQUFDbkssYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDOztFQUVyQyxPQUFRLElBQUksQ0FBQ3FCLE1BQU0sR0FBRzhJLElBQUksR0FBR0QsUUFBUSxHQUFHLElBQUksQ0FBQzdKLFVBQVU7QUFDM0QsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQU4sbUJBQW1CLENBQUNxQixTQUFTLENBQUNnSix1QkFBdUIsR0FBRyxZQUFXOztFQUUvRCxJQUFJQyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ3pJLE1BQU0sQ0FBQztFQUN4QyxJQUFJMEksU0FBUyxHQUFHRixNQUFNLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMzSSxLQUFLLENBQUM7O0VBRXZDO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQSxJQUFJLElBQUksQ0FBQ3RCLE1BQU0sS0FBSyxFQUFFO0VBQ2xCLE9BQU8sSUFBSTs7RUFFZjtFQUNBLElBQUltSyxNQUFNLEdBQUdKLFNBQVMsQ0FBQzFELE1BQU0sR0FBRzZELFNBQVMsQ0FBQzdELE1BQU07O0VBRWhELElBQUkwRCxTQUFTLENBQUMxRCxNQUFNLEdBQUc2RCxTQUFTLENBQUM3RCxNQUFNLEdBQUcsS0FBSztFQUMzQyxPQUFPLElBQUk7O0VBRWYsSUFBSStELE9BQU8sR0FBRyxJQUFJN0osVUFBVSxDQUFDNEosTUFBTSxHQUFDLENBQUMsQ0FBQztFQUN0Q0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDZCxJQUFJQyxLQUFLLEdBQUcsQ0FBQztFQUNiLEtBQUssSUFBSS9ILENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ3lILFNBQVMsQ0FBQzFELE1BQU0sRUFBRS9ELENBQUMsRUFBRSxFQUFFK0gsS0FBSyxFQUFFLEVBQUU7SUFDNUNELE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLEdBQUdDLFFBQVEsQ0FBQ1AsU0FBUyxDQUFDekgsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDZCxNQUFNLENBQUN1SSxTQUFTLENBQUN6SCxDQUFDLENBQUMsQ0FBQyxHQUFHK0gsS0FBSztFQUNyQztFQUNBLEtBQUssSUFBSS9ILENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQzRILFNBQVMsQ0FBQzdELE1BQU0sRUFBRS9ELENBQUMsRUFBRSxFQUFFK0gsS0FBSyxFQUFFLEVBQUU7SUFDNUNELE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLEdBQUdDLFFBQVEsQ0FBQ0osU0FBUyxDQUFDNUgsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDaEIsS0FBSyxDQUFDNEksU0FBUyxDQUFDNUgsQ0FBQyxDQUFDLENBQUMsR0FBRytILEtBQUs7RUFDcEM7O0VBRUEsSUFBSUUsYUFBYSxHQUFHLENBQUM7O0VBRXJCLElBQUlySyxFQUFFLEdBQUksSUFBSUMsV0FBVyxDQUFDb0ssYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUN4SixNQUFNLENBQUM7RUFDMUQsSUFBSVQsR0FBRyxHQUFHLElBQUlDLFVBQVUsQ0FBQ0wsRUFBRSxDQUFDO0VBQzVCLElBQUlzSyxHQUFHLEdBQUcsSUFBSS9KLFdBQVcsQ0FBQ1AsRUFBRSxDQUFDOztFQUU3QixJQUFJNkksRUFBRSxHQUFJLElBQUksQ0FBQzNILElBQUksR0FBRyxJQUFJLENBQUNILElBQUksSUFBSyxDQUFDO0VBQ3JDLElBQUlnSSxFQUFFLEdBQUksSUFBSSxDQUFDNUgsSUFBSSxHQUFHLElBQUksQ0FBQ0gsSUFBSSxJQUFLLENBQUM7RUFDckMsSUFBSXVKLEVBQUUsR0FBRyxJQUFJLENBQUN4SixJQUFJO0VBQ2xCLElBQUl5SixFQUFFLEdBQUcsSUFBSSxDQUFDeEosSUFBSTtFQUNsQixJQUFJeUosRUFBRSxHQUFHNU0sSUFBSSxDQUFDaUosR0FBRyxDQUFDK0IsRUFBRSxFQUFFRSxFQUFFLENBQUM7O0VBRXpCLFNBQVMyQixFQUFFQSxDQUFDaEksQ0FBQyxFQUFFO0lBQ1gsT0FBTyxDQUFDLEdBQUc3RSxJQUFJLENBQUM4TSxLQUFLLENBQUcsQ0FBQ2pJLENBQUMsR0FBRzZILEVBQUUsSUFBSTFCLEVBQUUsR0FBSSxLQUFNLENBQUM7RUFDcEQ7O0VBRUEsU0FBUytCLEVBQUVBLENBQUNqSSxDQUFDLEVBQUU7SUFDWCxPQUFPLENBQUMsR0FBRzlFLElBQUksQ0FBQzhNLEtBQUssQ0FBRyxDQUFDaEksQ0FBQyxHQUFHNkgsRUFBRSxJQUFJekIsRUFBRSxHQUFJLEtBQU0sQ0FBQztFQUNwRDs7RUFFQSxTQUFTOEIsRUFBRUEsQ0FBQ25JLENBQUMsRUFBRTtJQUNYLE9BQU8sQ0FBQyxHQUFHN0UsSUFBSSxDQUFDOE0sS0FBSyxDQUFHakksQ0FBQyxHQUFHK0gsRUFBRSxHQUFJLEtBQU0sQ0FBQztFQUM3Qzs7RUFFQSxTQUFTSyxJQUFJQSxDQUFDcEksQ0FBQyxFQUFFO0lBQ2IsT0FBTyxDQUFDLEdBQUlBLENBQUMsR0FBRyxLQUFNO0VBQzFCOztFQUVBLFNBQVNxSSxVQUFVQSxDQUFDckksQ0FBQyxFQUFFO0lBQ25CLElBQUlBLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDUCxPQUFPLEtBQUssR0FBRzdFLElBQUksQ0FBQ2tILEdBQUcsQ0FBQyxHQUFHLEVBQUcsQ0FBQ3JDLENBQUMsR0FBRyxJQUFLLENBQUMsR0FBRyxLQUFLO0lBQ3JELENBQUMsTUFBTTtNQUNIO01BQ0E7TUFDQSxPQUFPQSxDQUFDLEdBQUksQ0FBQyxHQUFHN0UsSUFBSSxDQUFDOE0sS0FBSyxDQUFHakksQ0FBQyxHQUFHK0gsRUFBRSxHQUFJLEtBQU0sQ0FBQyxJQUFLLENBQUMsR0FBRy9ILENBQUM7SUFDNUQ7RUFDSjs7RUFFQSxLQUFLLElBQUlOLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQyxJQUFJLENBQUN2QixNQUFNLEVBQUV1QixDQUFDLEVBQUUsRUFBRTs7SUFFOUIsSUFBSTRJLFNBQVMsR0FBRyxJQUFJLENBQUNsTCxNQUFNLEdBQUdzQyxDQUFDO0lBQy9CLElBQUk2SSxTQUFTLEdBQUdaLGFBQWEsR0FBR2pJLENBQUM7SUFDakMsSUFBSThJLFlBQVksR0FBR0QsU0FBUyxHQUFHLENBQUM7O0lBRWhDLElBQUlFLEVBQUUsR0FBSSxJQUFJLENBQUMvSyxHQUFHLENBQUM0SyxTQUFTLEdBQUcvTCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBSSxJQUFJOztJQUU3RDtJQUNBO0lBQ0EsUUFBUWtNLEVBQUU7TUFDTixLQUFLcE4sdUJBQXVCO1FBQ3hCdU0sR0FBRyxDQUFDWSxZQUFZLENBQUcsR0FBR1IsRUFBRSxDQUFDLElBQUksQ0FBQ3hLLEdBQUcsQ0FBQzhLLFNBQVMsQ0FBQyxDQUFDO1FBQzdDVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR04sRUFBRSxDQUFDLElBQUksQ0FBQzFLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQzs7TUFFSixLQUFLaE4sbUJBQW1CO01BQ3hCLEtBQUtPLDBCQUEwQjtNQUMvQixLQUFLQyxnQ0FBZ0M7TUFDckMsS0FBS0MsOEJBQThCO1FBQy9CNkwsR0FBRyxDQUFDWSxZQUFZLENBQUcsR0FBR1IsRUFBRSxDQUFDLElBQUksQ0FBQ3hLLEdBQUcsQ0FBQzhLLFNBQVMsQ0FBQyxDQUFDO1FBQzdDVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR04sRUFBRSxDQUFDLElBQUksQ0FBQzFLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQ1YsR0FBRyxDQUFDWSxZQUFZLEdBQUMsQ0FBQyxDQUFDLEdBQUdKLElBQUksQ0FBQyxJQUFJLENBQUM1SyxHQUFHLENBQUM4SyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakRWLEdBQUcsQ0FBQ1ksWUFBWSxHQUFDLENBQUMsQ0FBQyxHQUFHTCxFQUFFLENBQUMsSUFBSSxDQUFDM0ssR0FBRyxDQUFDOEssU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR0gsVUFBVSxDQUFDLElBQUksQ0FBQzdLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RDs7TUFFSixLQUFLL00sbUJBQW1CO1FBQ3BCcU0sR0FBRyxDQUFDWSxZQUFZLENBQUcsR0FBR1IsRUFBRSxDQUFDLElBQUksQ0FBQ3hLLEdBQUcsQ0FBQzhLLFNBQVMsQ0FBQyxDQUFDO1FBQzdDVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR04sRUFBRSxDQUFDLElBQUksQ0FBQzFLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQ1YsR0FBRyxDQUFDWSxZQUFZLEdBQUMsQ0FBQyxDQUFDLEdBQUdKLElBQUksQ0FBQyxJQUFJLENBQUM1SyxHQUFHLENBQUM4SyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakRWLEdBQUcsQ0FBQ1ksWUFBWSxHQUFDLENBQUMsQ0FBQyxHQUFHSixJQUFJLENBQUMsSUFBSSxDQUFDNUssR0FBRyxDQUFDOEssU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pEVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR0gsVUFBVSxDQUFDLElBQUksQ0FBQzdLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RFYsR0FBRyxDQUFDWSxZQUFZLEdBQUMsQ0FBQyxDQUFDLEdBQUdMLEVBQUUsQ0FBQyxJQUFJLENBQUMzSyxHQUFHLENBQUM4SyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0M7O01BRUosS0FBSzlNLHFCQUFxQjtNQUMxQixLQUFLUSx5QkFBeUI7UUFDMUI7UUFDQTs7TUFFSixLQUFLUCxlQUFlO1FBQ2hCbU0sR0FBRyxDQUFDWSxZQUFZLENBQUcsR0FBR1IsRUFBRSxDQUFDLElBQUksQ0FBQ3hLLEdBQUcsQ0FBQzhLLFNBQVMsQ0FBQyxDQUFDO1FBQzdDVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR04sRUFBRSxDQUFDLElBQUksQ0FBQzFLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQ1YsR0FBRyxDQUFDWSxZQUFZLEdBQUMsQ0FBQyxDQUFDLEdBQUdKLElBQUksQ0FBQyxJQUFJLENBQUM1SyxHQUFHLENBQUM4SyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakRWLEdBQUcsQ0FBQ1ksWUFBWSxHQUFDLENBQUMsQ0FBQyxHQUFHTCxFQUFFLENBQUMsSUFBSSxDQUFDM0ssR0FBRyxDQUFDOEssU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR0wsRUFBRSxDQUFDLElBQUksQ0FBQzNLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQzs7TUFFSixLQUFLNU0sbUJBQW1CO1FBQ3BCa00sR0FBRyxDQUFDWSxZQUFZLENBQUcsR0FBR1IsRUFBRSxDQUFDLElBQUksQ0FBQ3hLLEdBQUcsQ0FBQzhLLFNBQVMsQ0FBQyxDQUFDO1FBQzdDVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR04sRUFBRSxDQUFDLElBQUksQ0FBQzFLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQ1YsR0FBRyxDQUFDWSxZQUFZLEdBQUMsQ0FBQyxDQUFDLEdBQUdSLEVBQUUsQ0FBQyxJQUFJLENBQUN4SyxHQUFHLENBQUM4SyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0NWLEdBQUcsQ0FBQ1ksWUFBWSxHQUFDLENBQUMsQ0FBQyxHQUFHTixFQUFFLENBQUMsSUFBSSxDQUFDMUssR0FBRyxDQUFDOEssU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DVixHQUFHLENBQUNZLFlBQVksR0FBQyxDQUFDLENBQUMsR0FBR1IsRUFBRSxDQUFDLElBQUksQ0FBQ3hLLEdBQUcsQ0FBQzhLLFNBQVMsR0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQ1YsR0FBRyxDQUFDWSxZQUFZLEdBQUMsQ0FBQyxDQUFDLEdBQUdOLEVBQUUsQ0FBQyxJQUFJLENBQUMxSyxHQUFHLENBQUM4SyxTQUFTLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0M7O01BRUosUUFBU0ksT0FBTyxDQUFDQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBRTtJQUNyRDs7SUFFQTtJQUNBZixHQUFHLENBQUNZLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM1SixNQUFNLENBQUMsSUFBSSxDQUFDbEIsR0FBRyxDQUFDNEssU0FBUyxHQUFHak0sZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEZ1TCxHQUFHLENBQUNZLFlBQVksR0FBRyxDQUFDLENBQUUsR0FBRyxJQUFJLENBQUM5SixLQUFLLENBQUMsSUFBSSxDQUFDaEIsR0FBRyxDQUFDNEssU0FBUyxHQUFHaE0sZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDOztJQUUvRW9CLEdBQUcsQ0FBQzZLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM3SyxHQUFHLENBQUM0SyxTQUFTLEdBQUcvTCxnQkFBZ0IsQ0FBQztJQUMzRG1CLEdBQUcsQ0FBQzZLLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM3SyxHQUFHLENBQUM0SyxTQUFTLEdBQUc5TCxtQkFBbUIsQ0FBQztFQUNsRTs7RUFFQSxJQUFJb00sSUFBSSxHQUFHLENBQUMsQ0FBQzs7RUFFYkEsSUFBSSxDQUFDdEwsRUFBRSxHQUFHLElBQUlHLFlBQVksQ0FBQ0gsRUFBRSxDQUFDO0VBQzlCc0wsSUFBSSxDQUFDQyxRQUFRLEdBQUdsQixhQUFhOztFQUU3QixJQUFJbUIsQ0FBQyxHQUFHLElBQUksQ0FBQ2hNLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7RUFFbEM4TCxJQUFJLENBQUNHLFFBQVEsR0FBRztJQUNaLFNBQVMsRUFBTSxFQUFFN0gsTUFBTSxFQUFFLENBQUMsRUFBRThILFFBQVEsRUFBRSxDQUFDLEVBQUVDLFlBQVksRUFBRSxDQUFDLEVBQUVDLE9BQU8sRUFBRUosQ0FBQyxFQUFFSyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEYsU0FBUyxFQUFNLEVBQUVqSSxNQUFNLEVBQUUsQ0FBQyxFQUFFOEgsUUFBUSxFQUFFLENBQUMsRUFBRUMsWUFBWSxFQUFFLENBQUMsRUFBRUMsT0FBTyxFQUFFSixDQUFDLEVBQUVLLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RixXQUFXLEVBQUksRUFBRWpJLE1BQU0sRUFBRSxDQUFDLEVBQUU4SCxRQUFRLEVBQUUsQ0FBQyxFQUFFQyxZQUFZLEVBQUUsQ0FBQyxFQUFFQyxPQUFPLEVBQUVKLENBQUMsRUFBRUssVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pGLFNBQVMsRUFBTSxFQUFFakksTUFBTSxFQUFFLENBQUMsRUFBRThILFFBQVEsRUFBRSxDQUFDLEVBQUVDLFlBQVksRUFBRSxDQUFDLEVBQUVDLE9BQU8sRUFBRUosQ0FBQyxFQUFFSyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekYsV0FBVyxFQUFJLEVBQUVqSSxNQUFNLEVBQUUsQ0FBQyxFQUFFOEgsUUFBUSxFQUFFLENBQUMsRUFBRUMsWUFBWSxFQUFFLENBQUMsRUFBRUMsT0FBTyxFQUFFSixDQUFDLEVBQUVLLFVBQVUsRUFBRSxLQUFLLENBQUM7RUFDNUYsQ0FBQzs7RUFFRFAsSUFBSSxDQUFDUSxXQUFXLEdBQUcsRUFBQ3BKLENBQUMsRUFBRW1HLEVBQUUsRUFBRWxHLENBQUMsRUFBRW9HLEVBQUUsRUFBRWdELENBQUMsRUFBRXhCLEVBQUUsRUFBRWxCLENBQUMsRUFBRW1CLEVBQUUsQ0FBQyxDQUFDO0VBQ2hEYyxJQUFJLENBQUNwQixPQUFPLEdBQUdBLE9BQU87O0VBRXRCLE9BQU9vQixJQUFJO0FBQ2YsQ0FBQzs7QUFFRC9MLG1CQUFtQixDQUFDcUIsU0FBUyxDQUFDb0wsb0JBQW9CLEdBQUcsWUFBVztFQUM1RCxJQUFJVixJQUFJLEdBQUcsQ0FBQyxDQUFDOztFQUViQSxJQUFJLENBQUN0TCxFQUFFLEdBQUcsSUFBSUcsWUFBWSxDQUFDLElBQUksQ0FBQ0gsRUFBRSxDQUFDaU0sS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNwTCxNQUFNLEdBQUcsSUFBSSxDQUFDZixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDM0V3TCxJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJLENBQUN6TCxNQUFNOztFQUUzQixJQUFJMEwsQ0FBQyxHQUFHLElBQUksQ0FBQ2hNLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7RUFFbEM4TCxJQUFJLENBQUNHLFFBQVEsR0FBRztJQUNaLFNBQVMsRUFBTSxFQUFFN0gsTUFBTSxFQUFFLENBQUMsRUFBb0I4SCxRQUFRLEVBQUUsQ0FBQyxFQUFFQyxZQUFZLEVBQUUsQ0FBQyxFQUFFQyxPQUFPLEVBQUVKLENBQUMsRUFBRUssVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNHLFNBQVMsRUFBTSxFQUFFakksTUFBTSxFQUFFLENBQUMsRUFBb0I4SCxRQUFRLEVBQUUsQ0FBQyxFQUFFQyxZQUFZLEVBQUUsQ0FBQyxFQUFFQyxPQUFPLEVBQUVKLENBQUMsRUFBRUssVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNHLFNBQVMsRUFBTSxFQUFFakksTUFBTSxFQUFFN0UsZ0JBQWdCLEVBQUsyTSxRQUFRLEVBQUUsQ0FBQyxFQUFFQyxZQUFZLEVBQUUsQ0FBQyxFQUFFQyxPQUFPLEVBQUVKLENBQUMsRUFBRUssVUFBVSxFQUFFLElBQUksQ0FBRSxDQUFDO0lBQzNHLFFBQVEsRUFBTyxFQUFFakksTUFBTSxFQUFFNUUsZUFBZSxFQUFNME0sUUFBUSxFQUFFLENBQUMsRUFBRUMsWUFBWSxFQUFFLENBQUMsRUFBRUMsT0FBTyxFQUFFSixDQUFDLEVBQUVLLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRyxTQUFTLEVBQU0sRUFBRWpJLE1BQU0sRUFBRTNFLGdCQUFnQixFQUFLeU0sUUFBUSxFQUFFLENBQUMsRUFBRUMsWUFBWSxFQUFFLENBQUMsRUFBRUMsT0FBTyxFQUFFSixDQUFDLEVBQUVLLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRyxXQUFXLEVBQUksRUFBRWpJLE1BQU0sRUFBRTFFLG1CQUFtQixFQUFFd00sUUFBUSxFQUFFLENBQUMsRUFBRUMsWUFBWSxFQUFFLENBQUMsRUFBRUMsT0FBTyxFQUFFSixDQUFDLEVBQUVLLFVBQVUsRUFBRSxLQUFLLENBQUM7RUFDOUcsQ0FBQzs7RUFFRDtFQUNBO0VBQ0E7RUFDQTtFQUNBUCxJQUFJLENBQUNHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFN0gsTUFBTSxFQUFFLElBQUksQ0FBQzlELE1BQU0sR0FBRyxDQUFDLEVBQUU0TCxRQUFRLEVBQUUsQ0FBQyxFQUFFQyxZQUFZLEVBQUUsQ0FBQyxFQUFFQyxPQUFPLEVBQUVKLENBQUMsRUFBRUssVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0VBQ3ZILE9BQU9QLElBQUk7QUFDZixDQUFDOztBQUVEL0wsbUJBQW1CLENBQUNxQixTQUFTLENBQUNzTCxNQUFNLEdBQUc7QUFDdkM7RUFDSSxJQUFJWixJQUFJLEdBQUcsSUFBSTs7RUFFZixJQUFJLElBQUksQ0FBQzNMLGlCQUFpQjtFQUN0QjJMLElBQUksR0FBRyxJQUFJLENBQUMxQix1QkFBdUIsQ0FBQyxDQUFDOztFQUV6QyxJQUFJLENBQUMwQixJQUFJO0VBQ0xBLElBQUksR0FBRyxJQUFJLENBQUNVLG9CQUFvQixDQUFDLENBQUM7O0VBRXRDLElBQUksSUFBSSxDQUFDeE0sYUFBYSxFQUFFO0lBQ3BCOEwsSUFBSSxDQUFDYSxZQUFZLEdBQUcsSUFBSSxDQUFDdEwsTUFBTTs7SUFFL0I7O0lBRUEsSUFBSXVMLFNBQVMsR0FBRyxJQUFJL0wsVUFBVSxDQUFDLENBQUUxQixtQkFBbUIsRUFBRUMsa0JBQWtCLEVBQUVDLGlCQUFpQixFQUFFQyxnQkFBZ0IsQ0FBRSxDQUFDO0lBQ2hId00sSUFBSSxDQUFDRyxRQUFRLENBQUNZLFdBQVcsR0FBRyxFQUFFekksTUFBTSxFQUFFLENBQUMsRUFBRThILFFBQVEsRUFBRSxDQUFDLEVBQUVDLFlBQVksRUFBRSxDQUFDLEVBQUVDLE9BQU8sRUFBRSxDQUFDLEVBQUVDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0R1AsSUFBSSxDQUFDRyxRQUFRLENBQUNZLFdBQVcsQ0FBQ0MsS0FBSyxHQUFHRixTQUFTLENBQUNHLE1BQU07O0lBRWxEakIsSUFBSSxDQUFDNUUsT0FBTyxHQUFHLElBQUluRyxXQUFXLENBQUNwQixxQkFBcUIsQ0FBQztFQUN6RCxDQUFDLE1BQU07SUFDSG1NLElBQUksQ0FBQzVFLE9BQU8sR0FBRyxJQUFJbkcsV0FBVyxDQUFDLElBQUksQ0FBQ0QsRUFBRSxDQUFDaU0sTUFBTSxDQUFDTixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUNuTCxNQUFNLENBQUMsQ0FBQztFQUM1RTs7RUFFQXdLLElBQUksQ0FBQ2xLLEtBQUssR0FBRyxJQUFJLENBQUNBLEtBQUs7O0VBRXZCLElBQUlpSSxDQUFDLEdBQUksSUFBSSxDQUFDbkksSUFBSSxHQUFHLElBQUksQ0FBQ0gsSUFBSTtFQUM5QixJQUFJdUksQ0FBQyxHQUFJLElBQUksQ0FBQ25JLElBQUksR0FBRyxJQUFJLENBQUNILElBQUk7RUFDOUIsSUFBSXdMLEVBQUUsR0FBRzNPLElBQUksQ0FBQ2lKLEdBQUcsQ0FBQ3VDLENBQUMsRUFBRUMsQ0FBQyxDQUFDOztFQUV2QmdDLElBQUksQ0FBQ21CLFdBQVcsR0FBRztJQUNmMUgsR0FBRyxFQUFFLEVBQUVyQyxDQUFDLEVBQUUsSUFBSSxDQUFDM0IsSUFBSSxFQUFFNEIsQ0FBQyxFQUFFLElBQUksQ0FBQzNCLElBQUksRUFBRStLLENBQUMsRUFBRSxDQUFDUyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEQxRixHQUFHLEVBQUUsRUFBRXBFLENBQUMsRUFBRSxJQUFJLENBQUN4QixJQUFJLEVBQUV5QixDQUFDLEVBQUUsSUFBSSxDQUFDeEIsSUFBSSxFQUFFNEssQ0FBQyxFQUFHUyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3JELENBQUM7O0VBRUQ7RUFDQWxCLElBQUksQ0FBQ29CLGNBQWMsR0FBRztJQUNsQkMsTUFBTSxFQUFFO01BQ0pqSyxDQUFDLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQzNCLElBQUksR0FBRyxJQUFJLENBQUNHLElBQUksQ0FBQztNQUNoQ3lCLENBQUMsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQ0csSUFBSSxDQUFDO01BQ2hDNEssQ0FBQyxFQUFFO0lBQ1AsQ0FBQztJQUNEYSxNQUFNLEVBQUUsR0FBRyxHQUFHL08sSUFBSSxDQUFDd0osSUFBSSxDQUFDZ0MsQ0FBQyxHQUFDQSxDQUFDLEdBQUdDLENBQUMsR0FBQ0EsQ0FBQztFQUNyQyxDQUFDOztFQUVELE9BQU9nQyxJQUFJO0FBQ2YsQ0FBQzs7QUFFRDtBQUNBOztBQUVBLElBQUk1QyxVQUFVLEdBQUcsU0FBQUEsQ0FBVUgsS0FBSyxFQUFFQyxHQUFHO0FBQ3JDO0VBQ0k7RUFDQSxTQUFTcUUsWUFBWUEsQ0FBQSxFQUFHO0lBQ3BCLFNBQVNDLFdBQVdBLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxFQUFFLENBQUUsT0FBUW5QLElBQUksQ0FBQytLLEdBQUcsQ0FBQ21FLENBQUMsR0FBR0MsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFHOztJQUU5RCxJQUFJRixXQUFXLENBQUN2RSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUlBLEtBQUssR0FBRyxHQUFHO0lBQ3hDLElBQUl1RSxXQUFXLENBQUN0RSxHQUFHLEVBQUksQ0FBQyxDQUFDLEVBQUlBLEdBQUcsR0FBSyxHQUFHO0lBQ3hDLElBQUlzRSxXQUFXLENBQUN2RSxLQUFLLEVBQUUzSyxHQUFHLENBQUMsRUFBRTJLLEtBQUssR0FBRzNLLEdBQUc7SUFDeEMsSUFBSWtQLFdBQVcsQ0FBQ3RFLEdBQUcsRUFBSTVLLEdBQUcsQ0FBQyxFQUFFNEssR0FBRyxHQUFLNUssR0FBRztFQUM1Qzs7RUFFQWlQLFlBQVksQ0FBQyxDQUFDOztFQUVkO0VBQ0EsSUFBSXRFLEtBQUssR0FBR0MsR0FBRyxFQUFFO0lBQ2IsT0FBT0QsS0FBSyxHQUFHM0ssR0FBRyxFQUFFO01BQ2hCMkssS0FBSyxJQUFJM0ssR0FBRztNQUNaNEssR0FBRyxJQUFNNUssR0FBRztJQUNoQjtFQUNKLENBQUMsTUFBTTtJQUNILE9BQU80SyxHQUFHLEdBQUc1SyxHQUFHLEVBQUU7TUFDZDJLLEtBQUssSUFBSTNLLEdBQUc7TUFDWjRLLEdBQUcsSUFBTTVLLEdBQUc7SUFDaEI7RUFDSjs7RUFFQTtFQUNBaVAsWUFBWSxDQUFDLENBQUM7O0VBRWQ7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJdEUsS0FBSyxHQUFHLENBQUMsSUFBSUMsR0FBRyxHQUFHLENBQUMsRUFBRTtJQUN0QkQsS0FBSyxJQUFJM0ssR0FBRztFQUNoQjs7RUFFQSxPQUFPLEVBQUMySyxLQUFLLEVBQUVBLEtBQUssRUFBRUMsR0FBRyxFQUFFQSxHQUFHLEVBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvY29tbW9uL1ZlcnRleEJ1ZmZlckJ1aWxkZXIuanM/ZjE4YiJdLCJzb3VyY2VzQ29udGVudCI6WyJcblwidXNlIHN0cmljdFwiO1xuXG52YXIgVEFVID0gTWF0aC5QSSAqIDI7XG5cbnZhciBWQkJfR1RfVFJJQU5HTEVfSU5ERVhFRCA9IDAsXG4gICAgVkJCX0dUX0xJTkVfU0VHTUVOVCAgICAgPSAxLFxuICAgIFZCQl9HVF9BUkNfQ0lSQ1VMQVIgICAgID0gMixcbiAgICBWQkJfR1RfQVJDX0VMTElQVElDQUwgICA9IDMsXG4gICAgVkJCX0dUX1RFWF9RVUFEICAgICAgICAgPSA0LFxuICAgIFZCQl9HVF9PTkVfVFJJQU5HTEUgICAgID0gNSxcbiAgICBWQkJfR1RfTVNERl9UUklBTkdMRV9JTkRFWEVEID0gNixcbiAgICBWQkJfR1RfVEVYX1RSSUFOR0xFX0lOREVYRUQgPSA3LFxuICAgIFZCQl9HVF9MSU5FX1NFR01FTlRfQ0FQUEVEID0gOCxcbiAgICBWQkJfR1RfTElORV9TRUdNRU5UX0NBUFBFRF9TVEFSVCA9IDksXG4gICAgVkJCX0dUX0xJTkVfU0VHTUVOVF9DQVBQRURfRU5EID0gMTAsXG4gICAgVkJCX0dUX0xJTkVfU0VHTUVOVF9NSVRFUiA9IDExO1xuXG52YXIgVkJCX1NFR19TVEFSVF9SSUdIVCA9IDAsIC8vIHRoaXMgc3RhcnRzIGludGVudGlvbmFsbHkgYXQgMCFcbiAgICBWQkJfU0VHX1NUQVJUX0xFRlQgID0gMSxcbiAgICBWQkJfU0VHX0VORF9SSUdIVCAgID0gMixcbiAgICBWQkJfU0VHX0VORF9MRUZUICAgID0gMztcblxudmFyIFZCQl9DT0xPUl9PRkZTRVQgICAgPSA2LFxuICAgIFZCQl9EQklEX09GRlNFVCAgICAgPSA3LFxuICAgIFZCQl9GTEFHU19PRkZTRVQgICAgPSA4LFxuICAgIFZCQl9MQVlFUl9WUF9PRkZTRVQgPSA5O1xuXG52YXIgUVVBRF9UUklBTkdMRV9JTkRJQ0VTID0gWyAwLDEsMywgMCwzLDIgXTtcblxuLy8gYWxpZ24gY2hhbmdlcyBoZXJlIHdpdGggdGhlIHVuaWZvcm1zIGluIExpbmVTaGFkZXJTUy5qcyEhIVxudmFyIFZCQl9NSVRFUl9TRUdNRU5UX1NDQUxFX0ZBQ1RPUiA9IDEwMjMuMDtcbnZhciBWQkJfTUlURVJfU0VHTUVOVF9DUCA9IDY1NTM2LjA7XG5cbi8vIFZCQl9NSVRFUl9TRUdNRU5UX1NDQUxFX0ZBQ1RPUiAqIFZCQl9NSVRFUl9TRUdNRU5UX01BWCA8IFZCQl9NSVRFUl9TRUdNRU5UX0NQXG52YXIgVkJCX01JVEVSX1NFR01FTlRfTUFYID0gNjQuMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFZlcnRleEJ1ZmZlckJ1aWxkZXIodXNlSW5zdGFuY2luZywgYWxsb2NTaXplLCBmdWxsQ291bnQsIHVzZUNvbXBhY3RCdWZmZXJzKVxue1xuICAgIHZhciBNQVhfVkNPVU5UID0gYWxsb2NTaXplIHx8IDY1NTM2O1xuICAgIHRoaXMuRlVMTF9DT1VOVCA9IChmdWxsQ291bnQgfHwgMzI3NjcpIHwgMDtcblxuICAgIHRoaXMudXNlSW5zdGFuY2luZyA9IHVzZUluc3RhbmNpbmc7XG4gICAgdGhpcy51c2VDb21wYWN0QnVmZmVycyA9IHVzZUNvbXBhY3RCdWZmZXJzO1xuXG4gICAgdGhpcy5zdHJpZGUgPSAxMDtcbiAgICB0aGlzLmFsbG9jVmNvdW50ID0gNCAqICh0aGlzLnVzZUluc3RhbmNpbmcgPyBNQVhfVkNPVU5UIC8gNCA6IE1BWF9WQ09VTlQpO1xuXG4gICAgdGhpcy52YiAgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5zdHJpZGUgKiB0aGlzLmFsbG9jVmNvdW50KTtcbiAgICB0aGlzLnZiZiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52Yik7XG4gICAgdGhpcy52YmkgPSBuZXcgSW50MzJBcnJheSh0aGlzLnZiKTtcbiAgICB0aGlzLmliID0gdGhpcy51c2VJbnN0YW5jaW5nID8gbnVsbCA6IG5ldyBVaW50MTZBcnJheShNQVhfVkNPVU5UKTtcbiAgICB0aGlzLm1pbkxpbmVXaWR0aCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgdGhpcy5yZXNldCgwKTtcblxufVxuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKHZjb3VudCkge1xuICAgIC8vIFRoaXMgaXMgdXNlZCB0byByZXN0b3JlIHRoZSB2Y291bnQgd2hlbiByZXN0b3Jpbmcgc3RyZWFtIHN0YXRlIGFzIHdlbGwgYXMgYXQgaW5pdCB0aW1lLlxuICAgIHRoaXMudmNvdW50ID0gdmNvdW50O1xuXG4gICAgdGhpcy5pY291bnQgPSAwO1xuXG4gICAgdGhpcy5taW54ID0gdGhpcy5taW55ID0gIEluZmluaXR5O1xuICAgIHRoaXMubWF4eCA9IHRoaXMubWF4eSA9IC1JbmZpbml0eTtcblxuICAgIC8vS2VlcHMgdHJhY2sgb2Ygb2JqZWN0SWRzIHJlZmVyZW5jZWQgYnkgZ2VvbWV0cnkgaW4gdGhlIFZCXG4gICAgdGhpcy5kYklkcyA9IHt9O1xuICAgIHRoaXMubGFzdERiSWQgPSBudWxsO1xuXG4gICAgLy9LZWVwIHRyYWNrIG9mIHVuaXF1ZSBjb2xvcnMgdXNlZCBieSB0aGlzIFZCXG4gICAgdGhpcy5jb2xvcnMgPSB7fTtcblxuICAgIHRoaXMubnVtRWxsaXB0aWNhbHMgICA9IDA7XG4gICAgdGhpcy5udW1DaXJjdWxhcnMgICAgID0gMDtcbiAgICB0aGlzLm51bVRyaWFuZ2xlR2VvbXMgPSAwO1xuICAgIHRoaXMubnVtTWl0ZXJMaW5lcyAgICA9IDA7XG5cbiAgICAvLyBJZiBmYWxzZSwgYWxsIGxpbmVzIGFyZSBvZiB0eXBlIDAgKHNvbGlkKSwgc28gdGhhdCB3ZSBkb24ndCBuZWVkIGxpbmUtcGF0dGVybiBzdXBwb3J0LlxuICAgIHRoaXMuaGFzTGluZVN0eWxlcyA9IGZhbHNlO1xuXG4gICAgLy9DZXJ0YWluIGZpZWxkcyBjYW4gYmUgaW52YXJpYW50IG92ZXIgbGFyZ2UgbnVtYmVycyBvZiBwcmltaXRpdmVzLlxuICAgIC8vV2Uga2VlcCB0cmFjayBvZiB0aG9zZSBpbiBvcmRlciB0byBvcHRpbWl6ZSB0aGUgdmVydGV4IGxheW91dCBieVxuICAgIC8vcHVsbGluZyBpbnZhcmlhbnRzIGludG8gc2hhZGVyIHVuaWZvcm1zLlxuICAgIHRoaXMuY2hhbmdlVHJhY2tpbmcgPSB7fTtcblxuICAgIHRoaXMuc3RyaWRlID0gMTA7XG59O1xuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5leHBhbmRTdHJpZGUgPSBmdW5jdGlvbigpXG57XG4gICAgLy9DdXJyZW50bHkgaGFyZGNvZGVkIHRvIGV4cGFuZCBieSA0IGZsb2F0cy5cbiAgICB2YXIgZXhwYW5kQnkgPSAyO1xuXG4gICAgdmFyIHN0cmlkZSA9IHRoaXMuc3RyaWRlO1xuXG4gICAgaWYgKHN0cmlkZSA+PSAxMilcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIG5zdHJpZGUgPSB0aGlzLnN0cmlkZSArIGV4cGFuZEJ5O1xuXG4gICAgdmFyIG52YiA9IG5ldyBBcnJheUJ1ZmZlcihuc3RyaWRlICogdGhpcy5hbGxvY1Zjb3VudCk7XG5cbiAgICB2YXIgc3JjID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52Yik7XG4gICAgdmFyIGRzdCA9IG5ldyBVaW50OEFycmF5KG52Yik7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaUVuZCA9IHRoaXMudmNvdW50OyBpPGlFbmQ7IGkrKykge1xuICAgICAgICB2YXIgb3MgPSBpICogc3RyaWRlICogNDtcbiAgICAgICAgdmFyIG9kID0gaSAqIG5zdHJpZGUgKiA0O1xuXG4gICAgICAgIGZvciAodmFyIGo9MDsgajxzdHJpZGUgKiA0OyBqKyspXG4gICAgICAgICAgICBkc3Rbb2Qral0gPSBzcmNbb3Mral07XG4gICAgfVxuXG4gICAgdGhpcy52YiA9IG52YjtcbiAgICB0aGlzLnZiZiA9IG5ldyBGbG9hdDMyQXJyYXkobnZiKTtcbiAgICB0aGlzLnZiaSA9IG5ldyBJbnQzMkFycmF5KG52Yik7XG4gICAgdGhpcy5zdHJpZGUgPSBuc3RyaWRlO1xuXG59O1xuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5hZGRUb0JvdW5kcyA9IGZ1bmN0aW9uKHgsIHkpXG57XG4gICAgaWYgKHggPCB0aGlzLm1pbngpIHRoaXMubWlueCA9IHg7XG4gICAgaWYgKHggPiB0aGlzLm1heHgpIHRoaXMubWF4eCA9IHg7XG4gICAgaWYgKHkgPCB0aGlzLm1pbnkpIHRoaXMubWlueSA9IHk7XG4gICAgaWYgKHkgPiB0aGlzLm1heHkpIHRoaXMubWF4eSA9IHk7XG59O1xuXG52YXIgX3RvSW50MzIgPSBuZXcgSW50MzJBcnJheSgxKTtcbmZ1bmN0aW9uIHRvSW50MzIoYykge1xuICAgIF90b0ludDMyWzBdID0gYztcbiAgICByZXR1cm4gX3RvSW50MzJbMF07XG59XG5cblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLnRyYWNrQ2hhbmdlcyA9IGZ1bmN0aW9uKGdlb21UeXBlLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCwgbGluZVBhdHRlcm4pIHtcblxuICAgIGlmIChkYklkICE9PSB0aGlzLmxhc3REYklkKSB7XG4gICAgICAgIHRoaXMuZGJJZHNbdG9JbnQzMihkYklkKV0gPSAxO1xuICAgICAgICB0aGlzLmxhc3REYklkID0gZGJJZDtcbiAgICB9XG5cbiAgICBpZiAobGluZVBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5oYXNMaW5lU3R5bGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudXNlQ29tcGFjdEJ1ZmZlcnMpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBjdCA9IHRoaXMuY2hhbmdlVHJhY2tpbmc7XG5cbiAgICBmdW5jdGlvbiBjaGVja09uZSh3aGljaEF0dHIsIHZhbCkge1xuICAgICAgICBpZiAoY3Rbd2hpY2hBdHRyXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgY3Rbd2hpY2hBdHRyXSA9IGdlb21UeXBlO1xuICAgICAgICBlbHNlIGlmIChjdFt3aGljaEF0dHJdID09PSB2YWwpXG4gICAgICAgICAgICBjdFt3aGljaEF0dHIrXCJWYXJpZXNcIl0gPSB0cnVlO1xuICAgIH1cblxuICAgIGNoZWNrT25lKFwiZ2VvbVR5cGVcIiwgZ2VvbVR5cGUpO1xuICAgIGNoZWNrT25lKFwiY29sb3JcIiwgY29sb3IpO1xuICAgIGNoZWNrT25lKFwiZGJJZFwiLCBkYklkKTtcbiAgICBjaGVja09uZShcImxheWVySWRcIiwgbGF5ZXJJZCk7XG4gICAgY2hlY2tPbmUoXCJ2aWV3cG9ydElkXCIsIHZwSWQpO1xuICAgIGNoZWNrT25lKFwibGluZVBhdHRlcm5cIiwgbGluZVBhdHRlcm4pO1xuXG4gICAgdGhpcy5jb2xvcnNbdG9JbnQzMihjb2xvcildID0gMTtcbn07XG5cblxuVmVydGV4QnVmZmVyQnVpbGRlci5wcm90b3R5cGUuc2V0Q29tbW9uVmVydGV4QXR0cmlicyA9IGZ1bmN0aW9uKG9mZnNldCwgdmVydGV4SWQsIGdlb21UeXBlLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCwgbGluZVBhdHRlcm4pXG57XG4gICAgdGhpcy50cmFja0NoYW5nZXMoZ2VvbVR5cGUsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkLCBsaW5lUGF0dGVybik7XG5cbiAgICAvLyBhbGlnbiBjaGFuZ2VzIGhlcmUgd2l0aCB0aGUgXCJkZWNvZGVDb21tb25BdHRyaWJzKClcIiBmdW5jdGlvbiBpbiBMaW5lU2hhZGVyLmpzIGFuZCBWZXJ0ZXhCdWZmZXJSZWFkZXIuanMhISFcbiAgICB2ZXJ0ZXhJZCAgICA9ICh2ZXJ0ZXhJZCAgICAmICAgMHhmZik7IC8vICA4IGJpdFxuICAgIGdlb21UeXBlICAgID0gKGdlb21UeXBlICAgICYgICAweGZmKTsgLy8gIDggYml0XG4gICAgbGluZVBhdHRlcm4gPSAobGluZVBhdHRlcm4gJiAgIDB4ZmYpOyAvLyAgOCBiaXRcbiAgICBsYXllcklkICAgICA9IChsYXllcklkICAgICAmIDB4ZmZmZik7IC8vIDE2IGJpdFxuICAgIHZwSWQgICAgICAgID0gKHZwSWQgICAgICAgICYgMHhmZmZmKTsgLy8gMTYgYml0XG5cbiAgICB0aGlzLnZiaVtvZmZzZXQgKyBWQkJfRkxBR1NfT0ZGU0VUXSAgICA9IHZlcnRleElkIHwgKGdlb21UeXBlIDw8IDgpIHwgKGxpbmVQYXR0ZXJuIDw8IDE2KTsgLy8gdmVydGV4SWQ6IGludDg7IGdlb21UeXBlOiBpbnQ4OyBsaW5lUGF0dGVybjogaW50ODsgZ2hvc3RpbmdGbGFnOiBpbnQ4XG4gICAgdGhpcy52Ymlbb2Zmc2V0ICsgVkJCX0NPTE9SX09GRlNFVF0gICAgPSBjb2xvcjtcbiAgICB0aGlzLnZiaVtvZmZzZXQgKyBWQkJfREJJRF9PRkZTRVRdICAgICA9IGRiSWQ7XG4gICAgdGhpcy52Ymlbb2Zmc2V0ICsgVkJCX0xBWUVSX1ZQX09GRlNFVF0gPSBsYXllcklkIHwgKHZwSWQgPDwgMTYpOyAvLyBsYXllcklkOiBpbnQxNjsgdnBJZDogaW50MTZcbn07XG5cbi8vQ3JlYXRlcyBhIG5vbi1pbmRleGVkIHRyaWFuZ2xlIGdlb21ldHJ5IHZlcnRleCAodHJpYW5nbGUgdmVydGV4IGNvb3JkcyBzdG9yZWQgaW4gc2luZ2xlIHZlcnRleCBzdHJ1Y3R1cmUpXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5hZGRWZXJ0ZXhUcmlhbmdsZUdlb20gPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZClcbntcbiAgICB2YXIgdmkgID0gdGhpcy52Y291bnQ7XG4gICAgdmFyIHZiZiA9IHRoaXMudmJmO1xuXG4gICAgdmFyIHJlcGVhdCA9IHRoaXMudXNlSW5zdGFuY2luZyA/IDEgOiA0O1xuICAgIGZvciAodmFyIGk9MDsgaTxyZXBlYXQ7IGkrKykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gKHZpK2kpICogdGhpcy5zdHJpZGU7XG5cbiAgICAgICAgLy8gYWxpZ24gY2hhbmdlcyBoZXJlIHdpdGggdGhlIFwiZGVjb2RlVHJpYW5nbGVEYXRhKClcIiBmdW5jdGlvbiBpbiBMaW5lU2hhZGVyLmpzISEhXG4gICAgICAgIHZiZltvZmZzZXRdICAgPSB4MTtcbiAgICAgICAgdmJmW29mZnNldCsxXSA9IHkxO1xuICAgICAgICB2YmZbb2Zmc2V0KzJdID0geDI7XG5cbiAgICAgICAgdmJmW29mZnNldCszXSA9IHkyO1xuICAgICAgICB2YmZbb2Zmc2V0KzRdID0geDM7XG4gICAgICAgIHZiZltvZmZzZXQrNV0gPSB5MztcblxuICAgICAgICB0aGlzLnNldENvbW1vblZlcnRleEF0dHJpYnMob2Zmc2V0LCBWQkJfU0VHX1NUQVJUX1JJR0hUICsgaSwgVkJCX0dUX09ORV9UUklBTkdMRSwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQsIC8qbGluZVBhdHRlcm4qLzApO1xuICAgICAgICB0aGlzLnZjb3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiB2aTtcbn07XG5cblxuVmVydGV4QnVmZmVyQnVpbGRlci5wcm90b3R5cGUuYWRkVmVydGV4TGluZSA9IGZ1bmN0aW9uKHgsIHksIGFuZ2xlLCBkaXN0YW5jZUFsb25nLCB0b3RhbERpc3RhbmNlLCBsaW5lV2lkdGgsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkLCBsaW5lVHlwZSwgYnV0dENhcFN0YXJ0LCBidXR0Q2FwRW5kKVxue1xuICAgIHZhciB2aSAgPSB0aGlzLnZjb3VudDtcbiAgICB2YXIgdmJmID0gdGhpcy52YmY7XG5cbiAgICBpZiAoZGJJZCA+PSAwICYmIGxpbmVXaWR0aCA+IDAgJiYgZGlzdGFuY2VBbG9uZyA+IDApIHtcbiAgICAgICAgdGhpcy5taW5MaW5lV2lkdGggPSBNYXRoLm1pbih0aGlzLm1pbkxpbmVXaWR0aCwgbGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICB2YXIgZ2VvbVR5cGUgPSBWQkJfR1RfTElORV9TRUdNRU5UO1xuICAgIGlmIChidXR0Q2FwU3RhcnQgJiYgYnV0dENhcEVuZCkge1xuICAgICAgICBnZW9tVHlwZSA9IFZCQl9HVF9MSU5FX1NFR01FTlRfQ0FQUEVEO1xuICAgIH1cbiAgICBlbHNlIGlmIChidXR0Q2FwU3RhcnQpIHtcbiAgICAgICAgZ2VvbVR5cGUgPSBWQkJfR1RfTElORV9TRUdNRU5UX0NBUFBFRF9TVEFSVDtcbiAgICB9XG4gICAgZWxzZSBpZiAoYnV0dENhcEVuZCkge1xuICAgICAgICBnZW9tVHlwZSA9IFZCQl9HVF9MSU5FX1NFR01FTlRfQ0FQUEVEX0VORDtcbiAgICB9XG5cbiAgICB2YXIgcmVwZWF0ID0gdGhpcy51c2VJbnN0YW5jaW5nID8gMSA6IDQ7XG4gICAgZm9yICh2YXIgaT0wOyBpPHJlcGVhdDsgaSsrKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSAodmkgKyBpKSAqIHRoaXMuc3RyaWRlO1xuXG4gICAgICAgIC8vIGFsaWduIGNoYW5nZXMgaGVyZSB3aXRoIHRoZSBcImRlY29kZVNlZ21lbnREYXRhKClcIiBmdW5jdGlvbiBpbiBMaW5lU2hhZGVyLmpzIGFuZCBWZXJ0ZXhCdWZmZXJSZWFkZXIhISFcbiAgICAgICAgdmJmW29mZnNldF0gICA9IHg7XG4gICAgICAgIHZiZltvZmZzZXQrMV0gPSB5O1xuICAgICAgICB2YmZbb2Zmc2V0KzJdID0gKGFuZ2xlICsgTWF0aC5QSSkgLyBUQVU7XG5cbiAgICAgICAgdmJmW29mZnNldCszXSA9IGRpc3RhbmNlQWxvbmc7XG4gICAgICAgIHZiZltvZmZzZXQrNF0gPSBsaW5lV2lkdGggKiAwLjU7IC8vIHdlIGFyZSBzdG9yaW5nIG9ubHkgdGhlIGhhbGYgd2lkdGggKGkuZS4sIHRoZSByYWRpdXMpXG4gICAgICAgIHZiZltvZmZzZXQrNV0gPSB0b3RhbERpc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuc2V0Q29tbW9uVmVydGV4QXR0cmlicyhvZmZzZXQsIFZCQl9TRUdfU1RBUlRfUklHSFQgKyBpLCBnZW9tVHlwZSwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQsIGxpbmVUeXBlKTtcbiAgICAgICAgdGhpcy52Y291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdmk7XG59O1xuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5hZGRWZXJ0ZXhNaXRlckxpbmUgPSBmdW5jdGlvbih4LCB5LCBhbmdsZSwgYW5nbGVQcmV2LCBhbmdsZU5leHQsIGRpc3RhbmNlQWxvbmcsIGRpc3RhbmNlQWxvbmdQTiwgbGluZVdpZHRoLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCwgbGluZVR5cGUpXG57XG4gICAgdmFyIHZpICA9IHRoaXMudmNvdW50O1xuICAgIHZhciB2YmYgPSB0aGlzLnZiZjtcblxuICAgIGlmIChkYklkID49IDAgJiYgbGluZVdpZHRoID4gMCkge1xuICAgICAgICB0aGlzLm1pbkxpbmVXaWR0aCA9IE1hdGgubWluKHRoaXMubWluTGluZVdpZHRoLCBsaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIHZhciByZXBlYXQgPSB0aGlzLnVzZUluc3RhbmNpbmcgPyAxIDogNDtcbiAgICBmb3IgKHZhciBpPTA7IGk8cmVwZWF0OyBpKyspIHtcbiAgICAgICAgdmFyIG9mZnNldCA9ICh2aSArIGkpICogdGhpcy5zdHJpZGU7XG5cbiAgICAgICAgLy8gYWxpZ24gY2hhbmdlcyBoZXJlIHdpdGggdGhlIFwiZGVjb2RlTWl0ZXJTZWdtZW50KClcIiBmdW5jdGlvbiBpbiBMaW5lU2hhZGVyU1MuanMhISFcbiAgICAgICAgdmJmW29mZnNldF0gICA9IHg7XG4gICAgICAgIHZiZltvZmZzZXQrMV0gPSB5O1xuICAgICAgICB2YmZbb2Zmc2V0KzJdID0gKGFuZ2xlICsgTWF0aC5QSSkgLyBUQVU7XG5cbiAgICAgICAgdmJmW29mZnNldCszXSA9IGRpc3RhbmNlQWxvbmc7XG4gICAgICAgIHZiZltvZmZzZXQrNF0gPSBsaW5lV2lkdGggKiAwLjU7IC8vIHdlIGFyZSBzdG9yaW5nIG9ubHkgdGhlIGhhbGYgd2lkdGggKGkuZS4sIHRoZSByYWRpdXMpXG4gICAgICAgIHZiZltvZmZzZXQrNV0gPSAoYW5nbGVQcmV2ICsgTWF0aC5QSSkgLyBUQVU7XG5cbiAgICAgICAgdmJmW29mZnNldCsxMF0gPSAoYW5nbGVOZXh0ICsgTWF0aC5QSSkgLyBUQVU7XG4gICAgICAgIHZiZltvZmZzZXQrMTFdID0gZGlzdGFuY2VBbG9uZ1BOO1xuXG4gICAgICAgIHRoaXMuc2V0Q29tbW9uVmVydGV4QXR0cmlicyhvZmZzZXQsIFZCQl9TRUdfU1RBUlRfUklHSFQgKyBpLCBWQkJfR1RfTElORV9TRUdNRU5UX01JVEVSLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCwgbGluZVR5cGUpO1xuICAgICAgICB0aGlzLnZjb3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiB2aTtcbn07XG5cblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLmFkZFZlcnRleFRleFF1YWQgPSBmdW5jdGlvbihjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbiwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQpXG57XG4gICAgdmFyIHZpICA9IHRoaXMudmNvdW50O1xuICAgIHZhciB2YmYgPSB0aGlzLnZiZjtcblxuICAgIHZhciByZXBlYXQgPSB0aGlzLnVzZUluc3RhbmNpbmcgPyAxIDogNDtcbiAgICBmb3IgKHZhciBpPTA7IGk8cmVwZWF0OyBpKyspIHtcbiAgICAgICAgdmFyIG9mZnNldCA9ICh2aSArIGkpICogdGhpcy5zdHJpZGU7XG5cbiAgICAgICAgLy8gYWxpZ24gY2hhbmdlcyBoZXJlIHdpdGggdGhlIFwiZGVjb2RlVGV4UXVhZERhdGEoKVwiIGZ1bmN0aW9uIGluIExpbmVTaGFkZXIuanMhISFcbiAgICAgICAgdmJmW29mZnNldF0gICA9IGNlbnRlclg7XG4gICAgICAgIHZiZltvZmZzZXQrMV0gPSBjZW50ZXJZO1xuICAgICAgICB2YmZbb2Zmc2V0KzJdID0gcm90YXRpb24gLyBUQVU7XG5cbiAgICAgICAgdmJmW29mZnNldCszXSA9IHdpZHRoO1xuICAgICAgICB2YmZbb2Zmc2V0KzRdID0gaGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuc2V0Q29tbW9uVmVydGV4QXR0cmlicyhvZmZzZXQsIFZCQl9TRUdfU1RBUlRfUklHSFQgKyBpLCBWQkJfR1RfVEVYX1FVQUQsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkLCAvKmxpbmVQYXR0ZXJuKi8wKTtcbiAgICAgICAgdGhpcy52Y291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdmk7XG59O1xuXG5cblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLmFkZFZlcnRleEFyYyA9IGZ1bmN0aW9uKHgsIHksIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLCBtYWpvciwgbWlub3IsIHRpbHQsIGxpbmVXaWR0aCwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQpXG57XG4gICAgdmFyIHZpICA9IHRoaXMudmNvdW50O1xuICAgIHZhciB2YmYgPSB0aGlzLnZiZjtcblxuICAgIHZhciBnZW9tVHlwZSA9IChtYWpvciA9PSBtaW5vcikgPyBWQkJfR1RfQVJDX0NJUkNVTEFSIDogVkJCX0dUX0FSQ19FTExJUFRJQ0FMO1xuXG4gICAgdmFyIHJlcGVhdCA9IHRoaXMudXNlSW5zdGFuY2luZyA/IDEgOiA0O1xuICAgIGZvciAodmFyIGk9MDsgaTxyZXBlYXQ7IGkrKykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gKHZpK2kpICogdGhpcy5zdHJpZGU7XG5cbiAgICAgICAgLy8gYWxpZ24gY2hhbmdlcyBoZXJlIHdpdGggdGhlIFwiZGVjb2RlQXJjRGF0YSgpXCIgZnVuY3Rpb24gaW4gTGluZVNoYWRlci5qcyEhIVxuICAgICAgICB2YmZbb2Zmc2V0XSAgID0geDtcbiAgICAgICAgdmJmW29mZnNldCsxXSA9IHk7XG4gICAgICAgIHZiZltvZmZzZXQrMl0gPSBzdGFydEFuZ2xlIC8gVEFVO1xuXG4gICAgICAgIHZiZltvZmZzZXQrM10gPSBlbmRBbmdsZSAvIFRBVTtcbiAgICAgICAgdmJmW29mZnNldCs0XSA9IGxpbmVXaWR0aCAqIDAuNTsgLy8gd2UgYXJlIHN0b3Jpbmcgb25seSB0aGUgaGFsZiB3aWR0aCAoaS5lLiwgdGhlIHJhZGl1cylcbiAgICAgICAgdmJmW29mZnNldCs1XSA9IG1ham9yOyAvLyA9IHJhZGl1cyBmb3IgY2lyY3VsYXIgYXJjc1xuXG4gICAgICAgIGlmIChnZW9tVHlwZSA9PT0gVkJCX0dUX0FSQ19FTExJUFRJQ0FMKSB7XG4gICAgICAgICAgICB2YmZbb2Zmc2V0KzEwXSA9IG1pbm9yO1xuICAgICAgICAgICAgdmJmW29mZnNldCsxMV0gPSB0aWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRDb21tb25WZXJ0ZXhBdHRyaWJzKG9mZnNldCwgVkJCX1NFR19TVEFSVF9SSUdIVCArIGksIGdlb21UeXBlLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCwgLypsaW5lUGF0dGVybiovMCk7XG4gICAgICAgIHRoaXMudmNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpO1xufTtcblxuXG5cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEluZGV4ZWQgdHJpYW5nbGUgY29kZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBoYXJkd2FyZSBpbnN0YW5jaW5nIGlzIG5vdCBpbiB1c2UuXG4vLyBPdGhlcndpc2UsIHRoZSBhZGRUcmlhbmdsZUdlb20gb3BlcmF0aW9uIHNob3VsZCBiZSB1c2VkIHRvIGFkZCBzaW1wbGUgdHJpYW5nbGVzIHRvIHRoZSBidWZmZXIuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5hZGRWZXJ0ZXggPSBmdW5jdGlvbih4LCB5LCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCwgZmxhZz1WQkJfR1RfVFJJQU5HTEVfSU5ERVhFRClcbntcbiAgICBpZiAodGhpcy51c2VJbnN0YW5jaW5nKVxuICAgICAgICByZXR1cm47Ly9ub3Qgc3VwcG9ydGVkIGlmIGluc3RhbmNpbmcgaXMgdXNlZC5cblxuICAgIHZhciB2aSAgICAgPSB0aGlzLnZjb3VudDtcbiAgICB2YXIgb2Zmc2V0ID0gdGhpcy5zdHJpZGUgKiB2aTtcbiAgICB2YXIgdmJmICAgID0gdGhpcy52YmY7XG5cbiAgICAvLyBhbGlnbiBjaGFuZ2VzIGhlcmUgd2l0aCB0aGUgXCJkZWNvZGVUcmlhbmdsZURhdGEoKVwiIGZ1bmN0aW9uIGluIExpbmVTaGFkZXIuanMhISFcbiAgICB2YmZbb2Zmc2V0XSAgID0geDtcbiAgICB2YmZbb2Zmc2V0KzFdID0geTtcblxuICAgIHRoaXMuc2V0Q29tbW9uVmVydGV4QXR0cmlicyhvZmZzZXQsIC8qdmVydGV4SWQqLzAsIGZsYWcsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkLCAvKmxpbmVQYXR0ZXJuKi8wKTtcbiAgICB0aGlzLnZjb3VudCsrO1xuXG4gICAgcmV0dXJuIHZpO1xufTtcblxuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5hZGRWZXJ0ZXhQb2x5dHJpYW5nbGUgPSBmdW5jdGlvbih4LCB5LCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZClcbntcbiAgICBpZiAodGhpcy51c2VJbnN0YW5jaW5nKVxuICAgICAgICByZXR1cm47Ly9ub3Qgc3VwcG9ydGVkIGlmIGluc3RhbmNpbmcgaXMgdXNlZC5cblxuICAgIHRoaXMuYWRkVmVydGV4KHgsIHksIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkKTtcblxuICAgIHRoaXMuYWRkVG9Cb3VuZHMoeCwgeSk7XG59O1xuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5hZGRWZXJ0ZXhNU0RGUG9seXRyaWFuZ2xlID0gZnVuY3Rpb24oeCwgeSwgdSwgdiwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQpXG57XG4gICAgdGhpcy5hZGRWZXJ0ZXhUZXhQb2x5dHJpYW5nbGUoeCwgeSwgdSwgdiwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQsIFZCQl9HVF9NU0RGX1RSSUFOR0xFX0lOREVYRUQpO1xufTtcblxuVmVydGV4QnVmZmVyQnVpbGRlci5wcm90b3R5cGUuYWRkSW5kaWNlcyA9IGZ1bmN0aW9uKGluZGljZXMsIHZpbmRleCkge1xuXG4gICAgaWYgKHRoaXMudXNlSW5zdGFuY2luZylcbiAgICAgICAgcmV0dXJuOyAvL25vdCBzdXBwb3J0ZWQgaWYgaW5zdGFuY2luZyBpcyB1c2VkLlxuXG4gICAgdmFyIGliID0gdGhpcy5pYjtcbiAgICB2YXIgaWkgPSB0aGlzLmljb3VudDtcblxuICAgIGlmIChpaSArIGluZGljZXMubGVuZ3RoID49IGliLmxlbmd0aCkge1xuICAgICAgICB2YXIgaWJuZXcgPSBuZXcgVWludDE2QXJyYXkoTWF0aC5tYXgoaW5kaWNlcy5sZW5ndGgsIGliLmxlbmd0aCkgKiAyKTtcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGlpOyArK2kpIHtcbiAgICAgICAgICAgIGlibmV3W2ldID0gaWJbaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pYiA9IGliID0gaWJuZXc7XG4gICAgfVxuXG4gICAgZm9yKGxldCBpPTA7IGk8aW5kaWNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpYltpaStpXSA9IHZpbmRleCArIGluZGljZXNbaV07XG4gICAgfVxuXG4gICAgdGhpcy5pY291bnQgKz0gaW5kaWNlcy5sZW5ndGg7XG59O1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRW5kIGluZGV4ZWQgdHJpYW5nbGUgY29kZSBwYXRoLlxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5maW5hbGl6ZVF1YWQgPSBmdW5jdGlvbih2aW5kZXgpXG57XG4gICAgaWYgKCF0aGlzLnVzZUluc3RhbmNpbmcpIHtcbiAgICAgICAgdGhpcy5hZGRJbmRpY2VzKFFVQURfVFJJQU5HTEVfSU5ESUNFUywgdmluZGV4KTtcbiAgICB9XG59O1xuXG5cblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLmFkZFNlZ21lbnQgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgdG90YWxEaXN0YW5jZSwgbGluZVdpZHRoLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCwgbGluZVR5cGUsIGJ1dHRDYXBTdGFydCwgYnV0dENhcEVuZClcbntcbiAgICB2YXIgZHggPSB4MiAtIHgxO1xuICAgIHZhciBkeSA9IHkyIC0geTE7XG4gICAgdmFyIGFuZ2xlICA9IChkeCB8fCBkeSkgPyBNYXRoLmF0YW4yKGR5LCBkeCkgICAgICAgOiAwLjA7XG4gICAgdmFyIHNlZ0xlbiA9IChkeCB8fCBkeSkgPyBNYXRoLnNxcnQoZHgqZHggKyBkeSpkeSkgOiAwLjA7XG5cbiAgICAvL0FkZCBmb3VyIHZlcnRpY2VzIGZvciB0aGUgYmJveCBvZiB0aGlzIGxpbmUgc2VnbWVudFxuICAgIC8vVGhpcyBjYWxsIHNldHMgdGhlIHN0dWZmIHRoYXQncyBjb21tb24gZm9yIGFsbCBmb3VyXG4gICAgdmFyIHYgPSB0aGlzLmFkZFZlcnRleExpbmUoeDEsIHkxLCBhbmdsZSwgc2VnTGVuLCB0b3RhbERpc3RhbmNlLCBsaW5lV2lkdGgsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkLCBsaW5lVHlwZSwgYnV0dENhcFN0YXJ0LCBidXR0Q2FwRW5kKTtcblxuICAgIHRoaXMuZmluYWxpemVRdWFkKHYpO1xuICAgIHRoaXMuYWRkVG9Cb3VuZHMoeDEsIHkxKTtcbiAgICB0aGlzLmFkZFRvQm91bmRzKHgyLCB5Mik7XG59O1xuXG5WZXJ0ZXhCdWZmZXJCdWlsZGVyLnByb3RvdHlwZS5hZGRNaXRlclNlZ21lbnQgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIHRvdGFsRGlzdGFuY2UsIGxpbmVXaWR0aCwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQsIGxpbmVUeXBlLCBidXR0Q2FwU3RhcnQsIGJ1dHRDYXBFbmQpXG57XG4gICAgaWYgKHRoaXMudXNlQ29tcGFjdEJ1ZmZlcnMpIHtcbiAgICAgICAgdGhpcy5hZGRTZWdtZW50KHgyLCB5MiwgeDMsIHkzLCB0b3RhbERpc3RhbmNlLCBsaW5lV2lkdGgsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkLCBsaW5lVHlwZSwgYnV0dENhcFN0YXJ0LCBidXR0Q2FwRW5kKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubnVtTWl0ZXJMaW5lcysrO1xuXG4gICAgLy9NaXRlciBzZWdtZW50cyBuZWVkIGxhcmdlIHZlcnRleCBsYXlvdXRcbiAgICB0aGlzLmV4cGFuZFN0cmlkZSgpO1xuXG4gICAgLy9QcmltYXJ5IHNlZ21lbnQgdG8gYmUgZHJhd25cbiAgICB2YXIgZHgyID0geDMgLSB4MjtcbiAgICB2YXIgZHkyID0geTMgLSB5MjtcbiAgICB2YXIgYW5nbGUgID0gKGR4MiB8fCBkeTIpID8gTWF0aC5hdGFuMihkeTIsIGR4MikgICAgICAgICAgICA6IDAuMDtcbiAgICB2YXIgc2VnTGVuID0gKGR4MiB8fCBkeTIpID8gTWF0aC5zcXJ0KGR4MipkeDIgKyBkeTIqZHkyKSA6IDAuMDtcblxuICAgIC8vU3VwcG9ydGluZyBzZWdtZW50cyAocHJldmlvdXMgKyBuZXh0KSB0byBjYWxjdWxhdGUgbWl0ZXIgam9pbnRzXG4gICAgdmFyIGR4ID0geDIgLSB4MTtcbiAgICB2YXIgZHkgPSB5MiAtIHkxO1xuICAgIHZhciBhbmdsZVByZXYgID0gKGR4IHx8IGR5KSA/IE1hdGguYXRhbjIoZHksIGR4KSAgICAgICAgICAgIDogYW5nbGU7XG4gICAgdmFyIHNlZ0xlblByZXYgPSAoZHggfHwgZHkpID8gTWF0aC5zcXJ0KGR4KmR4ICsgZHkqZHkpICAgOiAxLjA7XG5cbiAgICB2YXIgZHgzID0geDQgLSB4MztcbiAgICB2YXIgZHkzID0geTQgLSB5MztcbiAgICB2YXIgYW5nbGVOZXh0ICA9IChkeDMgfHwgZHkzKSA/IE1hdGguYXRhbjIoZHkzLCBkeDMpICAgICAgICAgICAgOiBhbmdsZTtcbiAgICB2YXIgc2VnTGVuTmV4dCA9IChkeDMgfHwgZHkzKSA/IE1hdGguc3FydChkeDMqZHgzICsgZHkzKmR5MykgOiAxLjA7XG5cbiAgICAvLyBDb21wcmVzcyBwcmV2aW91cyBhbmQgbmV4dCBzZWcgbGVuZ3RoIHRvIGZpdCBpbnRvIG9uZSBmbG9hdCwgbG9zZXMgcHJlY2lzaW9uLlxuICAgIHZhciBwcmV2ID0gTWF0aC5mbG9vcihNYXRoLm1pbihWQkJfTUlURVJfU0VHTUVOVF9NQVgsIHNlZ0xlblByZXYpICogVkJCX01JVEVSX1NFR01FTlRfU0NBTEVfRkFDVE9SKTtcbiAgICB2YXIgbmV4dCA9IE1hdGguZmxvb3IoTWF0aC5taW4oVkJCX01JVEVSX1NFR01FTlRfTUFYLCBzZWdMZW5OZXh0KSAqIFZCQl9NSVRFUl9TRUdNRU5UX1NDQUxFX0ZBQ1RPUik7XG4gICAgdmFyIHNlZ0xlblBOID0gKG5leHQgKiBWQkJfTUlURVJfU0VHTUVOVF9DUCkgKyBwcmV2O1xuXG4gICAgLy9BZGQgZm91ciB2ZXJ0aWNlcyBmb3IgdGhlIGJib3ggb2YgdGhpcyBsaW5lIHNlZ21lbnRcbiAgICAvL1RoaXMgY2FsbCBzZXRzIHRoZSBzdHVmZiB0aGF0J3MgY29tbW9uIGZvciBhbGwgZm91clxuICAgIHZhciB2ID0gdGhpcy5hZGRWZXJ0ZXhNaXRlckxpbmUoeDIsIHkyLCBhbmdsZSwgYW5nbGVQcmV2LCBhbmdsZU5leHQsIHNlZ0xlbiwgc2VnTGVuUE4sIGxpbmVXaWR0aCwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQsIGxpbmVUeXBlKTtcblxuICAgIHRoaXMuZmluYWxpemVRdWFkKHYpO1xuICAgIHRoaXMuYWRkVG9Cb3VuZHMoeDIsIHkyKTtcbiAgICB0aGlzLmFkZFRvQm91bmRzKHgzLCB5Myk7XG59O1xuXG5cbi8vQ3JlYXRlcyBhIG5vbi1pbmRleGVkIHRyaWFuZ2xlIGdlb21ldHJ5ICh0cmlhbmdsZSB2ZXJ0ZXggY29vcmRzIHN0b3JlZCBpbiBzaW5nbGUgdmVydGV4IHN0cnVjdHVyZSlcblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLmFkZFRyaWFuZ2xlR2VvbSA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkKVxue1xuICAgIHRoaXMubnVtVHJpYW5nbGVHZW9tcysrO1xuXG4gICAgdmFyIHYgPSB0aGlzLmFkZFZlcnRleFRyaWFuZ2xlR2VvbSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCk7XG5cbiAgICB0aGlzLmZpbmFsaXplUXVhZCh2KTtcbiAgICB0aGlzLmFkZFRvQm91bmRzKHgxLCB5MSk7XG4gICAgdGhpcy5hZGRUb0JvdW5kcyh4MiwgeTIpO1xuICAgIHRoaXMuYWRkVG9Cb3VuZHMoeDMsIHkzKTtcbn07XG5cblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLmFkZEFyYyA9IGZ1bmN0aW9uKGN4LCBjeSwgc3RhcnQsIGVuZCwgbWFqb3IsIG1pbm9yLCB0aWx0LCBsaW5lV2lkdGgsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkKVxue1xuICAgIGlmKG1ham9yID09IG1pbm9yKSAge1xuICAgICAgICB0aGlzLm51bUNpcmN1bGFycysrO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubnVtRWxsaXB0aWNhbHMrKztcblxuICAgICAgICAvL0VsbGlwdGljYWxzIG5lZWQgbGFyZ2UgdmVydGV4IGxheW91dFxuICAgICAgICB0aGlzLmV4cGFuZFN0cmlkZSgpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kLCB3aGVuIHRoZSBjaXJjdWxhciBhcmMgaGFzIHJvdGF0aW9uLCB0aGUgZXh0cmFjdG9yIGNhbm5vdCBoYW5kbGUgaXQuXG4gICAgLy8gQWZ0ZXIgdGhlIGZpeCBpcyBkZXBsb3llZCBpbiBleHRyYWN0b3IsIHRoaXMgY2FuIGJlIHJlbW92ZWQuXG4gICAgdmFyIHJlc3VsdCA9IGZpeFVnbHlBcmMoc3RhcnQsIGVuZCk7XG4gICAgc3RhcnQgPSByZXN1bHQuc3RhcnQ7XG4gICAgZW5kICAgPSByZXN1bHQuZW5kO1xuXG4gICAgLy9JZiBib3RoIHN0YXJ0IGFuZCBlbmQgYW5nbGVzIGFyZSBleGFjdGx5IDAsIGl0J3MgYSBjb21wbGV0ZSBlbGxpcHNlL2NpcmNsZVxuICAgIC8vVGhpcyBpcyB3b3JraW5nIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgRjJEIHdyaXRlciwgd2hlcmUgYW4gZm1vZCBvcGVyYXRpb24gd2lsbCBwb3RlbnRpYWxseS5cbiAgICAvL2NvbnZlcnQgMnBpIHRvIDAuXG4gICAgaWYgKHN0YXJ0ID09IDAgJiYgZW5kID09IDApXG4gICAgICAgIGVuZCA9IFRBVTtcblxuICAgIC8vQWRkIHR3byB6ZXJvIGxlbmd0aCBzZWdtZW50cyBhcyByb3VuZCBjYXBzIGF0IHRoZSBlbmQgcG9pbnRzXG4gICAge1xuICAgICAgICAvL0lmIGl0J3MgYSBmdWxsIGVsbGlwc2UsIHRoZW4gd2UgZG9uJ3QgbmVlZCBjYXBzXG4gICAgICAgIHZhciByYW5nZSA9IE1hdGguYWJzKHN0YXJ0IC0gZW5kKTtcbiAgICAgICAgaWYgKHJhbmdlID4gMC4wMDAxICYmIE1hdGguYWJzKHJhbmdlIC0gVEFVKSA+IDAuMDAwMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHN4ID0gY3ggKyBtYWpvciAqIE1hdGguY29zKHN0YXJ0KTtcbiAgICAgICAgICAgIHZhciBzeSA9IGN5ICsgbWlub3IgKiBNYXRoLnNpbihzdGFydCk7XG4gICAgICAgICAgICB0aGlzLmFkZFNlZ21lbnQoc3gsIHN5LCBzeCwgc3ksIDAsIGxpbmVXaWR0aCwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQpO1xuXG4gICAgICAgICAgICB2YXIgZXggPSBjeCArIG1ham9yICogTWF0aC5jb3MoZW5kKTtcbiAgICAgICAgICAgIHZhciBleSA9IGN5ICsgbWlub3IgKiBNYXRoLnNpbihlbmQpO1xuICAgICAgICAgICAgdGhpcy5hZGRTZWdtZW50KGV4LCBleSwgZXgsIGV5LCAwLCBsaW5lV2lkdGgsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkKTtcblxuICAgICAgICAgICAgLy9UT0RPOiBhbHNvIG11c3QgYWRkIGFsbCB0aGUgdmVydGljZXMgYXQgYWxsIG11bHRpcGxlcyBvZiBQSS8yIGluIHRoZSBzdGFydC1lbmQgcmFuZ2UgdG8gZ2V0IGV4YWN0IGJvdW5kc1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hZGRUb0JvdW5kcyhjeCAtIG1ham9yLCBjeSAtIG1pbm9yKTtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9Cb3VuZHMoY3ggKyBtYWpvciwgY3kgKyBtaW5vcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlIC8gZWxsaXBzZSBhcyBhIHNpbmdsZSB0cmFuc3BhcmVudCBkb3QgLSBTbyBpdCB3aWwgYmUgc25hcHBhYmxlLlxuICAgICAgICBjb25zdCBoaWRkZW5Db2xvciA9IDB4MDFmZmZmZmY7IC8vIE5vdGUgdGhhdCBsaW5lU2hhZGVyIGRpc2NhcmRzIGZ1bGx5IHRyYW5zcGFyZW50IGZyYWdtZW50cy4gVGhlcmVmb3JlLCB3ZSB1c2UgYSB3aGl0ZSBoZXJlIHdpdGggdmVyeSBzbWFsbCwgYnV0IG5vbnplcm8gYWxwaGEuXG4gICAgICAgIHZhciBjID0gdGhpcy5hZGRWZXJ0ZXhMaW5lKGN4LCBjeSwgMCwgMC4wMDAxLCAwLCAwLCBoaWRkZW5Db2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCk7XG4gICAgICAgIHRoaXMuZmluYWxpemVRdWFkKGMpO1xuICAgIH1cblxuICAgIHZhciB2ID0gdGhpcy5hZGRWZXJ0ZXhBcmMoY3gsIGN5LCBzdGFydCwgZW5kLCBtYWpvciwgbWlub3IsIHRpbHQsIGxpbmVXaWR0aCwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQpO1xuXG4gICAgdGhpcy5maW5hbGl6ZVF1YWQodik7XG5cbiAgICAvL1Rlc3RpbmcgY2Fwc1xuICAgIC8vSWYgaXQncyBhIGZ1bGwgZWxsaXBzZSwgdGhlbiB3ZSBkb24ndCBuZWVkIGNhcHNcbiAgICAvLyBsZXQgcmFuZ2UgPSBNYXRoLmFicyhzdGFydCAtIGVuZCk7XG4gICAgLy8gaWYgKE1hdGguYWJzKHJhbmdlIC0gVEFVKSA+IDAuMDAwMSlcbiAgICAvLyB7XG4gICAgLy8gICAgIGxldCBzeCA9IGN4ICsgbWFqb3IgKiBNYXRoLmNvcyhzdGFydCk7XG4gICAgLy8gICAgIGxldCBzeSA9IGN5ICsgbWlub3IgKiBNYXRoLnNpbihzdGFydCk7XG4gICAgLy8gICAgIHRoaXMuYWRkU2VnbWVudChzeCwgc3ksIHN4LCBzeSwgMCwgbGluZVdpZHRoLCAweGZmMDBmZmZmLCBkYklkLCBsYXllcklkLCB2cElkKTtcblxuICAgIC8vICAgICBsZXQgZXggPSBjeCArIG1ham9yICogTWF0aC5jb3MoZW5kKTtcbiAgICAvLyAgICAgbGV0IGV5ID0gY3kgKyBtaW5vciAqIE1hdGguc2luKGVuZCk7XG4gICAgLy8gICAgIHRoaXMuYWRkU2VnbWVudChleCwgZXksIGV4LCBleSwgMCwgbGluZVdpZHRoLCAweGZmMDBmZmZmLCBkYklkLCBsYXllcklkLCB2cElkKTtcbiAgICAvLyB9XG59O1xuXG5cblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLmFkZFRleHR1cmVkUXVhZCA9IGZ1bmN0aW9uKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uLCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZClcbntcbiAgICAvL0hlaWdodCBpcyBzcGVjaWZpZWQgdXNpbmcgdGhlIGxpbmUgd2VpZ2h0IGZpZWxkLlxuICAgIC8vVGhpcyB3aWxsIHJlc3VsdCBpbiBoZWlnaHQgYmVpbmcgY2xhbXBlZCB0byBhdCBsZWFzdCBvbmUgcGl4ZWxcbiAgICAvL2J1dCB0aGF0J3Mgb2sgKHplcm8gaGVpZ2h0IGZvciBhbiBpbWFnZSB3b3VsZCBiZSByYXJlKS5cbiAgICB2YXIgdiA9IHRoaXMuYWRkVmVydGV4VGV4UXVhZChjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbiwgY29sb3IsIGRiSWQsIGxheWVySWQsIHZwSWQpO1xuXG4gICAgdGhpcy5maW5hbGl6ZVF1YWQodik7XG5cbiAgICB2YXIgY29zID0gMC41ICogTWF0aC5jb3Mocm90YXRpb24pO1xuICAgIHZhciBzaW4gPSAwLjUgKiBNYXRoLnNpbihyb3RhdGlvbik7XG4gICAgdmFyIHcgPSBNYXRoLmFicyh3aWR0aCAqIGNvcykgKyBNYXRoLmFicyhoZWlnaHQgKiBzaW4pO1xuICAgIHZhciBoID0gTWF0aC5hYnMod2lkdGggKiBzaW4pICsgTWF0aC5hYnMoaGVpZ2h0ICogY29zKTtcbiAgICB0aGlzLmFkZFRvQm91bmRzKGNlbnRlclggLSB3LCBjZW50ZXJZIC0gaCk7XG4gICAgdGhpcy5hZGRUb0JvdW5kcyhjZW50ZXJYICsgdywgY2VudGVyWSArIGgpO1xufTtcblxuVmVydGV4QnVmZmVyQnVpbGRlci5wcm90b3R5cGUuYWRkVmVydGV4SW1hZ2VQb2x5dHJpYW5nbGUgPSBmdW5jdGlvbih4LCB5LCB1LCB2LCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCkge1xuICAgIHJldHVybiB0aGlzLmFkZFZlcnRleFRleFBvbHl0cmlhbmdsZSh4LCB5LCB1LCB2LCBjb2xvciwgZGJJZCwgbGF5ZXJJZCwgdnBJZCwgVkJCX0dUX1RFWF9UUklBTkdMRV9JTkRFWEVEKTtcbn07XG5cblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLmFkZFZlcnRleFRleFBvbHl0cmlhbmdsZSA9IGZ1bmN0aW9uKHgsIHksIHUsIHYsIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkLCB0eXBlKSB7XG4gICAgaWYgKHRoaXMudXNlSW5zdGFuY2luZylcbiAgICAgICAgcmV0dXJuOyAvL25vdCBzdXBwb3J0ZWQgaWYgaW5zdGFuY2luZyBpcyB1c2VkLlxuXG4gICAgbGV0IHZpID0gdGhpcy52Y291bnQ7XG4gICAgbGV0IHZiZiA9IHRoaXMudmJmO1xuICAgIHRoaXMuYWRkVmVydGV4KHgsIHksIGNvbG9yLCBkYklkLCBsYXllcklkLCB2cElkLCB0eXBlKTtcblxuICAgIC8vIHB1dCB0aGUgVVYgZGF0YSBpbnRvIHRoZSBmaWVsZHMyIGF0dHJpYnV0ZVxuICAgIHZiZlt2aSAqIHRoaXMuc3RyaWRlICsgMl0gPSB1O1xuICAgIHZiZlt2aSAqIHRoaXMuc3RyaWRlICsgM10gPSB2O1xuXG4gICAgdGhpcy5hZGRUb0JvdW5kcyh4LCB5KTtcbn07XG5cblxuVmVydGV4QnVmZmVyQnVpbGRlci5wcm90b3R5cGUuaXNGdWxsID0gZnVuY3Rpb24oYWRkQ291bnQpXG57XG4gICAgYWRkQ291bnQgPSBhZGRDb3VudCB8fCAzO1xuICAgIHZhciBtdWx0ID0gdGhpcy51c2VJbnN0YW5jaW5nID8gNCA6IDE7XG5cbiAgICByZXR1cm4gKHRoaXMudmNvdW50ICogbXVsdCArIGFkZENvdW50ID4gdGhpcy5GVUxMX0NPVU5UKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGVyZSBhcmUgaW52YXJpYW50IG1lbWViZXJzIGluIHRoZSB2ZXJ0ZXggbGF5b3V0LFxuICogd2hpY2ggY2FuIGJlIG1vdmVkIG91dCB0byBzaGFkZXIgdW5pZm9ybXMgdG8gc2F2ZSBzcGFjZS5cbiAqIERldGVybWluZXMgaWYgdWludDE2IGNhbiBiZSB1c2VkIHRvIHN0b3JlIHBvc2l0aW9ucyBkYXRhXG4gKiBAcmV0dXJucyB7TWVzaERhdGF9XG4gKi9cblZlcnRleEJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLm1ha2VDb21wYWN0VmVydGV4TGF5b3V0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgY29sb3JLZXlzID0gT2JqZWN0LmtleXModGhpcy5jb2xvcnMpO1xuICAgIHZhciBkYklkc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLmRiSWRzKTtcblxuICAgIC8vIGlmICh0aGlzLmNoYW5nZVRyYWNraW5nLmdlb21UeXBlID09PSBWQkJfR1RfTElORV9TRUdNRU5UICYmICF0aGlzLmNoYW5nZVRyYWNraW5nLmdlb21UeXBlVmFyaWVzKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhcIlZlcnRleCBidWZmZXIgb25seSBoYXMgbGluZXNcIik7XG4gICAgLy8gfVxuXG4gICAgLy8gaWYgKHRoaXMuY2hhbmdlVHJhY2tpbmcuY29sb3IgPT09IFZCQl9HVF9MSU5FX1NFR01FTlQgJiYgIXRoaXMuY2hhbmdlVHJhY2tpbmcuY29sb3JWYXJpZXMpIHtcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJWZXJ0ZXggYnVmZmVyIGhhcyBpbnZhcmlhbnQgY29sb3JcIik7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJOdW0gY29sb3JzOlwiLCBjb2xvcktleXMubGVuZ3RoKTtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAoIXRoaXMuY2hhbmdlVHJhY2tpbmcudmlld3BvcnRJZFZhcmllcykge1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIlZlcnRleCBidWZmZXIgaGFzIGludmFyaWFudCB2aWV3cG9ydElkXCIpO1xuICAgIC8vIH1cblxuICAgIC8vIGlmICghdGhpcy5jaGFuZ2VUcmFja2luZy5sYXllcklkVmFyaWVzKSB7XG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiVmVydGV4IGJ1ZmZlciBoYXMgaW52YXJpYW50IGxheWVySWRcIik7XG4gICAgLy8gfVxuXG4gICAgLy8gaWYgKCF0aGlzLmNoYW5nZVRyYWNraW5nLmRiSWRWYXJpZXMpIHtcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJWZXJ0ZXggYnVmZmVyIGhhcyBpbnZhcmlhbnQgZGJJZFwiKTtcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIk51bSBkYklkczpcIiwgZGJJZHNLZXlzLmxlbmd0aCk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHRoaXMuc3RyaWRlICE9PSAxMClcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAvL2NyZWF0ZSB0aGUgY29sb3IvZGJJZCBpbmRleCB0ZXh0dXJlXG4gICAgdmFyIHRleExlbiA9IGNvbG9yS2V5cy5sZW5ndGggKyBkYklkc0tleXMubGVuZ3RoO1xuXG4gICAgaWYgKGNvbG9yS2V5cy5sZW5ndGggKyBkYklkc0tleXMubGVuZ3RoID4gNjU1MzYpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgdmFyIHRleERhdGEgPSBuZXcgSW50MzJBcnJheSh0ZXhMZW4rMSk7XG4gICAgdGV4RGF0YVswXSA9IDA7XG4gICAgdmFyIGNvdW50ID0gMTtcbiAgICBmb3IgKGxldCBpPTA7IGk8Y29sb3JLZXlzLmxlbmd0aDsgaSsrLCBjb3VudCsrKSB7XG4gICAgICAgIHRleERhdGFbY291bnRdID0gcGFyc2VJbnQoY29sb3JLZXlzW2ldKTtcbiAgICAgICAgdGhpcy5jb2xvcnNbY29sb3JLZXlzW2ldXSA9IGNvdW50O1xuICAgIH1cbiAgICBmb3IgKGxldCBpPTA7IGk8ZGJJZHNLZXlzLmxlbmd0aDsgaSsrLCBjb3VudCsrKSB7XG4gICAgICAgIHRleERhdGFbY291bnRdID0gcGFyc2VJbnQoZGJJZHNLZXlzW2ldKTtcbiAgICAgICAgdGhpcy5kYklkc1tkYklkc0tleXNbaV1dID0gY291bnQ7XG4gICAgfVxuXG4gICAgdmFyIGNvbXBhY3RTdHJpZGUgPSA2O1xuXG4gICAgdmFyIHZiICA9IG5ldyBBcnJheUJ1ZmZlcihjb21wYWN0U3RyaWRlICogNCAqIHRoaXMudmNvdW50KTtcbiAgICB2YXIgdmJpID0gbmV3IEludDMyQXJyYXkodmIpO1xuICAgIHZhciB2YnMgPSBuZXcgVWludDE2QXJyYXkodmIpO1xuXG4gICAgdmFyIHN4ID0gKHRoaXMubWF4eCAtIHRoaXMubWlueCkgfHwgMTtcbiAgICB2YXIgc3kgPSAodGhpcy5tYXh5IC0gdGhpcy5taW55KSB8fCAxO1xuICAgIHZhciBveCA9IHRoaXMubWlueDtcbiAgICB2YXIgb3kgPSB0aGlzLm1pbnk7XG4gICAgdmFyIHNzID0gTWF0aC5tYXgoc3gsIHN5KTtcblxuICAgIGZ1bmN0aW9uIHR4KHgpIHtcbiAgICAgICAgcmV0dXJuIDAgfCBNYXRoLnJvdW5kKCgoKHggLSBveCkgLyBzeCkgKiA2NTUzNSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHR5KHkpIHtcbiAgICAgICAgcmV0dXJuIDAgfCBNYXRoLnJvdW5kKCgoKHkgLSBveSkgLyBzeSkgKiA2NTUzNSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRzKHgpIHtcbiAgICAgICAgcmV0dXJuIDAgfCBNYXRoLnJvdW5kKCgoeCAvIHNzKSAqIDY1NTM1KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5pdCh4KSB7XG4gICAgICAgIHJldHVybiAwIHwgKHggKiA2NTUzNSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVdlaWdodCh4KSB7XG4gICAgICAgIGlmICh4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIDMyNzY4ICsgTWF0aC5taW4oMS4wLCAoLXggLyAxMDI0KSkgKiAzMjc2NztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERvbid0IGFsbG93IG5vbi16ZXJvIGxpbmUgd2VpZ2h0cyB0byBiZWNvbWUgMCBiZWNhdXNlXG4gICAgICAgICAgICAvLyBvZiB0aGUgY29tcGFjdCBidWZmZXIgZm9ybWF0LlxuICAgICAgICAgICAgcmV0dXJuIHggPyAoMCB8IE1hdGgucm91bmQoKCh4IC8gc3MpICogMzI3NjcpKSkgfHwgMSA6IHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy52Y291bnQ7IGkrKykge1xuXG4gICAgICAgIHZhciBzcmNPZmZzZXQgPSB0aGlzLnN0cmlkZSAqIGk7XG4gICAgICAgIHZhciBkc3RPZmZzZXQgPSBjb21wYWN0U3RyaWRlICogaTtcbiAgICAgICAgdmFyIHVzaG9ydE9mZnNldCA9IGRzdE9mZnNldCAqIDI7XG5cbiAgICAgICAgdmFyIGd0ID0gKHRoaXMudmJpW3NyY09mZnNldCArIFZCQl9GTEFHU19PRkZTRVRdID4+IDgpICYgMHhmZjtcblxuICAgICAgICAvL0hhbmRsZSBkYXRhIHRoYXQgdmFyaWVzIHBlciBnZW9tZXRyeSB0eXBlIGFuZCBuZWVkcyBzY2FsaW5nXG4gICAgICAgIC8vdG8gdWludDE2IHBhY2tpbmcsIGUuZy4gcG9zaXRpb25zIGFuZCBhbmdsZXNcbiAgICAgICAgc3dpdGNoIChndCkge1xuICAgICAgICAgICAgY2FzZSBWQkJfR1RfVFJJQU5HTEVfSU5ERVhFRDpcbiAgICAgICAgICAgICAgICB2YnNbdXNob3J0T2Zmc2V0ICBdID0gdHgodGhpcy52YmZbc3JjT2Zmc2V0XSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCsxXSA9IHR5KHRoaXMudmJmW3NyY09mZnNldCsxXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgVkJCX0dUX0xJTkVfU0VHTUVOVDpcbiAgICAgICAgICAgIGNhc2UgVkJCX0dUX0xJTkVfU0VHTUVOVF9DQVBQRUQ6XG4gICAgICAgICAgICBjYXNlIFZCQl9HVF9MSU5FX1NFR01FTlRfQ0FQUEVEX1NUQVJUOlxuICAgICAgICAgICAgY2FzZSBWQkJfR1RfTElORV9TRUdNRU5UX0NBUFBFRF9FTkQ6XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCAgXSA9IHR4KHRoaXMudmJmW3NyY09mZnNldF0pO1xuICAgICAgICAgICAgICAgIHZic1t1c2hvcnRPZmZzZXQrMV0gPSB0eSh0aGlzLnZiZltzcmNPZmZzZXQrMV0pO1xuICAgICAgICAgICAgICAgIHZic1t1c2hvcnRPZmZzZXQrMl0gPSB1bml0KHRoaXMudmJmW3NyY09mZnNldCsyXSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCszXSA9IHRzKHRoaXMudmJmW3NyY09mZnNldCszXSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCs0XSA9IGxpbmVXZWlnaHQodGhpcy52YmZbc3JjT2Zmc2V0KzRdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBWQkJfR1RfQVJDX0NJUkNVTEFSOlxuICAgICAgICAgICAgICAgIHZic1t1c2hvcnRPZmZzZXQgIF0gPSB0eCh0aGlzLnZiZltzcmNPZmZzZXRdKTtcbiAgICAgICAgICAgICAgICB2YnNbdXNob3J0T2Zmc2V0KzFdID0gdHkodGhpcy52YmZbc3JjT2Zmc2V0KzFdKTtcbiAgICAgICAgICAgICAgICB2YnNbdXNob3J0T2Zmc2V0KzJdID0gdW5pdCh0aGlzLnZiZltzcmNPZmZzZXQrMl0pO1xuICAgICAgICAgICAgICAgIHZic1t1c2hvcnRPZmZzZXQrM10gPSB1bml0KHRoaXMudmJmW3NyY09mZnNldCszXSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCs0XSA9IGxpbmVXZWlnaHQodGhpcy52YmZbc3JjT2Zmc2V0KzRdKTtcbiAgICAgICAgICAgICAgICB2YnNbdXNob3J0T2Zmc2V0KzVdID0gdHModGhpcy52YmZbc3JjT2Zmc2V0KzVdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBWQkJfR1RfQVJDX0VMTElQVElDQUw6XG4gICAgICAgICAgICBjYXNlIFZCQl9HVF9MSU5FX1NFR01FTlRfTUlURVI6XG4gICAgICAgICAgICAgICAgLy93aWxsIG5vdCBoYXBwZW5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBWQkJfR1RfVEVYX1FVQUQ6XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCAgXSA9IHR4KHRoaXMudmJmW3NyY09mZnNldF0pO1xuICAgICAgICAgICAgICAgIHZic1t1c2hvcnRPZmZzZXQrMV0gPSB0eSh0aGlzLnZiZltzcmNPZmZzZXQrMV0pO1xuICAgICAgICAgICAgICAgIHZic1t1c2hvcnRPZmZzZXQrMl0gPSB1bml0KHRoaXMudmJmW3NyY09mZnNldCsyXSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCszXSA9IHRzKHRoaXMudmJmW3NyY09mZnNldCszXSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCs0XSA9IHRzKHRoaXMudmJmW3NyY09mZnNldCs0XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgVkJCX0dUX09ORV9UUklBTkdMRTpcbiAgICAgICAgICAgICAgICB2YnNbdXNob3J0T2Zmc2V0ICBdID0gdHgodGhpcy52YmZbc3JjT2Zmc2V0XSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCsxXSA9IHR5KHRoaXMudmJmW3NyY09mZnNldCsxXSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCsyXSA9IHR4KHRoaXMudmJmW3NyY09mZnNldCsyXSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCszXSA9IHR5KHRoaXMudmJmW3NyY09mZnNldCszXSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCs0XSA9IHR4KHRoaXMudmJmW3NyY09mZnNldCs0XSk7XG4gICAgICAgICAgICAgICAgdmJzW3VzaG9ydE9mZnNldCs1XSA9IHR5KHRoaXMudmJmW3NyY09mZnNldCs1XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6IGNvbnNvbGUuZXJyb3IoXCJVbmtub3duIGdlb21ldHJ5IHR5cGVcIik7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9Db3B5IHRoZSBjb21tb24gZGF0YSB0byB0aGUgbmV3IG9mZnNldFxuICAgICAgICB2YnNbdXNob3J0T2Zmc2V0ICsgNl0gPSB0aGlzLmNvbG9yc1t0aGlzLnZiaVtzcmNPZmZzZXQgKyBWQkJfQ09MT1JfT0ZGU0VUXV0gfHwgMDtcbiAgICAgICAgdmJzW3VzaG9ydE9mZnNldCArIDcgXSA9IHRoaXMuZGJJZHNbdGhpcy52Ymlbc3JjT2Zmc2V0ICsgVkJCX0RCSURfT0ZGU0VUXV0gfHwgMDtcblxuICAgICAgICB2YmlbZHN0T2Zmc2V0ICsgNF0gPSB0aGlzLnZiaVtzcmNPZmZzZXQgKyBWQkJfRkxBR1NfT0ZGU0VUXTtcbiAgICAgICAgdmJpW2RzdE9mZnNldCArIDVdID0gdGhpcy52Ymlbc3JjT2Zmc2V0ICsgVkJCX0xBWUVSX1ZQX09GRlNFVF07XG4gICAgfVxuXG4gICAgdmFyIG1lc2ggPSB7fTtcblxuICAgIG1lc2gudmIgPSBuZXcgRmxvYXQzMkFycmF5KHZiKTtcbiAgICBtZXNoLnZic3RyaWRlID0gY29tcGFjdFN0cmlkZTtcblxuICAgIHZhciBkID0gdGhpcy51c2VJbnN0YW5jaW5nID8gMSA6IDA7XG5cbiAgICBtZXNoLnZibGF5b3V0ID0ge1xuICAgICAgICBcImZpZWxkczFcIiA6ICAgIHsgb2Zmc2V0OiAwLCBpdGVtU2l6ZTogMiwgYnl0ZXNQZXJJdGVtOiAyLCBkaXZpc29yOiBkLCBub3JtYWxpemVkOiB0cnVlIH0sXG4gICAgICAgIFwiZmllbGRzMlwiIDogICAgeyBvZmZzZXQ6IDEsIGl0ZW1TaXplOiA0LCBieXRlc1Blckl0ZW06IDIsIGRpdmlzb3I6IGQsIG5vcm1hbGl6ZWQ6IHRydWUgfSxcbiAgICAgICAgXCJ1dklkQ29sb3JcIjogICB7IG9mZnNldDogMywgaXRlbVNpemU6IDIsIGJ5dGVzUGVySXRlbTogMiwgZGl2aXNvcjogZCwgbm9ybWFsaXplZDogZmFsc2UgfSxcbiAgICAgICAgXCJmbGFnczRiXCI6ICAgICB7IG9mZnNldDogNCwgaXRlbVNpemU6IDQsIGJ5dGVzUGVySXRlbTogMSwgZGl2aXNvcjogZCwgbm9ybWFsaXplZDogZmFsc2UgfSxcbiAgICAgICAgXCJsYXllclZwNGJcIjogICB7IG9mZnNldDogNSwgaXRlbVNpemU6IDQsIGJ5dGVzUGVySXRlbTogMSwgZGl2aXNvcjogZCwgbm9ybWFsaXplZDogZmFsc2UgfVxuICAgIH07XG5cbiAgICBtZXNoLnVucGFja1hmb3JtID0ge3g6IHN4LCB5OiBzeSwgejogb3gsIHc6IG95IH07XG4gICAgbWVzaC50ZXhEYXRhID0gdGV4RGF0YTtcblxuICAgIHJldHVybiBtZXNoO1xufTtcblxuVmVydGV4QnVmZmVyQnVpbGRlci5wcm90b3R5cGUubWFrZVdpZGVWZXJ0ZXhMYXlvdXQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbWVzaCA9IHt9O1xuXG4gICAgbWVzaC52YiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy52Yi5zbGljZSgwLCB0aGlzLnZjb3VudCAqIHRoaXMuc3RyaWRlICogNCkpO1xuICAgIG1lc2gudmJzdHJpZGUgPSB0aGlzLnN0cmlkZTtcblxuICAgIHZhciBkID0gdGhpcy51c2VJbnN0YW5jaW5nID8gMSA6IDA7XG5cbiAgICBtZXNoLnZibGF5b3V0ID0ge1xuICAgICAgICBcImZpZWxkczFcIiA6ICAgIHsgb2Zmc2V0OiAwLCAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZTogMiwgYnl0ZXNQZXJJdGVtOiA0LCBkaXZpc29yOiBkLCBub3JtYWxpemVkOiBmYWxzZSB9LFxuICAgICAgICBcImZpZWxkczJcIiA6ICAgIHsgb2Zmc2V0OiAyLCAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZTogNCwgYnl0ZXNQZXJJdGVtOiA0LCBkaXZpc29yOiBkLCBub3JtYWxpemVkOiBmYWxzZSB9LFxuICAgICAgICBcImNvbG9yNGJcIjogICAgIHsgb2Zmc2V0OiBWQkJfQ09MT1JfT0ZGU0VULCAgICBpdGVtU2l6ZTogNCwgYnl0ZXNQZXJJdGVtOiAxLCBkaXZpc29yOiBkLCBub3JtYWxpemVkOiB0cnVlICB9LFxuICAgICAgICBcImRiSWQ0YlwiOiAgICAgIHsgb2Zmc2V0OiBWQkJfREJJRF9PRkZTRVQsICAgICBpdGVtU2l6ZTogNCwgYnl0ZXNQZXJJdGVtOiAxLCBkaXZpc29yOiBkLCBub3JtYWxpemVkOiBmYWxzZSB9LFxuICAgICAgICBcImZsYWdzNGJcIjogICAgIHsgb2Zmc2V0OiBWQkJfRkxBR1NfT0ZGU0VULCAgICBpdGVtU2l6ZTogNCwgYnl0ZXNQZXJJdGVtOiAxLCBkaXZpc29yOiBkLCBub3JtYWxpemVkOiBmYWxzZSB9LFxuICAgICAgICBcImxheWVyVnA0YlwiOiAgIHsgb2Zmc2V0OiBWQkJfTEFZRVJfVlBfT0ZGU0VULCBpdGVtU2l6ZTogNCwgYnl0ZXNQZXJJdGVtOiAxLCBkaXZpc29yOiBkLCBub3JtYWxpemVkOiBmYWxzZSB9XG4gICAgfTtcblxuICAgIC8vU2V0IHRoZSBleHBhbmRlZCB2ZXJ0ZXggbGF5b3V0IHRvIHVzZSB0aGUgbGFzdCB0d28gZmxvYXRzIGluIHRoZSBidWZmZXIuIElmIHRoZVxuICAgIC8vd2VyZSBhbGxvY2F0ZWQgdGhlbiBpdCBpcyBnb29kLiBJZiB0aGV5IHdlcmVuJ3QgaXQgb3ZlcmxhcHMgdGhlIGZsYWdzNGIgYW5kIGxheWVyVnA0YlxuICAgIC8vY2hhbm5lbHMsIGJ1dCBzaW5jZSB0aGUgZXh0cmFQYXJhbXMgd29uJ3QgYmUgdXNlZCBpbiB0aGUgc2hhZGVyIGl0IHdvbid0IG1hdHRlci5cbiAgICAvL0RvaW5nIHRoaXMgbGV0cyB0aGUgc2hhZGVyIGNvbm5lY3QgdG8gc29tZXRoaW5nIGFuZCBwcmV2ZW50cyBjcmFzaGVzIG9uIGlPUy5cbiAgICBtZXNoLnZibGF5b3V0W1wiZXh0cmFQYXJhbXNcIl0gPSB7IG9mZnNldDogdGhpcy5zdHJpZGUgLSAyLCBpdGVtU2l6ZTogMiwgYnl0ZXNQZXJJdGVtOiA0LCBkaXZpc29yOiBkLCBub3JtYWxpemVkOiBmYWxzZSB9O1xuICAgIHJldHVybiBtZXNoO1xufTtcblxuVmVydGV4QnVmZmVyQnVpbGRlci5wcm90b3R5cGUudG9NZXNoID0gZnVuY3Rpb24oKVxue1xuICAgIHZhciBtZXNoID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnVzZUNvbXBhY3RCdWZmZXJzKVxuICAgICAgICBtZXNoID0gdGhpcy5tYWtlQ29tcGFjdFZlcnRleExheW91dCgpO1xuXG4gICAgaWYgKCFtZXNoKVxuICAgICAgICBtZXNoID0gdGhpcy5tYWtlV2lkZVZlcnRleExheW91dCgpO1xuXG4gICAgaWYgKHRoaXMudXNlSW5zdGFuY2luZykge1xuICAgICAgICBtZXNoLm51bUluc3RhbmNlcyA9IHRoaXMudmNvdW50O1xuXG4gICAgICAgIC8vU2V0IHVwIHRyaXZpYWwgdmVydGV4SWQgYW5kIGluZGV4IGF0dHJpYnV0ZXNcblxuICAgICAgICB2YXIgaW5zdEZsYWdzID0gbmV3IEludDMyQXJyYXkoWyBWQkJfU0VHX1NUQVJUX1JJR0hULCBWQkJfU0VHX1NUQVJUX0xFRlQsIFZCQl9TRUdfRU5EX1JJR0hULCBWQkJfU0VHX0VORF9MRUZUIF0pO1xuICAgICAgICBtZXNoLnZibGF5b3V0Lmluc3RGbGFnczRiID0geyBvZmZzZXQ6IDAsIGl0ZW1TaXplOiA0LCBieXRlc1Blckl0ZW06IDEsIGRpdmlzb3I6IDAsIG5vcm1hbGl6ZWQ6IGZhbHNlIH07XG4gICAgICAgIG1lc2gudmJsYXlvdXQuaW5zdEZsYWdzNGIuYXJyYXkgPSBpbnN0RmxhZ3MuYnVmZmVyO1xuXG4gICAgICAgIG1lc2guaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShRVUFEX1RSSUFOR0xFX0lORElDRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc2guaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmliLmJ1ZmZlci5zbGljZSgwLCAyICogdGhpcy5pY291bnQpKTtcbiAgICB9XG5cbiAgICBtZXNoLmRiSWRzID0gdGhpcy5kYklkcztcblxuICAgIHZhciB3ICA9IHRoaXMubWF4eCAtIHRoaXMubWlueDtcbiAgICB2YXIgaCAgPSB0aGlzLm1heHkgLSB0aGlzLm1pbnk7XG4gICAgdmFyIHN6ID0gTWF0aC5tYXgodywgaCk7XG5cbiAgICBtZXNoLmJvdW5kaW5nQm94ID0ge1xuICAgICAgICBtaW46IHsgeDogdGhpcy5taW54LCB5OiB0aGlzLm1pbnksIHo6IC1zeiAqIDFlLTMgfSxcbiAgICAgICAgbWF4OiB7IHg6IHRoaXMubWF4eCwgeTogdGhpcy5tYXh5LCB6OiAgc3ogKiAxZS0zIH1cbiAgICB9O1xuXG4gICAgLy9BbHNvIGNvbXB1dGUgYSByb3VnaCBib3VuZGluZyBzcGhlcmVcbiAgICBtZXNoLmJvdW5kaW5nU3BoZXJlID0ge1xuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICAgIHg6IDAuNSAqICh0aGlzLm1pbnggKyB0aGlzLm1heHgpLFxuICAgICAgICAgICAgeTogMC41ICogKHRoaXMubWlueSArIHRoaXMubWF4eSksXG4gICAgICAgICAgICB6OiAwLjBcbiAgICAgICAgfSxcbiAgICAgICAgcmFkaXVzOiAwLjUgKiBNYXRoLnNxcnQodyp3ICsgaCpoKVxuICAgIH07XG5cbiAgICByZXR1cm4gbWVzaDtcbn07XG5cbi8vIFRoZSBmb2xsb3dpbmcgbG9naWMgYXR0ZW1wdHMgdG8gXCJmaXhcIiBpbXByZWNpc2lvbnMgaW4gYXJjIGRlZmluaXRpb25zIGludHJvZHVjZWRcbi8vIGJ5IEhlaWRpJ3MgZml4ZWQgcG9pbnQgbWF0aCwgaW4gY2FzZSB0aGF0IHRoZSBleHRyYWN0b3IgZG9lc24ndCBoYW5kbGUgaXQgY29ycmVjdGx5LlxuXG52YXIgZml4VWdseUFyYyA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKVxue1xuICAgIC8vU25hcCBjcml0aWNhbCBhbmdsZXMgZXhhY3RseVxuICAgIGZ1bmN0aW9uIHNuYXBDcml0aWNhbCgpIHtcbiAgICAgICAgZnVuY3Rpb24gZnV6enlFcXVhbHMoYSwgYikgeyByZXR1cm4gKE1hdGguYWJzKGEgLSBiKSA8IDFlLTMpOyB9XG5cbiAgICAgICAgaWYgKGZ1enp5RXF1YWxzKHN0YXJ0LCAwKSkgICBzdGFydCA9IDAuMDtcbiAgICAgICAgaWYgKGZ1enp5RXF1YWxzKGVuZCwgICAwKSkgICBlbmQgICA9IDAuMDtcbiAgICAgICAgaWYgKGZ1enp5RXF1YWxzKHN0YXJ0LCBUQVUpKSBzdGFydCA9IFRBVTtcbiAgICAgICAgaWYgKGZ1enp5RXF1YWxzKGVuZCwgICBUQVUpKSBlbmQgICA9IFRBVTtcbiAgICB9XG5cbiAgICBzbmFwQ3JpdGljYWwoKTtcblxuICAgIC8vT0ssIGluIHNvbWUgY2FzZXMgdGhlIGFuZ2xlcyBhcmUgYm90aCBvdmVyLXJvdGF0ZWQuLi5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgICAgd2hpbGUgKHN0YXJ0ID4gVEFVKSB7XG4gICAgICAgICAgICBzdGFydCAtPSBUQVU7XG4gICAgICAgICAgICBlbmQgICAtPSBUQVU7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAoZW5kID4gVEFVKSB7XG4gICAgICAgICAgICBzdGFydCAtPSBUQVU7XG4gICAgICAgICAgICBlbmQgICAtPSBUQVU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL1NuYXAgY3JpdGljYWwgYW5nbGVzIGV4YWN0bHkgLS0gYWdhaW5cbiAgICBzbmFwQ3JpdGljYWwoKTtcblxuICAgIC8vSWYgdGhlIGFyYyBjcm9zc2VzIHRoZSB4IGF4aXMsIHdlIGhhdmUgdG8gbWFrZSBpdCBjbG9ja3dpc2UuLi5cbiAgICAvL1RoaXMgaXMgYSBzaWRlIGVmZmVjdCBvZiBicmluZ2luZyBvdmVyLXJvdGF0ZWQgYXJjcyBpbiByYW5nZSBhYm92ZS5cbiAgICAvL0ZvciBleGFtcGxlIHN0YXJ0ID0gNS4wLCBlbmQgPSA3LjAgd2lsbCByZXN1bHQgaW4gc3RhcnQgPCAwIGFuZCBlbmQgPiAwLFxuICAgIC8vc28gd2UgaGF2ZSB0byBtYWtlIHN0YXJ0ID4gZW5kIGluIG9yZGVyIHRvIGluZGljYXRlIHdlIGFyZSBjcm9zc2luZyBhbmdsZSA9IDAuXG4gICAgaWYgKHN0YXJ0IDwgMCAmJiBlbmQgPiAwKSB7XG4gICAgICAgIHN0YXJ0ICs9IFRBVTtcbiAgICB9XG5cbiAgICByZXR1cm4ge3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9O1xufTtcblxuIl0sIm5hbWVzIjpbIlRBVSIsIk1hdGgiLCJQSSIsIlZCQl9HVF9UUklBTkdMRV9JTkRFWEVEIiwiVkJCX0dUX0xJTkVfU0VHTUVOVCIsIlZCQl9HVF9BUkNfQ0lSQ1VMQVIiLCJWQkJfR1RfQVJDX0VMTElQVElDQUwiLCJWQkJfR1RfVEVYX1FVQUQiLCJWQkJfR1RfT05FX1RSSUFOR0xFIiwiVkJCX0dUX01TREZfVFJJQU5HTEVfSU5ERVhFRCIsIlZCQl9HVF9URVhfVFJJQU5HTEVfSU5ERVhFRCIsIlZCQl9HVF9MSU5FX1NFR01FTlRfQ0FQUEVEIiwiVkJCX0dUX0xJTkVfU0VHTUVOVF9DQVBQRURfU1RBUlQiLCJWQkJfR1RfTElORV9TRUdNRU5UX0NBUFBFRF9FTkQiLCJWQkJfR1RfTElORV9TRUdNRU5UX01JVEVSIiwiVkJCX1NFR19TVEFSVF9SSUdIVCIsIlZCQl9TRUdfU1RBUlRfTEVGVCIsIlZCQl9TRUdfRU5EX1JJR0hUIiwiVkJCX1NFR19FTkRfTEVGVCIsIlZCQl9DT0xPUl9PRkZTRVQiLCJWQkJfREJJRF9PRkZTRVQiLCJWQkJfRkxBR1NfT0ZGU0VUIiwiVkJCX0xBWUVSX1ZQX09GRlNFVCIsIlFVQURfVFJJQU5HTEVfSU5ESUNFUyIsIlZCQl9NSVRFUl9TRUdNRU5UX1NDQUxFX0ZBQ1RPUiIsIlZCQl9NSVRFUl9TRUdNRU5UX0NQIiwiVkJCX01JVEVSX1NFR01FTlRfTUFYIiwiVmVydGV4QnVmZmVyQnVpbGRlciIsInVzZUluc3RhbmNpbmciLCJhbGxvY1NpemUiLCJmdWxsQ291bnQiLCJ1c2VDb21wYWN0QnVmZmVycyIsIk1BWF9WQ09VTlQiLCJGVUxMX0NPVU5UIiwic3RyaWRlIiwiYWxsb2NWY291bnQiLCJ2YiIsIkFycmF5QnVmZmVyIiwidmJmIiwiRmxvYXQzMkFycmF5IiwidmJpIiwiSW50MzJBcnJheSIsImliIiwiVWludDE2QXJyYXkiLCJtaW5MaW5lV2lkdGgiLCJOdW1iZXIiLCJNQVhfVkFMVUUiLCJyZXNldCIsInByb3RvdHlwZSIsInZjb3VudCIsImljb3VudCIsIm1pbngiLCJtaW55IiwiSW5maW5pdHkiLCJtYXh4IiwibWF4eSIsImRiSWRzIiwibGFzdERiSWQiLCJjb2xvcnMiLCJudW1FbGxpcHRpY2FscyIsIm51bUNpcmN1bGFycyIsIm51bVRyaWFuZ2xlR2VvbXMiLCJudW1NaXRlckxpbmVzIiwiaGFzTGluZVN0eWxlcyIsImNoYW5nZVRyYWNraW5nIiwiZXhwYW5kU3RyaWRlIiwiZXhwYW5kQnkiLCJuc3RyaWRlIiwibnZiIiwic3JjIiwiVWludDhBcnJheSIsImRzdCIsImkiLCJpRW5kIiwib3MiLCJvZCIsImoiLCJhZGRUb0JvdW5kcyIsIngiLCJ5IiwiX3RvSW50MzIiLCJ0b0ludDMyIiwiYyIsInRyYWNrQ2hhbmdlcyIsImdlb21UeXBlIiwiY29sb3IiLCJkYklkIiwibGF5ZXJJZCIsInZwSWQiLCJsaW5lUGF0dGVybiIsImN0IiwiY2hlY2tPbmUiLCJ3aGljaEF0dHIiLCJ2YWwiLCJ1bmRlZmluZWQiLCJzZXRDb21tb25WZXJ0ZXhBdHRyaWJzIiwib2Zmc2V0IiwidmVydGV4SWQiLCJhZGRWZXJ0ZXhUcmlhbmdsZUdlb20iLCJ4MSIsInkxIiwieDIiLCJ5MiIsIngzIiwieTMiLCJ2aSIsInJlcGVhdCIsImFkZFZlcnRleExpbmUiLCJhbmdsZSIsImRpc3RhbmNlQWxvbmciLCJ0b3RhbERpc3RhbmNlIiwibGluZVdpZHRoIiwibGluZVR5cGUiLCJidXR0Q2FwU3RhcnQiLCJidXR0Q2FwRW5kIiwibWluIiwiYWRkVmVydGV4TWl0ZXJMaW5lIiwiYW5nbGVQcmV2IiwiYW5nbGVOZXh0IiwiZGlzdGFuY2VBbG9uZ1BOIiwiYWRkVmVydGV4VGV4UXVhZCIsImNlbnRlclgiLCJjZW50ZXJZIiwid2lkdGgiLCJoZWlnaHQiLCJyb3RhdGlvbiIsImFkZFZlcnRleEFyYyIsInN0YXJ0QW5nbGUiLCJlbmRBbmdsZSIsIm1ham9yIiwibWlub3IiLCJ0aWx0IiwiYWRkVmVydGV4IiwiZmxhZyIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFkZFZlcnRleFBvbHl0cmlhbmdsZSIsImFkZFZlcnRleE1TREZQb2x5dHJpYW5nbGUiLCJ1IiwidiIsImFkZFZlcnRleFRleFBvbHl0cmlhbmdsZSIsImFkZEluZGljZXMiLCJpbmRpY2VzIiwidmluZGV4IiwiaWkiLCJpYm5ldyIsIm1heCIsImZpbmFsaXplUXVhZCIsImFkZFNlZ21lbnQiLCJkeCIsImR5IiwiYXRhbjIiLCJzZWdMZW4iLCJzcXJ0IiwiYWRkTWl0ZXJTZWdtZW50IiwieDQiLCJ5NCIsImR4MiIsImR5MiIsInNlZ0xlblByZXYiLCJkeDMiLCJkeTMiLCJzZWdMZW5OZXh0IiwicHJldiIsImZsb29yIiwibmV4dCIsInNlZ0xlblBOIiwiYWRkVHJpYW5nbGVHZW9tIiwiYWRkQXJjIiwiY3giLCJjeSIsInN0YXJ0IiwiZW5kIiwicmVzdWx0IiwiZml4VWdseUFyYyIsInJhbmdlIiwiYWJzIiwic3giLCJjb3MiLCJzeSIsInNpbiIsImV4IiwiZXkiLCJoaWRkZW5Db2xvciIsImFkZFRleHR1cmVkUXVhZCIsInciLCJoIiwiYWRkVmVydGV4SW1hZ2VQb2x5dHJpYW5nbGUiLCJ0eXBlIiwiaXNGdWxsIiwiYWRkQ291bnQiLCJtdWx0IiwibWFrZUNvbXBhY3RWZXJ0ZXhMYXlvdXQiLCJjb2xvcktleXMiLCJPYmplY3QiLCJrZXlzIiwiZGJJZHNLZXlzIiwidGV4TGVuIiwidGV4RGF0YSIsImNvdW50IiwicGFyc2VJbnQiLCJjb21wYWN0U3RyaWRlIiwidmJzIiwib3giLCJveSIsInNzIiwidHgiLCJyb3VuZCIsInR5IiwidHMiLCJ1bml0IiwibGluZVdlaWdodCIsInNyY09mZnNldCIsImRzdE9mZnNldCIsInVzaG9ydE9mZnNldCIsImd0IiwiY29uc29sZSIsImVycm9yIiwibWVzaCIsInZic3RyaWRlIiwiZCIsInZibGF5b3V0IiwiaXRlbVNpemUiLCJieXRlc1Blckl0ZW0iLCJkaXZpc29yIiwibm9ybWFsaXplZCIsInVucGFja1hmb3JtIiwieiIsIm1ha2VXaWRlVmVydGV4TGF5b3V0Iiwic2xpY2UiLCJ0b01lc2giLCJudW1JbnN0YW5jZXMiLCJpbnN0RmxhZ3MiLCJpbnN0RmxhZ3M0YiIsImFycmF5IiwiYnVmZmVyIiwic3oiLCJib3VuZGluZ0JveCIsImJvdW5kaW5nU3BoZXJlIiwiY2VudGVyIiwicmFkaXVzIiwic25hcENyaXRpY2FsIiwiZnV6enlFcXVhbHMiLCJhIiwiYiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/VertexBufferBuilder.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/common/Viewpoints.js": /*!*****************************************************!*\ !*** ./src/file-loaders/lmvtk/common/Viewpoints.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readViewpointDefinition: () => (/* binding */ readViewpointDefinition)\n/* harmony export */ });\n/* harmony import */ var _svf_Cameras__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../svf/Cameras */ \"./src/file-loaders/lmvtk/svf/Cameras.js\");\n/* harmony import */ var _SvfPlacementUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SvfPlacementUtils */ \"./src/file-loaders/lmvtk/common/SvfPlacementUtils.js\");\n\n\n\"use strict\";\n\nconst ViewpointParts = {\n VP_Camera: 1,\n VP_CameraTransform: 2,\n VP_RenderMode: 4,\n VP_PrimitiveDisplayFlags: 8,\n VP_ClipPlanes: 16,\n VP_OverrideSet: 32\n};\n\nfunction readViewpointDefinition(pfr, camPfr, entry) {\n const tse = pfr.seekToEntry(entry);\n if (!tse)\n return null;\n\n const def = {};\n const parts = pfr.readVarint();\n\n if (parts & ViewpointParts.VP_Camera) {\n def.cameraEntry = pfr.readVarint();\n const inst = { definition: def.cameraEntry };\n def.camera = (0,_svf_Cameras__WEBPACK_IMPORTED_MODULE_0__.readCameraDefinition)(camPfr, inst);\n }\n\n if (parts & ViewpointParts.VP_CameraTransform) {\n def.cameraTransform = pfr.readTransform();\n if (def.camera && def.cameraTransform) {\n (0,_SvfPlacementUtils__WEBPACK_IMPORTED_MODULE_1__.transformCameraData)(def.camera, def.cameraTransform);\n }\n }\n\n if (parts & ViewpointParts.VP_RenderMode) {\n def.renderMode = pfr.readU8();\n }\n\n if (parts & ViewpointParts.VP_PrimitiveDisplayFlags) {\n def.primitiveDisplayFlags = pfr.readU8();\n }\n\n if (parts & ViewpointParts.VP_OverrideSet) {\n def.overrideSet = pfr.readVarint();\n }\n\n if (parts & ViewpointParts.VP_ClipPlanes) {\n def.clipPlaneMode = pfr.readU8();\n if (def.clipPlaneMode === 0) {// Planes\n def.sectionCount = pfr.readU8();\n def.clipData = {};\n def.sectionPlane = [];\n for (let i = 0; i < def.sectionCount; i++) {\n const normal=O bject.assign({}, pfr.readVector3f());\n const distance=p fr.readF64();\n def.sectionPlane.push(-normal.x, -normal.y, -normal.z, distance);\n }\n } else {// Box\n def.clipData={ };\n const min=O bject.assign({}, pfr.readVector3d());\n const max=O bject.assign({}, pfr.readVector3d());\n const rotationQuat=O bject.assign({}, pfr.readQuaternionf());\n def.sectionBox={ min, max };\n def.sectionBoxTransform=r otationQuat;\n def.isFromViewpoint=t rue;\n }\n }\n\n return def;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9WaWV3cG9pbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFzRDtBQUNJO0FBQzFELFlBQVk7O0FBRVosTUFBTUUsY0FBYyxHQUFHO0VBQ25CQyxTQUFTLEVBQUUsQ0FBQztFQUNaQyxrQkFBa0IsRUFBRSxDQUFDO0VBQ3JCQyxhQUFhLEVBQUUsQ0FBQztFQUNoQkMsd0JBQXdCLEVBQUUsQ0FBQztFQUMzQkMsYUFBYSxFQUFFLEVBQUU7RUFDakJDLGNBQWMsRUFBRTtBQUNwQixDQUFDOztBQUVNLFNBQVNDLHVCQUF1QkEsQ0FBQ0MsR0FBRyxFQUFFQyxNQUFNLEVBQUVDLEtBQUssRUFBRTtFQUN4RCxNQUFNQyxHQUFHLEdBQUdILEdBQUcsQ0FBQ0ksV0FBVyxDQUFDRixLQUFLLENBQUM7RUFDbEMsSUFBSSxDQUFDQyxHQUFHO0VBQ0osT0FBTyxJQUFJOztFQUVmLE1BQU1FLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDZCxNQUFNQyxLQUFLLEdBQUdOLEdBQUcsQ0FBQ08sVUFBVSxDQUFDLENBQUM7O0VBRTlCLElBQUlELEtBQUssR0FBR2QsY0FBYyxDQUFDQyxTQUFTLEVBQUU7SUFDbENZLEdBQUcsQ0FBQ0csV0FBVyxHQUFHUixHQUFHLENBQUNPLFVBQVUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU1FLElBQUksR0FBRyxFQUFFQyxVQUFVLEVBQUdMLEdBQUcsQ0FBQ0csV0FBVyxDQUFDLENBQUM7SUFDN0NILEdBQUcsQ0FBQ00sTUFBTSxHQUFHckIsa0VBQW9CLENBQUNXLE1BQU0sRUFBRVEsSUFBSSxDQUFDO0VBQ25EOztFQUVBLElBQUlILEtBQUssR0FBR2QsY0FBYyxDQUFDRSxrQkFBa0IsRUFBRTtJQUMzQ1csR0FBRyxDQUFDTyxlQUFlLEdBQUdaLEdBQUcsQ0FBQ2EsYUFBYSxDQUFDLENBQUM7SUFDekMsSUFBR1IsR0FBRyxDQUFDTSxNQUFNLElBQUlOLEdBQUcsQ0FBQ08sZUFBZSxFQUFFO01BQ2xDckIsdUVBQW1CLENBQUNjLEdBQUcsQ0FBQ00sTUFBTSxFQUFFTixHQUFHLENBQUNPLGVBQWUsQ0FBQztJQUN4RDtFQUNKOztFQUVBLElBQUlOLEtBQUssR0FBR2QsY0FBYyxDQUFDRyxhQUFhLEVBQUU7SUFDdENVLEdBQUcsQ0FBQ1MsVUFBVSxHQUFHZCxHQUFHLENBQUNlLE1BQU0sQ0FBQyxDQUFDO0VBQ2pDOztFQUVBLElBQUlULEtBQUssR0FBR2QsY0FBYyxDQUFDSSx3QkFBd0IsRUFBRTtJQUNqRFMsR0FBRyxDQUFDVyxxQkFBcUIsR0FBR2hCLEdBQUcsQ0FBQ2UsTUFBTSxDQUFDLENBQUM7RUFDNUM7O0VBRUEsSUFBSVQsS0FBSyxHQUFHZCxjQUFjLENBQUNNLGNBQWMsRUFBRTtJQUN2Q08sR0FBRyxDQUFDWSxXQUFXLEdBQUdqQixHQUFHLENBQUNPLFVBQVUsQ0FBQyxDQUFDO0VBQ3RDOztFQUVBLElBQUlELEtBQUssR0FBR2QsY0FBYyxDQUFDSyxhQUFhLEVBQUU7SUFDdENRLEdBQUcsQ0FBQ2EsYUFBYSxHQUFHbEIsR0FBRyxDQUFDZSxNQUFNLENBQUMsQ0FBQztJQUNoQyxJQUFJVixHQUFHLENBQUNhLGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBRTtNQUMzQmIsR0FBRyxDQUFDYyxZQUFZLEdBQUduQixHQUFHLENBQUNlLE1BQU0sQ0FBQyxDQUFDO01BQy9CVixHQUFHLENBQUNlLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDakJmLEdBQUcsQ0FBQ2dCLFlBQVksR0FBRyxFQUFFO01BQ3JCLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHakIsR0FBRyxDQUFDYyxZQUFZLEVBQUVHLENBQUMsRUFBRyxFQUFFO1FBQ3hDLE1BQU1DLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUV6QixHQUFHLENBQUMwQixZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU1DLFFBQVEsR0FBRzNCLEdBQUcsQ0FBQzRCLE9BQU8sQ0FBQyxDQUFDO1FBQzlCdkIsR0FBRyxDQUFDZ0IsWUFBWSxDQUFDUSxJQUFJLENBQUMsQ0FBQ04sTUFBTSxDQUFDTyxDQUFDLEVBQUUsQ0FBQ1AsTUFBTSxDQUFDUSxDQUFDLEVBQUUsQ0FBQ1IsTUFBTSxDQUFDUyxDQUFDLEVBQUVMLFFBQVEsQ0FBQztNQUNwRTtJQUNKLENBQUMsTUFBTSxDQUFFO01BQ0x0QixHQUFHLENBQUNlLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDakIsTUFBTWEsR0FBRyxHQUFHVCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRXpCLEdBQUcsQ0FBQ2tDLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDakQsTUFBTUMsR0FBRyxHQUFHWCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRXpCLEdBQUcsQ0FBQ2tDLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDakQsTUFBTUUsWUFBWSxHQUFHWixNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRXpCLEdBQUcsQ0FBQ3FDLGVBQWUsQ0FBQyxDQUFDLENBQUM7TUFDN0RoQyxHQUFHLENBQUNpQyxVQUFVLEdBQUcsRUFBQ0wsR0FBRyxFQUFFRSxHQUFHLEVBQUM7TUFDM0I5QixHQUFHLENBQUNrQyxtQkFBbUIsR0FBR0gsWUFBWTtNQUN0Qy9CLEdBQUcsQ0FBQ21DLGVBQWUsR0FBRyxJQUFJO0lBQzlCO0VBQ0o7O0VBRUEsT0FBT25DLEdBQUc7QUFDZCIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvY29tbW9uL1ZpZXdwb2ludHMuanM/ZGUyYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkQ2FtZXJhRGVmaW5pdGlvbiB9IGZyb20gJy4uL3N2Zi9DYW1lcmFzJztcbmltcG9ydCB7IHRyYW5zZm9ybUNhbWVyYURhdGEgfSBmcm9tICcuL1N2ZlBsYWNlbWVudFV0aWxzJztcblwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBWaWV3cG9pbnRQYXJ0cyA9IHtcbiAgICBWUF9DYW1lcmE6IDEsXG4gICAgVlBfQ2FtZXJhVHJhbnNmb3JtOiAyLFxuICAgIFZQX1JlbmRlck1vZGU6IDQsXG4gICAgVlBfUHJpbWl0aXZlRGlzcGxheUZsYWdzOiA4LFxuICAgIFZQX0NsaXBQbGFuZXM6IDE2LFxuICAgIFZQX092ZXJyaWRlU2V0OiAzMixcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVmlld3BvaW50RGVmaW5pdGlvbihwZnIsIGNhbVBmciwgZW50cnkpIHtcbiAgICBjb25zdCB0c2UgPSBwZnIuc2Vla1RvRW50cnkoZW50cnkpO1xuICAgIGlmICghdHNlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBcbiAgICBjb25zdCBkZWYgPSB7fTtcbiAgICBjb25zdCBwYXJ0cyA9IHBmci5yZWFkVmFyaW50KCk7XG5cbiAgICBpZiAocGFydHMgJiBWaWV3cG9pbnRQYXJ0cy5WUF9DYW1lcmEpIHtcbiAgICAgICAgZGVmLmNhbWVyYUVudHJ5ID0gcGZyLnJlYWRWYXJpbnQoKTtcbiAgICAgICAgY29uc3QgaW5zdCA9IHsgZGVmaW5pdGlvbiA6IGRlZi5jYW1lcmFFbnRyeSB9O1xuICAgICAgICBkZWYuY2FtZXJhID0gcmVhZENhbWVyYURlZmluaXRpb24oY2FtUGZyLCBpbnN0KTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMgJiBWaWV3cG9pbnRQYXJ0cy5WUF9DYW1lcmFUcmFuc2Zvcm0pIHtcbiAgICAgICAgZGVmLmNhbWVyYVRyYW5zZm9ybSA9IHBmci5yZWFkVHJhbnNmb3JtKCk7XG4gICAgICAgIGlmKGRlZi5jYW1lcmEgJiYgZGVmLmNhbWVyYVRyYW5zZm9ybSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtQ2FtZXJhRGF0YShkZWYuY2FtZXJhLCBkZWYuY2FtZXJhVHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJ0cyAmIFZpZXdwb2ludFBhcnRzLlZQX1JlbmRlck1vZGUpIHtcbiAgICAgICAgZGVmLnJlbmRlck1vZGUgPSBwZnIucmVhZFU4KCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzICYgVmlld3BvaW50UGFydHMuVlBfUHJpbWl0aXZlRGlzcGxheUZsYWdzKSB7XG4gICAgICAgIGRlZi5wcmltaXRpdmVEaXNwbGF5RmxhZ3MgPSBwZnIucmVhZFU4KCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzICYgVmlld3BvaW50UGFydHMuVlBfT3ZlcnJpZGVTZXQpIHtcbiAgICAgICAgZGVmLm92ZXJyaWRlU2V0ID0gcGZyLnJlYWRWYXJpbnQoKTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMgJiBWaWV3cG9pbnRQYXJ0cy5WUF9DbGlwUGxhbmVzKSB7XG4gICAgICAgIGRlZi5jbGlwUGxhbmVNb2RlID0gcGZyLnJlYWRVOCgpO1xuICAgICAgICBpZiAoZGVmLmNsaXBQbGFuZU1vZGUgPT09IDApIHsgLy8gUGxhbmVzXG4gICAgICAgICAgICBkZWYuc2VjdGlvbkNvdW50ID0gcGZyLnJlYWRVOCgpO1xuICAgICAgICAgICAgZGVmLmNsaXBEYXRhID0ge307XG4gICAgICAgICAgICBkZWYuc2VjdGlvblBsYW5lID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlZi5zZWN0aW9uQ291bnQ7IGkgKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWwgPSBPYmplY3QuYXNzaWduKHt9LCBwZnIucmVhZFZlY3RvcjNmKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gcGZyLnJlYWRGNjQoKTtcbiAgICAgICAgICAgICAgICBkZWYuc2VjdGlvblBsYW5lLnB1c2goLW5vcm1hbC54LCAtbm9ybWFsLnksIC1ub3JtYWwueiwgZGlzdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBCb3hcbiAgICAgICAgICAgIGRlZi5jbGlwRGF0YSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgbWluID0gT2JqZWN0LmFzc2lnbih7fSwgcGZyLnJlYWRWZWN0b3IzZCgpKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE9iamVjdC5hc3NpZ24oe30sIHBmci5yZWFkVmVjdG9yM2QoKSk7XG4gICAgICAgICAgICBjb25zdCByb3RhdGlvblF1YXQgPSBPYmplY3QuYXNzaWduKHt9LCBwZnIucmVhZFF1YXRlcm5pb25mKCkpO1xuICAgICAgICAgICAgZGVmLnNlY3Rpb25Cb3ggPSB7bWluLCBtYXh9O1xuICAgICAgICAgICAgZGVmLnNlY3Rpb25Cb3hUcmFuc2Zvcm0gPSByb3RhdGlvblF1YXQ7XG4gICAgICAgICAgICBkZWYuaXNGcm9tVmlld3BvaW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZGVmO1xufVxuIl0sIm5hbWVzIjpbInJlYWRDYW1lcmFEZWZpbml0aW9uIiwidHJhbnNmb3JtQ2FtZXJhRGF0YSIsIlZpZXdwb2ludFBhcnRzIiwiVlBfQ2FtZXJhIiwiVlBfQ2FtZXJhVHJhbnNmb3JtIiwiVlBfUmVuZGVyTW9kZSIsIlZQX1ByaW1pdGl2ZURpc3BsYXlGbGFncyIsIlZQX0NsaXBQbGFuZXMiLCJWUF9PdmVycmlkZVNldCIsInJlYWRWaWV3cG9pbnREZWZpbml0aW9uIiwicGZyIiwiY2FtUGZyIiwiZW50cnkiLCJ0c2UiLCJzZWVrVG9FbnRyeSIsImRlZiIsInBhcnRzIiwicmVhZFZhcmludCIsImNhbWVyYUVudHJ5IiwiaW5zdCIsImRlZmluaXRpb24iLCJjYW1lcmEiLCJjYW1lcmFUcmFuc2Zvcm0iLCJyZWFkVHJhbnNmb3JtIiwicmVuZGVyTW9kZSIsInJlYWRVOCIsInByaW1pdGl2ZURpc3BsYXlGbGFncyIsIm92ZXJyaWRlU2V0IiwiY2xpcFBsYW5lTW9kZSIsInNlY3Rpb25Db3VudCIsImNsaXBEYXRhIiwic2VjdGlvblBsYW5lIiwiaSIsIm5vcm1hbCIsIk9iamVjdCIsImFzc2lnbiIsInJlYWRWZWN0b3IzZiIsImRpc3RhbmNlIiwicmVhZEY2NCIsInB1c2giLCJ4IiwieSIsInoiLCJtaW4iLCJyZWFkVmVjdG9yM2QiLCJtYXgiLCJyb3RhdGlvblF1YXQiLCJyZWFkUXVhdGVybmlvbmYiLCJzZWN0aW9uQm94Iiwic2VjdGlvbkJveFRyYW5zZm9ybSIsImlzRnJvbVZpZXdwb2ludCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/common/Viewpoints.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/f2d/CheckedInputStream.js ": /*!**********************************************************!*\ !*** ./src/file-loaders/lmvtk/f2d/CheckedInputStream.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CheckedInputStream: ()=> (/* binding */ CheckedInputStream)\n/* harmony export */ });\n\n\n\n// Similar as InputStream but with bounds checking.\n// Throw exception when out of bounds access is / to be made.\nfunction CheckedInputStream(buf) {\n this.buffer = buf;\n this.offset = 0;\n this.byteLength = buf.length;\n\n //We will use these shared memory arrays to\n //convert from bytes to the desired data type.\n this.convBuf = new ArrayBuffer(8);\n this.convUint8 = new Uint8Array(this.convBuf);\n this.convUint16 = new Uint16Array(this.convBuf);\n this.convInt32 = new Int32Array(this.convBuf);\n this.convUint32 = new Uint32Array(this.convBuf);\n}\n\nfunction OutOfBoundsBufferAccessException(offset) {\n this.offset = offset;\n this.message = \"try to access an offset that is out of bounds: \" + this.offset;\n this.toString = function () {\n return this.message;\n };\n}\n\nCheckedInputStream.prototype.boundsCheck = function (offset) {\n if (offset >= this.byteLength) {\n throw new OutOfBoundsBufferAccessException(offset);\n }\n};\n\nCheckedInputStream.prototype.seek = function (off) {\n this.boundsCheck(off);\n this.offset = off;\n};\n\nCheckedInputStream.prototype.getBytes = function (len) {\n this.boundsCheck(this.offset + len);\n var ret = new Uint8Array(this.buffer.buffer, this.offset, len);\n this.offset += len;\n return ret;\n};\n\nCheckedInputStream.prototype.skipBytes = function (len) {\n this.boundsCheck(this.offset + len);\n this.offset += len;\n};\n\n\nCheckedInputStream.prototype.getVarints = function () {\n var b;\n var value = 0;\n var shiftBy = 0;\n do {\n this.boundsCheck(this.offset);\n b = this.buffer[this.offset++];\n value |= (b & 0x7f) << shiftBy;\n shiftBy +=7 ;\n } while (b & 0x80);\n return value;\n};\n\nCheckedInputStream.prototype.getUint8=f unction () {\n this.boundsCheck(this.offset + 1);\n return this.buffer[this.offset++];\n};\n\nCheckedInputStream.prototype.getUint16=f unction () {\n this.boundsCheck(this.offset + 2);\n this.convUint8[0]=t his.buffer[this.offset++];\n this.convUint8[1]=t his.buffer[this.offset++];\n return this.convUint16[0];\n};\n\nCheckedInputStream.prototype.getInt16=f unction () {\n var tmp=t his.getUint16();\n //make negative integer if the ushort is negative\n if (tmp> 0x7fff)\n tmp = tmp | 0xffff0000;\n return tmp;\n};\n\nCheckedInputStream.prototype.getInt32 = function () {\n this.boundsCheck(this.offset + 4);\n var src = this.buffer;\n var dst = this.convUint8;\n var off = this.offset;\n dst[0] = src[off];\n dst[1] = src[off + 1];\n dst[2] = src[off + 2];\n dst[3] = src[off + 3];\n this.offset += 4;\n return this.convInt32[0];\n};\n\nCheckedInputStream.prototype.getUint32 = function () {\n this.boundsCheck(this.offset + 4);\n var src = this.buffer;\n var dst = this.convUint8;\n var off = this.offset;\n dst[0] = src[off];\n dst[1] = src[off + 1];\n dst[2] = src[off + 2];\n dst[3] = src[off + 3];\n this.offset += 4;\n return this.convUint32[0];\n};\n\nCheckedInputStream.prototype.skipUint32 = function () {\n this.boundsCheck(this.offset + 4);\n this.offset += 4;\n};\n\nCheckedInputStream.prototype.getFloat32 = function () {\n this.boundsCheck(this.offset + 4);\n this.offset += 4;\n return 0;\n};\n\nCheckedInputStream.prototype.getFloat64 = function () {\n this.boundsCheck(this.offset + 8);\n this.offset += 8;\n return 0;\n};\n\nCheckedInputStream.prototype.skipFloat64 = function () {\n this.boundsCheck(this.offset + 8);\n this.offset += 8;\n};\n\nCheckedInputStream.prototype.reset = function (buf) {\n this.buffer = buf;\n this.offset = 0;\n this.byteLength = buf.length;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2YyZC9DaGVja2VkSW5wdXRTdHJlYW0uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDYTs7QUFFYjtBQUNBO0FBQ08sU0FBU0Esa0JBQWtCQSxDQUFDQyxHQUFHLEVBQUU7RUFDcEMsSUFBSSxDQUFDQyxNQUFNLEdBQUdELEdBQUc7RUFDakIsSUFBSSxDQUFDRSxNQUFNLEdBQUcsQ0FBQztFQUNmLElBQUksQ0FBQ0MsVUFBVSxHQUFHSCxHQUFHLENBQUNJLE1BQU07O0VBRTVCO0VBQ0E7RUFDQSxJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLElBQUksQ0FBQ0MsU0FBUyxHQUFHLElBQUlDLFVBQVUsQ0FBQyxJQUFJLENBQUNILE9BQU8sQ0FBQztFQUM3QyxJQUFJLENBQUNJLFVBQVUsR0FBRyxJQUFJQyxXQUFXLENBQUMsSUFBSSxDQUFDTCxPQUFPLENBQUM7RUFDL0MsSUFBSSxDQUFDTSxTQUFTLEdBQUcsSUFBSUMsVUFBVSxDQUFDLElBQUksQ0FBQ1AsT0FBTyxDQUFDO0VBQzdDLElBQUksQ0FBQ1EsVUFBVSxHQUFHLElBQUlDLFdBQVcsQ0FBQyxJQUFJLENBQUNULE9BQU8sQ0FBQztBQUNuRDs7QUFFQSxTQUFTVSxnQ0FBZ0NBLENBQUNiLE1BQU0sRUFBRTtFQUM5QyxJQUFJLENBQUNBLE1BQU0sR0FBR0EsTUFBTTtFQUNwQixJQUFJLENBQUNjLE9BQU8sR0FBRyxpREFBaUQsR0FBRyxJQUFJLENBQUNkLE1BQU07RUFDOUUsSUFBSSxDQUFDZSxRQUFRLEdBQUcsWUFBVztJQUN2QixPQUFPLElBQUksQ0FBQ0QsT0FBTztFQUN2QixDQUFDO0FBQ0w7O0FBRUFqQixrQkFBa0IsQ0FBQ21CLFNBQVMsQ0FBQ0MsV0FBVyxHQUFHLFVBQVNqQixNQUFNLEVBQUU7RUFDeEQsSUFBSUEsTUFBTSxJQUFJLElBQUksQ0FBQ0MsVUFBVSxFQUFFO0lBQzNCLE1BQU0sSUFBSVksZ0NBQWdDLENBQUNiLE1BQU0sQ0FBQztFQUN0RDtBQUNKLENBQUM7O0FBRURILGtCQUFrQixDQUFDbUIsU0FBUyxDQUFDRSxJQUFJLEdBQUcsVUFBU0MsR0FBRyxFQUFFO0VBQzlDLElBQUksQ0FBQ0YsV0FBVyxDQUFDRSxHQUFHLENBQUM7RUFDckIsSUFBSSxDQUFDbkIsTUFBTSxHQUFHbUIsR0FBRztBQUNyQixDQUFDOztBQUVEdEIsa0JBQWtCLENBQUNtQixTQUFTLENBQUNJLFFBQVEsR0FBRyxVQUFTQyxHQUFHLEVBQUU7RUFDbEQsSUFBSSxDQUFDSixXQUFXLENBQUMsSUFBSSxDQUFDakIsTUFBTSxHQUFHcUIsR0FBRyxDQUFDO0VBQ25DLElBQUlDLEdBQUcsR0FBRyxJQUFJaEIsVUFBVSxDQUFDLElBQUksQ0FBQ1AsTUFBTSxDQUFDQSxNQUFNLEVBQUUsSUFBSSxDQUFDQyxNQUFNLEVBQUVxQixHQUFHLENBQUM7RUFDOUQsSUFBSSxDQUFDckIsTUFBTSxJQUFJcUIsR0FBRztFQUNsQixPQUFPQyxHQUFHO0FBQ2QsQ0FBQzs7QUFFRHpCLGtCQUFrQixDQUFDbUIsU0FBUyxDQUFDTyxTQUFTLEdBQUcsVUFBU0YsR0FBRyxFQUFFO0VBQ25ELElBQUksQ0FBQ0osV0FBVyxDQUFDLElBQUksQ0FBQ2pCLE1BQU0sR0FBR3FCLEdBQUcsQ0FBQztFQUNuQyxJQUFJLENBQUNyQixNQUFNLElBQUlxQixHQUFHO0FBQ3RCLENBQUM7OztBQUdEeEIsa0JBQWtCLENBQUNtQixTQUFTLENBQUNRLFVBQVUsR0FBRyxZQUFZO0VBQ2xELElBQUlDLENBQUM7RUFDTCxJQUFJQyxLQUFLLEdBQUcsQ0FBQztFQUNiLElBQUlDLE9BQU8sR0FBRyxDQUFDO0VBQ2YsR0FBRztJQUNDLElBQUksQ0FBQ1YsV0FBVyxDQUFDLElBQUksQ0FBQ2pCLE1BQU0sQ0FBQztJQUM3QnlCLENBQUMsR0FBRyxJQUFJLENBQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUUsQ0FBQztJQUM5QjBCLEtBQUssSUFBSSxDQUFDRCxDQUFDLEdBQUcsSUFBSSxLQUFLRSxPQUFPO0lBQzlCQSxPQUFPLElBQUksQ0FBQztFQUNoQixDQUFDLFFBQVFGLENBQUMsR0FBRyxJQUFJO0VBQ2pCLE9BQU9DLEtBQUs7QUFDaEIsQ0FBQzs7QUFFRDdCLGtCQUFrQixDQUFDbUIsU0FBUyxDQUFDWSxRQUFRLEdBQUcsWUFBVztFQUMvQyxJQUFJLENBQUNYLFdBQVcsQ0FBQyxJQUFJLENBQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2pDLE9BQU8sSUFBSSxDQUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUUsQ0FBQztBQUNyQyxDQUFDOztBQUVESCxrQkFBa0IsQ0FBQ21CLFNBQVMsQ0FBQ2EsU0FBUyxHQUFHLFlBQVc7RUFDaEQsSUFBSSxDQUFDWixXQUFXLENBQUMsSUFBSSxDQUFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUNqQyxJQUFJLENBQUNLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUNDLE1BQU0sRUFBRSxDQUFDO0VBQzlDLElBQUksQ0FBQ0ssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ04sTUFBTSxDQUFDLElBQUksQ0FBQ0MsTUFBTSxFQUFFLENBQUM7RUFDOUMsT0FBTyxJQUFJLENBQUNPLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsQ0FBQzs7QUFFRFYsa0JBQWtCLENBQUNtQixTQUFTLENBQUNjLFFBQVEsR0FBRyxZQUFXO0VBQy9DLElBQUlDLEdBQUcsR0FBRyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxDQUFDO0VBQzFCO0VBQ0EsSUFBSUUsR0FBRyxHQUFHLE1BQU07RUFDWkEsR0FBRyxHQUFHQSxHQUFHLEdBQUcsVUFBVTtFQUMxQixPQUFPQSxHQUFHO0FBQ2QsQ0FBQzs7QUFFRGxDLGtCQUFrQixDQUFDbUIsU0FBUyxDQUFDZ0IsUUFBUSxHQUFHLFlBQVc7RUFDL0MsSUFBSSxDQUFDZixXQUFXLENBQUMsSUFBSSxDQUFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUNqQyxJQUFJaUMsR0FBRyxHQUFHLElBQUksQ0FBQ2xDLE1BQU07RUFDckIsSUFBSW1DLEdBQUcsR0FBRyxJQUFJLENBQUM3QixTQUFTO0VBQ3hCLElBQUljLEdBQUcsR0FBRyxJQUFJLENBQUNuQixNQUFNO0VBQ3JCa0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNkLEdBQUcsQ0FBQztFQUNqQmUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNkLEdBQUcsR0FBQyxDQUFDLENBQUM7RUFDbkJlLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0QsR0FBRyxDQUFDZCxHQUFHLEdBQUMsQ0FBQyxDQUFDO0VBQ25CZSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2QsR0FBRyxHQUFDLENBQUMsQ0FBQztFQUNuQixJQUFJLENBQUNuQixNQUFNLElBQUksQ0FBQztFQUNoQixPQUFPLElBQUksQ0FBQ1MsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDOztBQUVEWixrQkFBa0IsQ0FBQ21CLFNBQVMsQ0FBQ21CLFNBQVMsR0FBRyxZQUFXO0VBQ2hELElBQUksQ0FBQ2xCLFdBQVcsQ0FBQyxJQUFJLENBQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2pDLElBQUlpQyxHQUFHLEdBQUcsSUFBSSxDQUFDbEMsTUFBTTtFQUNyQixJQUFJbUMsR0FBRyxHQUFHLElBQUksQ0FBQzdCLFNBQVM7RUFDeEIsSUFBSWMsR0FBRyxHQUFHLElBQUksQ0FBQ25CLE1BQU07RUFDckJrQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2QsR0FBRyxDQUFDO0VBQ2pCZSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdELEdBQUcsQ0FBQ2QsR0FBRyxHQUFDLENBQUMsQ0FBQztFQUNuQmUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUNkLEdBQUcsR0FBQyxDQUFDLENBQUM7RUFDbkJlLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0QsR0FBRyxDQUFDZCxHQUFHLEdBQUMsQ0FBQyxDQUFDO0VBQ25CLElBQUksQ0FBQ25CLE1BQU0sSUFBSSxDQUFDO0VBQ2hCLE9BQU8sSUFBSSxDQUFDVyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUM7O0FBRURkLGtCQUFrQixDQUFDbUIsU0FBUyxDQUFDb0IsVUFBVSxHQUFHLFlBQVc7RUFDakQsSUFBSSxDQUFDbkIsV0FBVyxDQUFDLElBQUksQ0FBQ2pCLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDakMsSUFBSSxDQUFDQSxNQUFNLElBQUksQ0FBQztBQUNwQixDQUFDOztBQUVESCxrQkFBa0IsQ0FBQ21CLFNBQVMsQ0FBQ3FCLFVBQVUsR0FBRyxZQUFXO0VBQ2pELElBQUksQ0FBQ3BCLFdBQVcsQ0FBQyxJQUFJLENBQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2pDLElBQUksQ0FBQ0EsTUFBTSxJQUFJLENBQUM7RUFDaEIsT0FBTyxDQUFDO0FBQ1osQ0FBQzs7QUFFREgsa0JBQWtCLENBQUNtQixTQUFTLENBQUNzQixVQUFVLEdBQUcsWUFBVztFQUNqRCxJQUFJLENBQUNyQixXQUFXLENBQUMsSUFBSSxDQUFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUNqQyxJQUFJLENBQUNBLE1BQU0sSUFBSSxDQUFDO0VBQ2hCLE9BQU8sQ0FBQztBQUNaLENBQUM7O0FBRURILGtCQUFrQixDQUFDbUIsU0FBUyxDQUFDdUIsV0FBVyxHQUFHLFlBQVc7RUFDbEQsSUFBSSxDQUFDdEIsV0FBVyxDQUFDLElBQUksQ0FBQ2pCLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDakMsSUFBSSxDQUFDQSxNQUFNLElBQUksQ0FBQztBQUNwQixDQUFDOztBQUVESCxrQkFBa0IsQ0FBQ21CLFNBQVMsQ0FBQ3dCLEtBQUssR0FBRyxVQUFVMUMsR0FBRyxFQUFFO0VBQ2hELElBQUksQ0FBQ0MsTUFBTSxHQUFHRCxHQUFHO0VBQ2pCLElBQUksQ0FBQ0UsTUFBTSxHQUFHLENBQUM7RUFDZixJQUFJLENBQUNDLFVBQVUsR0FBR0gsR0FBRyxDQUFDSSxNQUFNO0FBQ2hDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2YyZC9DaGVja2VkSW5wdXRTdHJlYW0uanM/ZmQ3YSJdLCJzb3VyY2VzQ29udGVudCI6WyJcblwidXNlIHN0cmljdFwiO1xuXG4vLyBTaW1pbGFyIGFzIElucHV0U3RyZWFtIGJ1dCB3aXRoIGJvdW5kcyBjaGVja2luZy5cbi8vIFRocm93IGV4Y2VwdGlvbiB3aGVuIG91dCBvZiBib3VuZHMgYWNjZXNzIGlzIC8gdG8gYmUgbWFkZS5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja2VkSW5wdXRTdHJlYW0oYnVmKSB7XG4gICAgdGhpcy5idWZmZXIgPSBidWY7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ1Zi5sZW5ndGg7XG5cbiAgICAvL1dlIHdpbGwgdXNlIHRoZXNlIHNoYXJlZCBtZW1vcnkgYXJyYXlzIHRvXG4gICAgLy9jb252ZXJ0IGZyb20gYnl0ZXMgdG8gdGhlIGRlc2lyZWQgZGF0YSB0eXBlLlxuICAgIHRoaXMuY29udkJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICB0aGlzLmNvbnZVaW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuY29udkJ1Zik7XG4gICAgdGhpcy5jb252VWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuY29udkJ1Zik7XG4gICAgdGhpcy5jb252SW50MzIgPSBuZXcgSW50MzJBcnJheSh0aGlzLmNvbnZCdWYpO1xuICAgIHRoaXMuY29udlVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmNvbnZCdWYpO1xufVxuXG5mdW5jdGlvbiBPdXRPZkJvdW5kc0J1ZmZlckFjY2Vzc0V4Y2VwdGlvbihvZmZzZXQpIHtcbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgICB0aGlzLm1lc3NhZ2UgPSBcInRyeSB0byBhY2Nlc3MgYW4gb2Zmc2V0IHRoYXQgaXMgb3V0IG9mIGJvdW5kczogXCIgKyB0aGlzLm9mZnNldDtcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfTtcbn1cblxuQ2hlY2tlZElucHV0U3RyZWFtLnByb3RvdHlwZS5ib3VuZHNDaGVjayA9IGZ1bmN0aW9uKG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPj0gdGhpcy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBPdXRPZkJvdW5kc0J1ZmZlckFjY2Vzc0V4Y2VwdGlvbihvZmZzZXQpO1xuICAgIH1cbn07XG5cbkNoZWNrZWRJbnB1dFN0cmVhbS5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uKG9mZikge1xuICAgIHRoaXMuYm91bmRzQ2hlY2sob2ZmKTtcbiAgICB0aGlzLm9mZnNldCA9IG9mZjtcbn07XG5cbkNoZWNrZWRJbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0Qnl0ZXMgPSBmdW5jdGlvbihsZW4pIHtcbiAgICB0aGlzLmJvdW5kc0NoZWNrKHRoaXMub2Zmc2V0ICsgbGVuKTtcbiAgICB2YXIgcmV0ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIuYnVmZmVyLCB0aGlzLm9mZnNldCwgbGVuKTtcbiAgICB0aGlzLm9mZnNldCArPSBsZW47XG4gICAgcmV0dXJuIHJldDtcbn07XG5cbkNoZWNrZWRJbnB1dFN0cmVhbS5wcm90b3R5cGUuc2tpcEJ5dGVzID0gZnVuY3Rpb24obGVuKSB7XG4gICAgdGhpcy5ib3VuZHNDaGVjayh0aGlzLm9mZnNldCArIGxlbik7XG4gICAgdGhpcy5vZmZzZXQgKz0gbGVuO1xufTtcblxuXG5DaGVja2VkSW5wdXRTdHJlYW0ucHJvdG90eXBlLmdldFZhcmludHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGI7XG4gICAgdmFyIHZhbHVlID0gMDtcbiAgICB2YXIgc2hpZnRCeSA9IDA7XG4gICAgZG8ge1xuICAgICAgICB0aGlzLmJvdW5kc0NoZWNrKHRoaXMub2Zmc2V0KTtcbiAgICAgICAgYiA9IHRoaXMuYnVmZmVyW3RoaXMub2Zmc2V0KytdO1xuICAgICAgICB2YWx1ZSB8PSAoYiAmIDB4N2YpIDw8IHNoaWZ0Qnk7XG4gICAgICAgIHNoaWZ0QnkgKz0gNztcbiAgICB9IHdoaWxlIChiICYgMHg4MCk7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuQ2hlY2tlZElucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRVaW50OCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYm91bmRzQ2hlY2sodGhpcy5vZmZzZXQgKyAxKTtcbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5vZmZzZXQrK107XG59O1xuXG5DaGVja2VkSW5wdXRTdHJlYW0ucHJvdG90eXBlLmdldFVpbnQxNiA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYm91bmRzQ2hlY2sodGhpcy5vZmZzZXQgKyAyKTtcbiAgICB0aGlzLmNvbnZVaW50OFswXSA9IHRoaXMuYnVmZmVyW3RoaXMub2Zmc2V0KytdO1xuICAgIHRoaXMuY29udlVpbnQ4WzFdID0gdGhpcy5idWZmZXJbdGhpcy5vZmZzZXQrK107XG4gICAgcmV0dXJuIHRoaXMuY29udlVpbnQxNlswXTtcbn07XG5cbkNoZWNrZWRJbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0SW50MTYgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdG1wID0gdGhpcy5nZXRVaW50MTYoKTtcbiAgICAvL21ha2UgbmVnYXRpdmUgaW50ZWdlciBpZiB0aGUgdXNob3J0IGlzIG5lZ2F0aXZlXG4gICAgaWYgKHRtcCA+IDB4N2ZmZilcbiAgICAgICAgdG1wID0gdG1wIHwgMHhmZmZmMDAwMDtcbiAgICByZXR1cm4gdG1wO1xufTtcblxuQ2hlY2tlZElucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRJbnQzMiA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYm91bmRzQ2hlY2sodGhpcy5vZmZzZXQgKyA0KTtcbiAgICB2YXIgc3JjID0gdGhpcy5idWZmZXI7XG4gICAgdmFyIGRzdCA9IHRoaXMuY29udlVpbnQ4O1xuICAgIHZhciBvZmYgPSB0aGlzLm9mZnNldDtcbiAgICBkc3RbMF0gPSBzcmNbb2ZmXTtcbiAgICBkc3RbMV0gPSBzcmNbb2ZmKzFdO1xuICAgIGRzdFsyXSA9IHNyY1tvZmYrMl07XG4gICAgZHN0WzNdID0gc3JjW29mZiszXTtcbiAgICB0aGlzLm9mZnNldCArPSA0O1xuICAgIHJldHVybiB0aGlzLmNvbnZJbnQzMlswXTtcbn07XG5cbkNoZWNrZWRJbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0VWludDMyID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ib3VuZHNDaGVjayh0aGlzLm9mZnNldCArIDQpO1xuICAgIHZhciBzcmMgPSB0aGlzLmJ1ZmZlcjtcbiAgICB2YXIgZHN0ID0gdGhpcy5jb252VWludDg7XG4gICAgdmFyIG9mZiA9IHRoaXMub2Zmc2V0O1xuICAgIGRzdFswXSA9IHNyY1tvZmZdO1xuICAgIGRzdFsxXSA9IHNyY1tvZmYrMV07XG4gICAgZHN0WzJdID0gc3JjW29mZisyXTtcbiAgICBkc3RbM10gPSBzcmNbb2ZmKzNdO1xuICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgcmV0dXJuIHRoaXMuY29udlVpbnQzMlswXTtcbn07XG5cbkNoZWNrZWRJbnB1dFN0cmVhbS5wcm90b3R5cGUuc2tpcFVpbnQzMiA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYm91bmRzQ2hlY2sodGhpcy5vZmZzZXQgKyA0KTtcbiAgICB0aGlzLm9mZnNldCArPSA0O1xufTtcblxuQ2hlY2tlZElucHV0U3RyZWFtLnByb3RvdHlwZS5nZXRGbG9hdDMyID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5ib3VuZHNDaGVjayh0aGlzLm9mZnNldCArIDQpO1xuICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgcmV0dXJuIDA7XG59O1xuXG5DaGVja2VkSW5wdXRTdHJlYW0ucHJvdG90eXBlLmdldEZsb2F0NjQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmJvdW5kc0NoZWNrKHRoaXMub2Zmc2V0ICsgOCk7XG4gICAgdGhpcy5vZmZzZXQgKz0gODtcbiAgICByZXR1cm4gMDtcbn07XG5cbkNoZWNrZWRJbnB1dFN0cmVhbS5wcm90b3R5cGUuc2tpcEZsb2F0NjQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmJvdW5kc0NoZWNrKHRoaXMub2Zmc2V0ICsgOCk7XG4gICAgdGhpcy5vZmZzZXQgKz0gODtcbn07XG5cbkNoZWNrZWRJbnB1dFN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoYnVmKSB7XG4gICAgdGhpcy5idWZmZXIgPSBidWY7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ1Zi5sZW5ndGg7XG59O1xuXG4iXSwibmFtZXMiOlsiQ2hlY2tlZElucHV0U3RyZWFtIiwiYnVmIiwiYnVmZmVyIiwib2Zmc2V0IiwiYnl0ZUxlbmd0aCIsImxlbmd0aCIsImNvbnZCdWYiLCJBcnJheUJ1ZmZlciIsImNvbnZVaW50OCIsIlVpbnQ4QXJyYXkiLCJjb252VWludDE2IiwiVWludDE2QXJyYXkiLCJjb252SW50MzIiLCJJbnQzMkFycmF5IiwiY29udlVpbnQzMiIsIlVpbnQzMkFycmF5IiwiT3V0T2ZCb3VuZHNCdWZmZXJBY2Nlc3NFeGNlcHRpb24iLCJtZXNzYWdlIiwidG9TdHJpbmciLCJwcm90b3R5cGUiLCJib3VuZHNDaGVjayIsInNlZWsiLCJvZmYiLCJnZXRCeXRlcyIsImxlbiIsInJldCIsInNraXBCeXRlcyIsImdldFZhcmludHMiLCJiIiwidmFsdWUiLCJzaGlmdEJ5IiwiZ2V0VWludDgiLCJnZXRVaW50MTYiLCJnZXRJbnQxNiIsInRtcCIsImdldEludDMyIiwic3JjIiwiZHN0IiwiZ2V0VWludDMyIiwic2tpcFVpbnQzMiIsImdldEZsb2F0MzIiLCJnZXRGbG9hdDY0Iiwic2tpcEZsb2F0NjQiLCJyZXNldCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/f2d/CheckedInputStream.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/f2d/F2d.js": /*!*******************************************!*\ !*** ./src/file-loaders/lmvtk/f2d/F2d.js ***! \*******************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ F2D: () => (/* binding */ F2D),\n/* harmony export */ F2dDataType: () => (/* binding */ F2dDataType),\n/* harmony export */ F2dSemanticType: () => (/* binding */ F2dSemanticType),\n/* harmony export */ F2dShadowRatio: () => (/* binding */ F2dShadowRatio),\n/* harmony export */ restoreSignBitFromLSB: () => (/* binding */ restoreSignBitFromLSB)\n/* harmony export */ });\n/* harmony import */ var _common_VertexBufferBuilder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/VertexBufferBuilder */ \"./src/file-loaders/lmvtk/common/VertexBufferBuilder.js\");\n/* harmony import */ var _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../wgs/scene/LmvBox3 */ \"./src/wgs/scene/LmvBox3.js\");\n/* harmony import */ var _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../wgs/scene/LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n/* harmony import */ var _common_VbUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../common/VbUtils */ \"./src/file-loaders/lmvtk/common/VbUtils.js\");\n/* harmony import */ var _common_InputStream__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../common/InputStream */ \"./src/file-loaders/lmvtk/common/InputStream.js\");\n/* harmony import */ var _logger_Logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../logger/Logger */ \"./src/logger/Logger.js\");\n/* harmony import */ var _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../net/ErrorCodes */ \"./src/file-loaders/net/ErrorCodes.js\");\n\n\n\n\n\n\n\n\n\n\nvar MOBILE_MAX_VCOUNT = 16383;\n\nvar F2dDataType = {\n //Fixed size types\n dt_object: 0,\n dt_void: 1,\n dt_byte: 2,\n dt_int: 3,\n dt_float: 4,\n dt_double: 5,\n dt_varint: 6,\n dt_point_varint: 7,\n\n //Variable size types\n //Data bytes are prefixed by an integer\n //representing the number of elements in the array.\n dt_byte_array: 32,\n dt_int_array: 33,\n dt_float_array: 34,\n dt_double_array: 35,\n dt_varint_array: 36,\n //Special variable int encoding for point data\n dt_point_varint_array: 37,\n\n //Well-known data types that help reduce output size for commonly\n //encountered simple geometries\n dt_arc: 38,\n dt_circle: 39,\n dt_circular_arc: 40,\n\n dt_string: 63,\n //do not want to go into varint range\n dt_last_data_type: 127\n};\n\nvar F2dSemanticType = {\n //For objects with fixed serialization (arc, raster) we don't bother having dedicated semantic for each member\n //and assume the parsing application knows the order they appear. There is still an end-object tag of course\n //which shows where the object ends.\n st_object_member: 0,\n\n //Simple / fixed size attributes\n st_fill: 1,\n st_fill_off: 2,\n st_clip_off: 3,\n st_layer: 4,\n st_link: 5,\n st_line_weight: 6,\n st_miter_angle: 7,\n st_miter_length: 8,\n st_line_pattern_ref: 9,\n st_back_color: 10,\n st_color: 11,\n st_markup: 12,\n st_object_id: 13,\n st_markup_id: 14,\n st_reset_rel_offset: 15,\n st_font_ref: 16,\n\n //Compound object opcodes\n\n //Begin a generic object opcode\n st_begin_object: 32,\n\n //Style attribute related opcodes. Those are compound objects\n st_clip: 33,\n st_line_caps: 34,\n st_line_join: 35,\n st_line_pattern_def: 36,\n st_font_def: 37,\n st_viewport: 38,\n\n //Drawables are all objects-typed bounded by begin/end object opcodes\n\n //Root level document begin\n st_sheet: 42,\n //Circle, Ellipse, Arcs\n st_arc: 43,\n //The grandfather of them all\n st_polyline: 44,\n st_raster: 45,\n st_text: 46,\n st_polytriangle: 47,\n st_dot: 48,\n //end object -- could be ending a generic object or drawable, etc.\n st_end_object: 63,\n\n st_last_semantic_type: 127\n};\n\n// F2D shadow ratio, relative to paper width.\nconst F2dShadowRatio = 0.0075;\n\n\n//Initializes a structure of counters used for statistical purposes and sheet content hash\nfunction initGeomMetrics() {\n return {\n \"arcs\": 0,\n \"circles\": 0,\n \"circ_arcs\": 0,\n \"viewports\": 0,\n \"clips\": 0,\n \"colors\": 0,\n \"db_ids\": 0,\n \"dots\": 0,\n \"fills\": 0,\n \"layers\": 0,\n \"line_caps\": 0,\n \"line_joins\": 0,\n \"line_patterns\": 0,\n \"line_pat_refs\": 0,\n \"plines\": 0,\n \"pline_points\": 0,\n \"line_weights\": 0,\n \"links\": 0,\n \"miters\": 0,\n \"ptris\": 0,\n \"ptri_indices\": 0,\n \"ptri_points\": 0,\n \"rasters\": 0,\n \"texts\": 0,\n \"strings\": []\n };\n}\n\n\n// Restore sign bit from LSB of an encoded integer which has the sign bit\n// moved from MSB to LSB.\n// The decoding process is the reverse by restoring the sign bit from LSB to MSB.\nfunction restoreSignBitFromLSB(integer) {\n return integer & 1 ? -(integer >>> 1) : integer >>> 1;\n}\n\nfunction F2D(metadata, manifest, basePath) {let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n this.metadata = metadata;\n this.scaleX = 1;\n this.scaleY = 1;\n this.bbox = { min: { x: 0, y: 0, z: 0 }, max: { x: 0, y: 0, z: 0 } };\n this.is2d = true;\n this.layersMap = {};\n this.fontDefs = {};\n this.fontCount = 0;\n this.fontId = 0;\n this.manifestAvailable = false;\n this.geomMetricsSum = 0;\n this.objectMemberQueue = [];\n\n this.propertydb = {\n attrs: [],\n avs: [],\n ids: [],\n values: [],\n offsets: [],\n viewables: []\n };\n\n if (metadata) {\n\n var dims = metadata.page_dimensions;\n\n this.paperWidth = dims.page_width;\n this.paperHeight = dims.page_height;\n\n // TODO: scale parsing.\n this.scaleX = this.paperWidth / dims.plot_width;\n this.scaleY = this.paperHeight / dims.plot_height;\n\n this.hidePaper = dims.hide_paper;\n\n var pw = this.paperWidth;\n var ph = this.paperHeight;\n this.bbox.max.x = pw;\n this.bbox.max.y = ph;\n\n var dim = metadata.page_dimensions || {};\n // If the paper is rotated or offset, include that in the bbox\n if (isFinite(dim.paper_rotation) && dim.paper_rotation !== 0) {\n var angle = dim.paper_rotation * Math.PI / 180;\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var dwx = pw * cos;\n var dwy = pw * sin;\n var dhx = -ph * sin;\n var dhy = ph * cos;\n this.bbox.min.x = Math.min(0, dwx, dhx, dwx + dhx);\n this.bbox.max.x = Math.max(0, dwx, dhx, dwx + dhx);\n this.bbox.min.y = Math.min(0, dwy, dhy, dwy + dhy);\n this.bbox.max.y = Math.max(0, dwy, dhy, dwy + dhy);\n }\n if (isFinite(dim.paper_offset_x) && dim.paper_offset_x !== 0) {\n this.bbox.min.x += dim.paper_offset_x;\n this.bbox.max.x += dim.paper_offset_x;\n }\n if (isFinite(dim.paper_offset_y) && dim.paper_offset_y !== 0) {\n this.bbox.min.y += dim.paper_offset_y;\n this.bbox.max.y += dim.paper_offset_y;\n }\n\n //Initialize mapping between layer index -> layer number to be used for rendering\n var count = 0;\n //Some geometry comes on null layer, and we reserve a spot for that one.\n //For example, Revit plots have no layers at all.\n this.layersMap[0] = count++;\n\n for (var l in metadata.layers) {\n\n var index = parseInt(l);\n\n //We store in a map in order to allow non-consecutive layer numbers,\n //which does happen.\n this.layersMap[index] = count++;\n }\n\n this.layerCount = count;\n\n //Create a layers tree to be used by the UI -- this splits AutoCAD style\n //layer groups (specified using | character) into a tree of layers.\n this.createLayerGroups(metadata.layers);\n\n if (metadata.geom_metrics) {\n var values = Object.keys(metadata.geom_metrics).map(function (key) {\n return metadata.geom_metrics[key];\n });\n this.geomMetricsSum = values.reduce((acc, cur) => acc + cur);\n }\n }\n\n this.hidePaper = this.hidePaper || options.modelSpace;\n this.noShadow = !!options.noShadow; // The request to not draw a shadow\n\n this.hasPageShadow = false; // Will be true only if the shadow was actually created\n\n // For debugging only. Could be removed.\n this.opCount = 0;\n\n this.excludeTextGeometry = options.excludeTextGeometry;\n //provides additional parameters for precise text search and highlight\n this.extendStringsFetching = options.extendStringsFetching;\n\n this.fontFaces = [];\n this.fontFamilies = [];\n\n this.viewports = [{}]; // make viewport index start at 1, 0 as paper is used in LineShader\n this.currentVpId = 0; // current viewport index\n this.viewports[0].geom_metrics = this.currentGeomMetrics = initGeomMetrics();\n\n this.clips = [0]; // make clip index start at 1, matched with viewport index\n\n this.strings = [];\n this.stringDbIds = [];\n this.stringBoxes = [];\n if (this.extendStringsFetching) {\n this.stringCharWidths = [];\n this.stringAngles = [];\n this.stringPositions = [];\n this.stringHeights = [];\n }\n this.currentStringNumber = -1;\n this.currentStringBox = new _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_1__.LmvBox3();\n\n this.linkBoxes = [];\n this.currentLinkBox = new _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_1__.LmvBox3();\n\n this.objectNumber = 0;\n this.currentFakeId = -2; //We tag certain objects that we care about (like strings) that have no ID with fake negative IDs instead of giving them default ID of 0.\n this.imageNumber = 0;\n this.linkNumber = 0;\n this.maxObjectNumber = 0;\n\n this.objectStack = [];\n this.objectNameStack = [];\n this.parseObjState = {\n polyTriangle: {},\n viewport: {},\n clip: {},\n raster: {},\n text: {},\n fontDef: {},\n uknown: {}\n };\n\n this.layer = 0;\n\n this.bgColor = typeof options.bgColor === \"number\" ? options.bgColor : 0xffffffff;\n\n //NOTE: Use of contrast color is turned off in mapColor() until UX makes up their mind\n //one way or another.\n this.contrastColor = this.color = this.fillColor = 0xff000000;\n if (this.hidePaper)\n this.contrastColor = 0xffffff00;\n\n this.isMobile = options && !!options.isMobile;\n\n var useInstancing = this.isMobile;\n var useCompactBuffers = this.isMobile;\n\n this.max_vcount = this.isMobile ? MOBILE_MAX_VCOUNT : undefined;\n\n this.currentVbb = new _common_VertexBufferBuilder__WEBPACK_IMPORTED_MODULE_0__.VertexBufferBuilder(useInstancing, undefined, this.max_vcount, useCompactBuffers);\n this.meshes = [];\n\n this.numCircles = this.numEllipses = this.numPolylines = this.numLineSegs = 0;\n this.numPolytriangles = this.numTriangles = 0;\n\n // Newly added f2d pasing stuff.\n this.error = false;\n\n // Last absolute positions of point parsed so far.\n // Used to decode relative positions parsed from points array.\n this.offsetX = 0;\n this.offsetY = 0;\n\n // Parse manifest, do stuff.\n // 1. Build image id to raster URI map used to assign values to texture path.\n // 2. Acquire names of property database json streams.\n if (manifest) {\n this.manifestAvailable = true;\n this.imageId2URI = {};\n var assets = manifest.assets;\n for (var i = 0, e = assets.length; i < e; ++i) {\n var entry=a ssets[i];\n var mime=e ntry.mime;\n if (mime.indexOf( 'image/') !==- 1) {\n var id=e ntry.id;\n id=i d.substr(0, id.indexOf( '.'));\n this.imageId2URI[id]=b asePath + entry.URI;\n }\n\n if (entry.type===\ "Autodesk.CloudPlatform.PropertyAttributes\")\n this.propertydb.attrs.push({ path: entry.URI });\n if (entry.type===\ "Autodesk.CloudPlatform.PropertyValues\")\n this.propertydb.values.push({ path: entry.URI });\n if (entry.type===\ "Autodesk.CloudPlatform.PropertyIDs\")\n this.propertydb.ids.push({ path: entry.URI });\n if (entry.type===\ "Autodesk.CloudPlatform.PropertyViewables\")\n this.propertydb.viewables.push({ path: entry.URI });\n if (entry.type===\ "Autodesk.CloudPlatform.PropertyOffsets\") {\n // rcv and rcv_offsets are not used any longer\n if (entry.id.indexOf( 'rcv')===- 1)\n this.propertydb.offsets.push({ path: entry.URI });\n }\n if (entry.type===\ "Autodesk.CloudPlatform.PropertyAVs\")\n this.propertydb.avs.push({ path: entry.URI });\n }\n\n }\n}\n\nF2D.prototype.load=f unction (loadContext, fydoPack) {\n\n if (!(fydoPack instanceof Uint8Array))\n fydoPack=n ew Uint8Array(fydoPack);\n this.data=f ydoPack;\n this.parse();\n\n if (this.stringBoxes.length) {\n var fbuf=n ew Float32Array(this.stringBoxes.length);\n fbuf.set(this.stringBoxes);\n this.stringBoxes=f buf;\n }\n\n loadContext.loadDoneCB(true);\n};\n\nF2D.prototype.loadFrames=f unction (loadContext) {\n\n this.loadContext=l oadContext;\n\n var data=l oadContext.data;\n\n if (data) {\n if (!(data instanceof Uint8Array))\n data=n ew Uint8Array(data);\n this.data=d ata;\n } else if (loadContext.finalFrame) {\n this.data=n ull;\n\n if (this.stringBoxes.length) {\n var fbuf=n ew Float32Array(this.stringBoxes.length);\n fbuf.set(this.stringBoxes);\n this.stringBoxes=f buf;\n }\n }\n\n this.parseFrames(loadContext.finalFrame);\n\n loadContext.loadDoneCB(true);\n};\n\n\nF2D.prototype.pushMesh=f unction (mesh) {\n this.meshes.push(mesh);\n\n\n mesh.material={ \n skipEllipticals: !this.currentVbb.numEllipticals,\n skipCircles: !this.currentVbb.numCirculars,\n skipTriangleGeoms: !this.currentVbb.numTriangleGeoms,\n skipMiterLines: !this.currentVbb.numMiterLines,\n useInstancing: this.currentVbb.useInstancing,\n unpackPositions: !!mesh.unpackXform\n };\n\n if (this.currentImage) {\n mesh.material.image=t his.currentImage;\n mesh.material.image.name=t his.imageNumber++;\n this.currentImage=n ull;\n }\n};\n\nF2D.prototype.flushBuffer=f unction (addCount, finalFlush)\n{\n if (!this.currentVbb.vcount && !finalFlush)\n {\n return;\n }\n\n var flush=f inalFlush;\n flush=f lush || this.currentVbb.isFull(addCount);\n\n if (flush) {\n if (this.currentVbb.vcount) {\n var mesh=t his.currentVbb.toMesh();\n _common_VbUtils__WEBPACK_IMPORTED_MODULE_3__.VBUtils.bboxUnion(this.bbox, mesh.boundingBox);\n\n this.pushMesh(mesh);\n this.currentVbb.reset(0);\n }\n\n if (this.loadContext)\n this.loadContext.loadDoneCB(true, finalFlush);\n }\n\n\n};\n\nF2D.prototype.tx=f unction (x) {\n return this.sx(x);\n};\n\nF2D.prototype.ty=f unction (y) {\n return this.sy(y);\n};\n\nF2D.prototype.sx=f unction (x) {\n //TODO: The hardcoded scale is used to get the integer coords from FYDO\n //into something normal and close to page coordinates\n return x * this.scaleX;\n};\n\nF2D.prototype.sy=f unction (y) {\n //TODO: The hardcoded scale is used to get the integer coords from FYDO\n //into something normal and close to page coordinates\n return y * this.scaleY;\n};\n\nF2D.prototype.invertColor=f unction (c) {\n var a=c>> 24 & 0xff;\n var b = c >> 16 & 0xff;\n var g = c >> 8 & 0xff;\n var r = c & 0xff;\n\n b = 255 - b;\n g = 255 - g;\n r = 255 - r;\n\n return a << 24 | b << 16 | g << 8 | r;\n};\n\nF2D.prototype.mapColor=f unction (c, isFill) {\n\n if (!this.hidePaper || this.bgColor !==0 )\n return c;\n\n //Color substitution in cases when we want to interleave the 2D drawing\n //into a 3D scene (when bgColor is explicitly specified as transparent black (0)\n //and hidePaper is set to true.\n\n var r=c & 0xff;\n var g=( c & 0xff00)>> 8;\n var b = (c & 0xff0000) >> 16;\n\n var isGrey = r === g && r === b;\n\n if (r < 0x7f) {\n\n //c=t his.contrastColor;\n } else if (isGrey && isFill) {c=c & 0x55ffffff;\n }\n\n return c;\n};\n\n//======================F 2D Parser=================================/ /\n\n\n// Convert relative positions to absolute positions, and update global offsets.\nF2D.prototype.parsePointPositions=f unction () {\n var x=t his.stream.getVarints();\n var y=t his.stream.getVarints();\n\n x=r estoreSignBitFromLSB(x);\n y=r estoreSignBitFromLSB(y);\n\n x +=t his.offsetX;\n y +=t his.offsetY;\n\n this.offsetX=x ;\n this.offsetY=y ;\n\n return [this.tx(x), this.ty(y)];\n};\n\nF2D.prototype.parserAssert=f unction (actualType, expectedType, functionName) {\n if (actualType !=e xpectedType) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.warn(\ "Expect \" + expectedType + \ "; actual type is \" +\n actualType + \ "; in function \" + functionName);\n this.error=t rue;\n return true;\n } else {\n return false;\n }\n};\n\nF2D.prototype.unhandledTypeWarning=f unction (inFunction, semanticType) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.warn(\ "Unhandled semantic type : \" + semanticType + \ " in function \" + inFunction);\n};\n\nF2D.prototype.parseObject=f unction () {\n var semantic_type=t his.stream.getVarints();\n this.objectStack.push(semantic_type);\n //debug(semantic_type);\n switch (semantic_type) {\n case F2dSemanticType.st_sheet:\n this.objectNameStack.push(\ "sheet\");\n this.objectMemberQueue.unshift(\ "paperColor\");\n break;\n case F2dSemanticType.st_viewport:\n this.objectNameStack.push(\ "viewport\");\n this.objectMemberQueue.unshift(\ "units\", \ "transform\");\n break;\n case F2dSemanticType.st_clip:\n this.objectNameStack.push(\ "clip\");\n this.objectMemberQueue.unshift(\ "contourCounts\", \ "points\", \ "indices\");\n break;\n case F2dSemanticType.st_polytriangle:\n this.objectNameStack.push(\ "polyTriangle\");\n this.objectMemberQueue.unshift(\ "points\", \ "indices\", \ "colors\");\n break;\n case F2dSemanticType.st_raster:\n this.objectNameStack.push(\ "raster\");\n this.objectMemberQueue.unshift(\ "position\", \ "width\", \ "height\", \ "imageId\");\n break;\n case F2dSemanticType.st_text:\n this.currentStringNumber=t his.strings.length;\n if (this.objectNumber===0 )\n this.objectNumber=t his.currentFakeId--;\n this.currentStringBox.makeEmpty();\n this.objectNameStack.push(\ "text\");\n this.objectMemberQueue.unshift(\ "string\", \ "position\", \ "height\", \ "widthScale\", \ "rotation\", \ "oblique\", \ "charWidths\");\n break;\n case F2dSemanticType.st_font_def:\n this.objectNameStack.push(\ "fontDef\");\n this.objectMemberQueue.unshift(\ "name\", \ "fullName\", \ "flags\", \ "spacing\", \ "panose\");\n break;\n case F2dSemanticType.st_end_object:{\n this.objectStack.pop(); //pop the end_object we pushed at the beginning of the function\n\n if (!this.objectStack.length)\n this.parserAssert(0, 1, \ "parseEndObject (Stack Empty)\");else\n {\n //Do any end-of-object post processing depending on object type\n var objType=t his.objectStack.pop(); //pop the start object\n\n switch (objType) {\n case F2dSemanticType.st_polytriangle:this.actOnPolyTriangle();break;\n case F2dSemanticType.st_viewport:this.actOnViewport();break;\n case F2dSemanticType.st_clip:this.actOnClip();break;\n case F2dSemanticType.st_raster:this.actOnRaster();break;\n case F2dSemanticType.st_text:this.actOnText();break;\n case F2dSemanticType.st_font_def:this.actOnFontDef();break;\n }\n\n //Zero out the state of the object we just finished processing\n var name=t his.objectNameStack.pop();\n var state=t his.parseObjState[name];\n for (var p in state)\n state[p]=n ull;\n }\n\n this.objectMemberQueue.length=0 ;\n }\n break;\n default:\n this.objectNameStack.push(\ "unknown\");\n this.error=t rue;\n this.unhandledTypeWarning( 'parseObject', semantic_type);\n break;\n }\n};\n\n\nF2D.prototype.initSheet=f unction (paperColor) {\n if (this.hidePaper)\n return;\n\n this.bgColor=p aperColor;\n\n if (this.metadata) {\n var pw=t his.paperWidth;\n var ph=t his.paperHeight;\n\n var o={ x: 0, y: 0 }; // origin\n var dw={ x: pw, y: 0 }; // paper width direction\n var dh={ x: 0, y: ph }; // paper height direction\n\n // If the metadata has a non-zero rotation, then use it\n var dim=t his.metadata.page_dimensions || {};\n if (isFinite(dim.paper_rotation) && dim.paper_rotation !==0 ) {\n var angle=d im.paper_rotation * Math.PI / 180;\n var cos=M ath.cos(angle);\n var sin=M ath.sin(angle);\n dw.y=p w * sin;\n dw.x=p w * cos;\n dh.x=- ph * sin;\n dh.y=p h * cos;\n }\n // If the metadata has a non-zero offset, then use them\n if (isFinite(dim.paper_offset_x) && dim.paper_offset_x !==0 ) {\n o.x=d im.paper_offset_x;\n }\n if (isFinite(dim.paper_offset_y) && dim.paper_offset_y !==0 ) {\n o.y=d im.paper_offset_y;\n }\n\n var vbb=t his.currentVbb;\n\n var points=[ o.x, o.y, o.x + dw.x, o.y + dw.y, o.x + dw.x + dh.x, o.y + dw.y + dh.y, o.x + dh.x, o.y + dh.y];\n var colors=[ paperColor, paperColor, paperColor, paperColor];\n var indices=[ 0, 1, 2, 0, 2, 3];\n\n if (!this.noShadow) {\n var ss=p w * F2dShadowRatio;\n var ssw={ x: dw.x * ss / pw, y: dw.y * ss / pw }; // shadow offset in width direction\n var ssh={ x: dh.x * ss / ph, y: dh.y * ss / ph }; // shadow offset in height direction\n var ssb={ x: o.x + ssw.x, y: o.y + ssw.y }; // bottom shadow origin\n var ssr={ x: o.x + dw.x, y: o.y + dw.y }; // right shadow origin\n var shadowColor=0 xff555555;\n\n points=p oints.concat([ssb.x - ssh.x, ssb.y - ssh.y, ssb.x - ssh.x + dw.x, ssb.y - ssh.y + dw.y, ssb.x + dw.x, ssb.y + dw.y, ssb.x, ssb.y,\n ssr.x, ssr.y, ssr.x + ssw.x, ssr.y + ssw.y, ssr.x + ssw.x - ssh.x + dh.x, ssr.y + ssw.y - ssh.y + dh.y, ssr.x - ssh.x + dh.x, ssr.y - ssh.y + dh.y]);\n colors=c olors.concat([shadowColor, shadowColor, shadowColor, shadowColor,\n shadowColor, shadowColor, shadowColor, shadowColor]);\n indices=i ndices.concat([4, 5, 6, 4, 6, 7,\n 8, 9, 10, 8, 10, 11]);\n\n this.hasPageShadow=t rue;\n }\n\n var paperLayer=0 ; //Put the paper the null layer so it won 't get turned off.\n var paperDbId = -1;\n\n this.addPolyTriangle(points, colors, indices, 0xffffffff, paperDbId, paperLayer, false);\n\n //Page outline\n vbb.addSegment(o.x, o.y, o.x + dw.x, o.y + dw.y, 0, 1e-6, 0xff000000, paperDbId, paperLayer, this.currentVpId);\n vbb.addSegment(o.x + dw.x, o.y + dw.y, o.x + dw.x + dh.x, o.y + dw.y + dh.y, 0, 1e-6, 0xff000000, paperDbId, paperLayer, this.currentVpId);\n vbb.addSegment(o.x + dw.x + dh.x, o.y + dw.y + dh.y, o.x + dh.x, o.y + dh.y, 0, 1e-6, 0xff000000, paperDbId, paperLayer, this.currentVpId);\n vbb.addSegment(o.x + dh.x, o.y + dh.y, o.x, o.y, 0, 1e-6, 0xff000000, paperDbId, paperLayer, this.currentVpId);\n\n\n //Test pattern for line styles.\n //for (var i=0; i<39; i++) {\n // vbb.addSegment(0, ph + i * 0.25 + 1, 12, 12 + ph + i * 0.25 + 1, 0, -1 /* device space pixel width */, 0xff000000, 0xffffffff, 0, 0, i);\n //}\n\n //Test pattern for line styles.\n //for (var i=0; i<39; i++) {\n // vbb.addSegment(0, ph + (i+39) * 0.25 + 1, 12, 12 + ph + (i+39) * 0.25 + 1, 0, (1.0 / 25.4) /*1mm width*/, 0xff000000, 0xffffffff, 0, 0, i);\n //}\n\n }\n};\n\nF2D.prototype.setObjectMember = function (val) {\n if (!this.objectMemberQueue.length) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.warn(\"Unexpected object member. \" + val + \" on object \" + this.objectNameStack[this.objectNameStack.length - 1]);\n return false;\n }\n\n var propName = this.objectMemberQueue.shift();\n var curObjName = this.objectNameStack[this.objectNameStack.length - 1];\n\n //The paper color needs to be processed as soon as it comes in\n //because we want to initialize the page geometry first, before\n //adding any other geometry\n if (curObjName == \"sheet\" && propName == \"paperColor\") {\n this.initSheet(val);\n return true;\n } else\n if (curObjName) {\n this.parseObjState[curObjName][propName] = val;\n return true;\n }\n\n return false;\n};\n\n\nF2D.prototype.parseString = function () {\n var s = this.stream;\n var sema = s.getVarints();\n\n var len = s.getVarints();\n var ret = s.getString(len);\n\n switch (sema) {\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(ret))\n return;\n break;\n default:_logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.info(\"Unexpected opcode semantic type for string.\");break;\n }\n\n return ret;\n};\n\n\nF2D.prototype.actOnFontDef = function () {\n var fontDef = this.parseObjState.fontDef;\n this.fontDefs[++this.fontCount] = fontDef;\n this.fontId = this.fontCount;\n};\n\n\nF2D.prototype.parsePoint = function () {\n var s = this.stream;\n var sema = s.getVarints(); //skip past the semantics\n var ret = this.parsePointPositions();\n\n switch (sema) {\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(ret))\n return;\n break;\n default:_logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.info(\"Unexpected opcode semantic type for point.\");break;\n }\n\n return ret;\n};\n\n\nF2D.prototype.parsePointsArray = function () {\n\n var s = this.stream;\n\n var sema = s.getVarints();\n\n var count = s.getVarints(); // number of coordinates * 2\n if (!count) return;\n count = count / 2;\n\n var ret = [];\n var position;\n\n for (var i = 0; i < count; ++i) {\n position = this.parsePointPositions();\n ret.push(position[0]);\n ret.push(position[1]);\n }\n\n switch (sema) {\n case F2dSemanticType.st_polyline:\n this.actOnPolylinePointsArray(ret);\n return;\n case F2dSemanticType.st_dot:\n this.actOnDot(ret);\n return;\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(ret))\n return;\n break;\n default:_logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.info(\"Unexpected opcode semantic type for points array.\");break;\n }\n\n return ret;\n};\n\nF2D.prototype.parseIntArray = function () {\n var s = this.stream;\n var sema = s.getVarints();\n var count = s.getVarints(); // total number of elements in integer array.\n var retVal = [];\n for (var i = 0; i < count; ++i) {\n retVal.push(s.getUint32());\n }\n\n switch (sema) {\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(retVal))\n return;\n break;\n default:\n this.unhandledTypeWarning('parseIntArray ', sema);\n break;\n }\n\n return retVal;\n};\n\nF2D.prototype.parseDoubleArray = function () {\n var s = this.stream;\n var sema = s.getVarints();\n var count = s.getVarints(); // total number of elements in integer array.\n var retVal = [];\n for (var i = 0; i < count; ++i) {\n retVal.push(s.getFloat64());\n }\n\n switch (sema) {\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(retVal))\n return;\n break;\n default:\n this.unhandledTypeWarning('parseDoubleArray ', sema);\n break;\n }\n\n return retVal;\n};\n\nF2D.prototype.parseByteArray = function () {\n var s = this.stream;\n var sema = s.getVarints();\n var count = s.getVarints(); // total number of elements in byte array.\n var retVal = [];\n for (var i = 0; i < count; ++i) {\n retVal.push(s.getUint8());\n }\n\n switch (sema) {\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(retVal))\n return;\n break;\n default:\n this.unhandledTypeWarning('parseByteArray ', sema);\n break;\n }\n\n return retVal;\n};\n\n\nF2D.prototype.parseVarintArray = function () {\n var s = this.stream;\n var sema = s.getVarints();\n\n var ret = [];\n\n // Total number of integers in array, not the total number of bytes.\n var count = s.getVarints();\n\n for (var i = 0; i < count; ++i) {\n ret.push(s.getVarints());\n }\n\n switch (sema) {\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(ret))\n return;\n break;\n default:\n this.unhandledTypeWarning('parseVarIntArray ', sema);\n break;\n }\n\n return ret;\n};\n\n\nF2D.prototype.parseInt = function () {\n var s = this.stream;\n var sema = s.getVarints();\n var val = s.getUint32();\n\n switch (sema) {\n case F2dSemanticType.st_color:\n this.color = this.mapColor(val, false);\n this.currentGeomMetrics.colors++;\n break;\n case F2dSemanticType.st_fill:\n this.fill = true;\n this.fillColor = this.mapColor(val, true);\n this.currentGeomMetrics.fills++;\n break;\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(val))\n return;\n default: // eslint-disable-line no-fallthrough\n this.unhandledTypeWarning('parseInt ', sema);\n break;\n }\n\n return val;\n};\n\nF2D.prototype.parseVoid = function () {\n var sema = this.stream.getVarints();\n switch (sema) {\n case F2dSemanticType.st_fill_off:\n this.fill = false;\n this.currentGeomMetrics.fills++;\n break;\n default:\n this.unhandledTypeWarning('parseVoid ', sema);\n break;\n }\n};\n\nF2D.prototype.parseVarint = function () {\n var s = this.stream;\n var semantic_type = s.getVarints();\n var val = s.getVarints();\n\n switch (semantic_type) {\n case F2dSemanticType.st_line_weight:\n this.lineWeight = this.tx(val);\n this.currentGeomMetrics.line_weights++;\n break;\n case F2dSemanticType.st_line_caps:\n this.currentGeomMetrics.line_caps++;\n break;\n case F2dSemanticType.st_line_join:\n this.currentGeomMetrics.line_joins++;\n break;\n case F2dSemanticType.st_object_id:\n case F2dSemanticType.st_markup_id:\n this.objectNumber = val;\n this.maxObjectNumber = Math.max(this.maxObjectNumber, val);\n this.currentGeomMetrics.db_ids++;\n break;\n case F2dSemanticType.st_link:\n if (this.linkNumber) {\n this.linkBoxes[this.linkNumber] = this.currentLinkBox.clone();\n this.currentLinkBox.makeEmpty();\n }\n this.linkNumber = val;\n break;\n case F2dSemanticType.st_layer:\n this.currentGeomMetrics.layers++;\n this.layer = this.layersMap[val];\n break;\n case F2dSemanticType.st_font_ref:\n this.fontId = val;\n break;\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(val))\n return;\n break;\n default:\n break;\n }\n\n return val;\n};\n\nF2D.prototype.parseFloat = function () {\n var s = this.stream;\n var semantic_type = s.getVarints();\n var val = s.getFloat32();\n\n switch (semantic_type) {\n case F2dSemanticType.st_miter_angle:\n break;\n case F2dSemanticType.st_miter_length:\n break;\n case F2dSemanticType.st_object_member:\n if (this.setObjectMember(val)) {\n return;\n }\n break;\n default:\n break;\n }\n\n return val;\n};\n\nF2D.prototype.parseCircularArc = function () {\n var s = this.stream;\n var sema = s.getVarints();\n if (this.parserAssert(sema, F2dSemanticType.st_arc, 'parseCircularArc ')) return;\n\n var point = this.parsePointPositions();\n var major = s.getVarints(), /*rotation = s.getFloat32(),*/start = s.getFloat32(),end = s.getFloat32();\n\n this.actOnCircularArc(point[0], point[1], start, end, this.sx(major));\n};\n\nF2D.prototype.parseCircle = function () {\n var s = this.stream;\n var sema = s.getVarints();\n if (this.parserAssert(sema, F2dSemanticType.st_arc, 'parseCircle ')) return;\n\n var point = this.parsePointPositions();\n var major = s.getVarints();\n\n this.actOnCompleteCircle(point[0], point[1], this.sx(major));\n};\n\nF2D.prototype.parseArc = function () {\n var s = this.stream;\n var sema = s.getVarints();\n if (this.parserAssert(sema, F2dSemanticType.st_arc, 'parseArc ')) return;\n\n // Relative positions.\n var point = this.parsePointPositions();\n\n var major = s.getVarints();\n var minor = s.getVarints();\n\n var rotation = s.getFloat32();\n var start = s.getFloat32();\n var end = s.getFloat32();\n\n this.actOnArc(point[0], point[1], start, end, this.sx(major), this.sy(minor), rotation);\n};\n\nF2D.prototype.parseDataType = function () {\n var data_type = this.stream.getVarints();\n\n switch (data_type) {\n case F2dDataType.dt_void:\n this.parseVoid();\n break;\n case F2dDataType.dt_int:\n this.parseInt();\n break;\n case F2dDataType.dt_object:\n this.parseObject();\n break;\n case F2dDataType.dt_varint:\n this.parseVarint();\n break;\n case F2dDataType.dt_point_varint:\n this.parsePoint();\n break;\n case F2dDataType.dt_float:\n this.parseFloat();\n break;\n case F2dDataType.dt_point_varint_array:\n this.parsePointsArray();\n break;\n case F2dDataType.dt_circular_arc:\n this.parseCircularArc();\n break;\n case F2dDataType.dt_circle:\n this.parseCircle();\n break;\n case F2dDataType.dt_arc:\n this.parseArc();\n break;\n case F2dDataType.dt_int_array:\n this.parseIntArray();\n break;\n case F2dDataType.dt_varint_array:\n this.parseVarintArray();\n break;\n case F2dDataType.dt_byte_array:\n this.parseByteArray();\n break;\n case F2dDataType.dt_string:\n this.parseString();\n break;\n case F2dDataType.dt_double_array:\n this.parseDoubleArray();\n break;\n default:\n this.error = true;\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.info(\"Data type not supported yet: \" + data_type);\n break;\n }\n};\n\nF2D.prototype.readHeader = function () {\n var stream = this.stream = new _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(this.data);\n\n // \"F2D\"\n var header = stream.getString(3);\n\n if (header !== \"F2D\") {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.error(\"Invalid F2D header : \" + header, (0,_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_6__.errorCodeString)(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_6__.ErrorCodes.BAD_DATA));\n return false;\n }\n\n var versionMajor = stream.getString(2);\n if (versionMajor !== \"01\") {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.error(\"Only support f2d major version 1; actual version is : \" + versionMajor, (0,_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_6__.errorCodeString)(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_6__.ErrorCodes.BAD_DATA));\n return false;\n }\n\n var dot = stream.getString(1);\n if (dot !== \".\") {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.error(\"Invalid version delimiter.\", (0,_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_6__.errorCodeString)(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_6__.ErrorCodes.BAD_DATA));\n return false;\n }\n\n var versionMinor = stream.getString(2);\n return true;\n};\n\nF2D.prototype.parse = function () {\n // Read and check header\n if (!this.readHeader())\n return;\n\n var stream = this.stream;\n while (stream.offset < stream.byteLength) {\n this.parseDataType();\n if (this.error)\n break;\n this.opCount++;\n }\n\n if (this.linkNumber) {\n this.linkBoxes[this.linkNumber] = this.currentLinkBox.clone();\n this.currentLinkBox.makeEmpty();\n }\n\n this.flushBuffer(0, true);\n this.currentVbb = null;\n\n this.stream = null;\n this.data = null;\n\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.info(\"F2d parse: data types count : \" + this.opCount);\n};\n\nF2D.prototype.parseFrames = function (flush) {\n\n if (this.data) {\n var stream = this.stream = new _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(this.data);\n while (stream.offset < stream.byteLength) {\n this.parseDataType();\n if (this.error)\n break;\n this.opCount++;\n }\n } else if (!flush) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.warn(\"Unexpected F2D parse state: If there is no data, we only expect a flush command, but flush was false.\");\n }\n\n if (flush) {\n this.flushBuffer(0, true);\n }\n\n this.stream = null;\n this.data = null;\n};\n\n// ================= Semantic Analysis Pass ======================//\n\nF2D.prototype.actOnPolylinePointsArray = function (points) {\n\n this.flushBuffer();\n\n // For now only consider this.fill == false case.\n // TODO: handle fill case.\n\n var count = points.length / 2;\n\n var totalLen = 0;\n var x0 = points[0];\n var y0 = points[1];\n for (var i = 1; i < count; ++i) {\n var x1 = points[2 * i];\n var y1 = points[2 * i + 1];\n\n // TODO: make sure this function can be reused as is.\n this.currentVbb.addSegment(x0, y0, x1, y1, totalLen, this.lineWeight, this.color, this.objectNumber, this.layer, this.currentVpId);\n\n totalLen += Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0));\n\n x0 = x1;\n y0 = y1;\n }\n\n this.numPolylines++;\n this.numLineSegs += count - 1;\n\n this.currentGeomMetrics.plines++;\n this.currentGeomMetrics.pline_points += count - 1;\n};\n\nF2D.prototype.actOnDot = function (points) {\n\n this.currentGeomMetrics.dots++;\n\n var x0 = points[0];\n var y0 = points[1];\n\n this.actOnCompleteCircle(x0, y0, this.sx(1), true);\n};\n\n\nF2D.prototype.actOnCompleteCircle = function (cx, cy, radius, skipCount) {\n // Relative positions.\n this.flushBuffer();\n this.numCircles++;\n\n if (!skipCount)\n this.currentGeomMetrics.circles++;\n\n if (this.fill) {\n //A simple filled circle can be handled\n //as degenerate thick line segment -- lots of these\n //in line style grass clippings\n this.currentVbb.addSegment(cx, cy, cx, cy, 0, 2 * radius, this.color, this.objectNumber,\n this.layer, this.currentVpId);\n } else {\n this.currentVbb.addArc(cx, cy, 0, 2 * Math.PI, /*major*/radius, /*minor*/radius, /*tilt*/0.0,\n this.lineWeight, this.color, this.objectNumber, this.layer, this.currentVpId);\n }\n};\n\nF2D.prototype.actOnCircularArc = function (cx, cy, start, end, radius) {\n this.numCircles++;\n this.currentGeomMetrics.circ_arcs++;\n this.flushBuffer();\n\n // debug(\"circle \" + start + \" \" + end + \" c \" + this.color.toString(16));\n\n this.currentVbb.addArc(cx, cy, start, end, /*major*/radius, /*minor*/radius, /*tilt*/0.0,\n this.lineWeight, this.color, this.objectNumber, this.layer, this.currentVpId);\n};\n\nF2D.prototype.actOnArc = function (cx, cy, start, end, major, minor, rotation) {\n this.numEllipses++;\n this.currentGeomMetrics.arcs++;\n // TODO: need this?\n this.flushBuffer();\n this.currentVbb.addArc(cx, cy, start, end, major, minor, rotation,\n this.lineWeight, this.color, this.objectNumber, this.layer, this.currentVpId);\n};\n\nF2D.prototype.actOnRaster = function () {\n\n if (!this.manifestAvailable)\n return;\n\n this.flushBuffer(4, true);\n\n var ps = this.parseObjState.raster;\n\n var position = ps.position,\n imageId = ps.imageId,\n imageUri = this.imageId2URI[imageId];\n\n var width = this.sx(ps.width),\n height = this.sy(ps.height);\n\n var centerX = position[0] + 0.5 * width,\n centerY = position[1] - 0.5 * height;\n\n this.currentVbb.addTexturedQuad(centerX, centerY, width, height, /*rotation*/0, 0xff00ffff, this.objectNumber, this.layer, this.currentVpId);\n this.currentImage = { dataURI: imageUri };\n\n //We can do one image per Vertex Buffer, so flush the quad\n this.flushBuffer(0, true);\n\n //TODO: we need to compare the contents of the raster also.\n this.currentGeomMetrics.rasters++;\n};\n\nF2D.prototype.actOnClip = function () {\n\n var v = this.parseObjState.clip;\n this.parseObjState.clip = {};\n\n this.clips.push(v);\n\n this.currentGeomMetrics.clips++;\n};\n\nF2D.prototype.actOnText = function () {\n //TODO: text not currently used for rendering,\n //but we collect the strings for search/lookup purposes\n this.strings[this.currentStringNumber] = this.parseObjState.text.string;\n\n this.currentGeomMetrics.texts++;\n this.currentGeomMetrics.strings.push(this.parseObjState.text.string);\n\n this.stringDbIds[this.currentStringNumber] = this.objectNumber;\n this.stringBoxes.push(this.currentStringBox.min.x, this.currentStringBox.min.y, this.currentStringBox.max.x, this.currentStringBox.max.y);\n if (this.extendStringsFetching) {\n this.stringCharWidths.push(this.parseObjState.text.charWidths);\n this.stringAngles.push(this.parseObjState.text.rotation);\n this.stringPositions.push(this.parseObjState.text.position);\n this.stringHeights.push(this.parseObjState.text.height);\n }\n this.currentStringBox.makeEmpty();\n this.currentStringNumber = -1;\n if (this.objectNumber < -1)\n this.objectNumber = 0; //reset the current object ID in case we were using a fake one for the text object\n};\n\n\nvar _tmpVector = new _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__.LmvVector3();\n\n//Polytriangle processing differs depending on whether\n//we want edge antialiasing and whether the renderer is using\n//hardware instancing or not, so it require a lot more\n//work than other geometries before sending raw primitives to the\n//vertex buffer.\nF2D.prototype.addPolyTriangle = function (points, colors, inds, color, dbId, layer, antialiasEdges) {\n var me = this;\n var edgeMap = null;\n\n //For non-text geometry we get good looking results with\n //1 pixel outlines. For text, which is generally small and highly detailed,\n //a 0.5 pixel AA outline does better.\n var aaLineWeight = -1.0; //negative = in pixel units\n if (this.objectStack[this.objectStack.length - 1] == F2dSemanticType.st_text)\n aaLineWeight = -0.5;\n\n\n function processEdge(iFrom, iTo) {\n if (iFrom > iTo) {\n var tmp = iFrom;\n iFrom = iTo;\n iTo = tmp;\n }\n\n if (!edgeMap[iFrom])\n edgeMap[iFrom] = [iTo];else\n {\n var adjacentVerts = edgeMap[iFrom];\n var idx = adjacentVerts.lastIndexOf(iTo);\n if (idx == -1)\n adjacentVerts.push(iTo); //first time we see this edge, so remember it as exterior edge\n else\n adjacentVerts[idx] = -1; //the second time we see an edge mark it as interior edge\n }\n }\n\n\n function addAllAntialiasEdges() {\n\n for (var i = 0, iEnd = edgeMap.length; i < iEnd; i++) {\n\n var adjacentVerts = edgeMap[i];\n if (!adjacentVerts)\n continue;\n\n for (var j = 0; j < adjacentVerts.length; j++) {\n var iTo = adjacentVerts[j];\n if (iTo == -1)\n continue; //an interior edge was here -- skip\n else {\n //exterior edge -- add an antialiasing line for it\n me.flushBuffer(4);\n me.currentVbb.addSegment(points[2 * i], points[2 * i + 1],\n points[2 * iTo], points[2 * iTo + 1],\n 0,\n aaLineWeight,\n me.mapColor(colors ? colors[i] : color, true),\n dbId, layer, me.currentVpId);\n {\n if (colors && colors[i] != colors[iTo])\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.warn(\"Gouraud triangle encountered. Will have incorrect antialiasing.\");}\n }\n }\n }\n }\n\n function antialiasOneEdge(iFrom, iTo) {\n if (iFrom > iTo) {\n var tmp = iFrom;\n iFrom = iTo;\n iTo = tmp;\n }\n\n var adjacentVerts = edgeMap[iFrom];\n if (!adjacentVerts)\n return;\n\n var idx = adjacentVerts.indexOf(iTo);\n if (idx != -1) {\n //exterior edge -- add an antialiasing line for it\n me.flushBuffer(4);\n me.currentVbb.addSegment(points[2 * iFrom], points[2 * iFrom + 1],\n points[2 * iTo], points[2 * iTo + 1],\n 0,\n aaLineWeight,\n me.mapColor(colors ? colors[iFrom] : color, true),\n dbId, layer, me.currentVpId);\n\n if (colors && colors[iFrom] != colors[iTo])\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.warn(\"Gouraud triangle encountered. Will have incorrect antialiasing.\");\n }\n }\n\n if (antialiasEdges) {\n edgeMap = new Array(points.length / 2);\n\n for (let i = 0, iEnd = inds.length; i < iEnd; i += 3) {\n let i0 = inds[i];\n let i1 = inds[i + 1];\n let i2 = inds[i + 2];\n\n processEdge(i0, i1);\n processEdge(i1, i2);\n processEdge(i2, i0);\n }\n }\n\n //If the polytriangle is part of tesselated text or hyperlink, add it to the current\n //text object bounding box\n if (this.currentStringNumber !== -1 || this.linkNumber) {\n let count = points.length / 2; // number of vertices\n for (let i = 0; i < count; ++i) {\n _tmpVector.set(points[2 * i], points[2 * i + 1], 0);\n\n if (this.currentStringNumber !== -1)\n this.currentStringBox.expandByPoint(_tmpVector);\n\n if (this.linkNumber)\n this.currentLinkBox.expandByPoint(_tmpVector);\n }\n }\n\n if (this.currentVbb.useInstancing) {\n let count = inds.length;\n for (let i = 0; i < count; i += 3) {\n let i0 = inds[i];\n let i1 = inds[i + 1];\n let i2 = inds[i + 2];\n\n this.flushBuffer(4);\n\n this.currentVbb.addTriangleGeom(points[2 * i0], points[2 * i0 + 1],\n points[2 * i1], points[2 * i1 + 1],\n points[2 * i2], points[2 * i2 + 1],\n this.mapColor(colors ? colors[i0] : color, true), dbId, layer, this.currentVpId);\n\n if (antialiasEdges) {\n antialiasOneEdge(i0, i1);\n antialiasOneEdge(i1, i2);\n antialiasOneEdge(i2, i0);\n }\n }\n } else\n {\n var count = points.length / 2; // number of vertices\n\n this.flushBuffer(count);\n var vbb = this.currentVbb;\n var vbase = vbb.vcount;\n\n for (var i = 0; i < count; ++i) {\n var x = points[2 * i];\n var y = points[2 * i + 1];\n vbb.addVertexPolytriangle(x, y, this.mapColor(colors ? colors[i] : color, true), dbId, layer, this.currentVpId);\n }\n\n vbb.addIndices(inds, vbase);\n\n if (antialiasEdges) {\n addAllAntialiasEdges();\n }\n\n }\n};\n\nF2D.prototype.actOnPolyTriangle = function () {\n\n var ptri = this.parseObjState.polyTriangle;\n this.parseObjState.polyTriangle = {};\n\n var points = ptri.points;\n var inds = ptri.indices;\n var colors = ptri.colors;\n\n if (!points || !inds) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_5__.logger.warn(\"Malformed polytriangle.\");\n return;\n }\n\n //Skip polytriangles that belong to text strings from the geometry stats\n //as they are not relevant to the sheet signature computation\n if (this.objectStack[this.objectStack.length - 1] == F2dSemanticType.st_text) {\n if (this.excludeTextGeometry) {\n return;\n }\n } else {\n this.currentGeomMetrics.ptris++;\n this.currentGeomMetrics.ptri_points += points.length / 2;\n this.currentGeomMetrics.ptri_indices += inds.length;\n }\n\n this.numPolytriangles++;\n this.numTriangles += inds.length / 3;\n\n this.addPolyTriangle(points, colors, inds, this.color, this.objectNumber, this.layer, true);\n};\n\nF2D.prototype.actOnViewport = function () {\n\n var v = this.parseObjState.viewport;\n this.parseObjState.viewport = {};\n\n v.geom_metrics = this.currentGeomMetrics = initGeomMetrics();\n\n this.viewports.push(v);\n this.currentVpId = this.viewports.length - 1;\n};\n\nF2D.prototype.createLayerGroups = function (layers) {\n\n // Temporary: build the layers tree. Eventually the extractor\n // should be the one doing this; we're incompletely faking it\n // by looking at the layer names.\n //\n var layersRoot=t his.layersRoot={ name: 'root', id: 'root', childrenByName: {}, isLayer: false };\n var groupId=0 ,layerId=0 ;\n\n for (var l in layers) {\n\n var index=p arseInt(l);\n var layerDef=l ayers[l];\n\n var name=t ypeof layerDef===\ "string\" ? layerDef : layerDef.name;\n\n if (!name)\n name=l ; //won 't get here...\n\n var path = name.split('| ');\n var parent = layersRoot;\n\n if (path.length > 1) {\n for (var i = 0; i < path.length - 1; ++i) {\n var pathComponent = path[i];\n var item = parent.childrenByName[pathComponent];\n if (!item) {\n item = {\n name: pathComponent,\n id: 'group- ' + groupId++,\n childrenByName: {},\n isLayer: false\n };\n parent.childrenByName[pathComponent] = item;\n }\n parent = item;\n }\n }\n\n parent.childrenByName[name] = {\n name: name,\n index: index,\n id: layerId++,\n childrenByName: {},\n isLayer: true\n };\n }\n\n function sortLayers(parent) {\n var children = Object.keys(parent.childrenByName).map(function (k) {return parent.childrenByName[k];});\n delete parent.childrenByName;\n\n if (children.length) {\n parent.children = children;\n\n parent.childCount = 0;\n\n for (var i = 0; i < children.length; ++i) {\n parent.childCount += sortLayers(children[i]);\n }\n\n children.sort(function (a, b) {\n if (a.isLayer && !b.isLayer) {\n return -1; // Layers before groups\n } else if (!a.isLayer && b.isLayer) {\n return 1;\n }\n return a.name.localeCompare(b.name, undefined, { sensitivity: 'base ', numeric: true }); // Sort layers and groups by name\n });\n }\n\n return parent.isLayer ? 1 : parent.childCount;\n }\n sortLayers(this.layersRoot);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFNLEdBQUdBLE1BQU0sQ0FBQ1MsTUFBTSxDQUFDLENBQUNILEdBQUcsQ0FBQzdOLENBQUMsR0FBQzROLEdBQUcsQ0FBQzVOLENBQUMsRUFBQzZOLEdBQUcsQ0FBQzVOLENBQUMsR0FBQzJOLEdBQUcsQ0FBQzNOLENBQUMsRUFBRTROLEdBQUcsQ0FBQzdOLENBQUMsR0FBQzROLEdBQUcsQ0FBQzVOLENBQUMsR0FBQ29OLEVBQUUsQ0FBQ3BOLENBQUMsRUFBQzZOLEdBQUcsQ0FBQzVOLENBQUMsR0FBQzJOLEdBQUcsQ0FBQzNOLENBQUMsR0FBQ21OLEVBQUUsQ0FBQ25OLENBQUMsRUFBRTROLEdBQUcsQ0FBQzdOLENBQUMsR0FBQ29OLEVBQUUsQ0FBQ3BOLENBQUMsRUFBQzZOLEdBQUcsQ0FBQzVOLENBQUMsR0FBQ21OLEVBQUUsQ0FBQ25OLENBQUMsRUFBRTROLEdBQUcsQ0FBQzdOLENBQUMsRUFBQzZOLEdBQUcsQ0FBQzVOLENBQUM7TUFDbEg2TixHQUFHLENBQUM5TixDQUFDLEVBQUM4TixHQUFHLENBQUM3TixDQUFDLEVBQUU2TixHQUFHLENBQUM5TixDQUFDLEdBQUMyTixHQUFHLENBQUMzTixDQUFDLEVBQUM4TixHQUFHLENBQUM3TixDQUFDLEdBQUMwTixHQUFHLENBQUMxTixDQUFDLEVBQUU2TixHQUFHLENBQUM5TixDQUFDLEdBQUMyTixHQUFHLENBQUMzTixDQUFDLEdBQUM0TixHQUFHLENBQUM1TixDQUFDLEdBQUNxTixFQUFFLENBQUNyTixDQUFDLEVBQUM4TixHQUFHLENBQUM3TixDQUFDLEdBQUMwTixHQUFHLENBQUMxTixDQUFDLEdBQUMyTixHQUFHLENBQUMzTixDQUFDLEdBQUNvTixFQUFFLENBQUNwTixDQUFDLEVBQUU2TixHQUFHLENBQUM5TixDQUFDLEdBQUM0TixHQUFHLENBQUM1TixDQUFDLEdBQUNxTixFQUFFLENBQUNyTixDQUFDLEVBQUM4TixHQUFHLENBQUM3TixDQUFDLEdBQUMyTixHQUFHLENBQUMzTixDQUFDLEdBQUNvTixFQUFFLENBQUNwTixDQUFDLENBQUMsQ0FBQztNQUM1SHVOLE1BQU0sR0FBR0EsTUFBTSxDQUFDUSxNQUFNLENBQUMsQ0FBQ0QsV0FBVyxFQUFFQSxXQUFXLEVBQUVBLFdBQVcsRUFBQ0EsV0FBVztNQUNyRUEsV0FBVyxFQUFFQSxXQUFXLEVBQUVBLFdBQVcsRUFBQ0EsV0FBVyxDQUFDLENBQUM7TUFDdkROLE9BQU8sR0FBR0EsT0FBTyxDQUFDTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUM7TUFDakMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsQ0FBQzs7TUFFcEIsSUFBSSxDQUFDbEssYUFBYSxHQUFHLElBQUk7SUFDN0I7O0lBRUEsSUFBSW1LLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQixJQUFJQyxTQUFTLEdBQUcsQ0FBQyxDQUFDOztJQUVsQixJQUFJLENBQUNDLGVBQWUsQ0FBQ1osTUFBTSxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBRSxVQUFVLEVBQUVTLFNBQVMsRUFBRUQsVUFBVSxFQUFFLEtBQUssQ0FBQzs7SUFFdkY7SUFDQVgsR0FBRyxDQUFDYyxVQUFVLENBQUNqQixDQUFDLENBQUNuTixDQUFDLEVBQUNtTixDQUFDLENBQUNsTixDQUFDLEVBQUNrTixDQUFDLENBQUNuTixDQUFDLEdBQUNvTixFQUFFLENBQUNwTixDQUFDLEVBQUNtTixDQUFDLENBQUNsTixDQUFDLEdBQUNtTixFQUFFLENBQUNuTixDQUFDLEVBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUVpTyxTQUFTLEVBQUVELFVBQVUsRUFBRSxJQUFJLENBQUM1SixXQUFXLENBQUM7SUFDekdpSixHQUFHLENBQUNjLFVBQVUsQ0FBQ2pCLENBQUMsQ0FBQ25OLENBQUMsR0FBQ29OLEVBQUUsQ0FBQ3BOLENBQUMsRUFBQ21OLENBQUMsQ0FBQ2xOLENBQUMsR0FBQ21OLEVBQUUsQ0FBQ25OLENBQUMsRUFBQ2tOLENBQUMsQ0FBQ25OLENBQUMsR0FBQ29OLEVBQUUsQ0FBQ3BOLENBQUMsR0FBQ3FOLEVBQUUsQ0FBQ3JOLENBQUMsRUFBQ21OLENBQUMsQ0FBQ2xOLENBQUMsR0FBQ21OLEVBQUUsQ0FBQ25OLENBQUMsR0FBQ29OLEVBQUUsQ0FBQ3BOLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRWlPLFNBQVMsRUFBRUQsVUFBVSxFQUFFLElBQUksQ0FBQzVKLFdBQVcsQ0FBQztJQUMzSGlKLEdBQUcsQ0FBQ2MsVUFBVSxDQUFDakIsQ0FBQyxDQUFDbk4sQ0FBQyxHQUFDb04sRUFBRSxDQUFDcE4sQ0FBQyxHQUFDcU4sRUFBRSxDQUFDck4sQ0FBQyxFQUFDbU4sQ0FBQyxDQUFDbE4sQ0FBQyxHQUFDbU4sRUFBRSxDQUFDbk4sQ0FBQyxHQUFDb04sRUFBRSxDQUFDcE4sQ0FBQyxFQUFDa04sQ0FBQyxDQUFDbk4sQ0FBQyxHQUFDcU4sRUFBRSxDQUFDck4sQ0FBQyxFQUFDbU4sQ0FBQyxDQUFDbE4sQ0FBQyxHQUFDb04sRUFBRSxDQUFDcE4sQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFaU8sU0FBUyxFQUFFRCxVQUFVLEVBQUUsSUFBSSxDQUFDNUosV0FBVyxDQUFDO0lBQzNIaUosR0FBRyxDQUFDYyxVQUFVLENBQUNqQixDQUFDLENBQUNuTixDQUFDLEdBQUNxTixFQUFFLENBQUNyTixDQUFDLEVBQUNtTixDQUFDLENBQUNsTixDQUFDLEdBQUNvTixFQUFFLENBQUNwTixDQUFDLEVBQUNrTixDQUFDLENBQUNuTixDQUFDLEVBQUNtTixDQUFDLENBQUNsTixDQUFDLEVBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUVpTyxTQUFTLEVBQUVELFVBQVUsRUFBRSxJQUFJLENBQUM1SixXQUFXLENBQUM7OztJQUd6RztJQUNBO0lBQ0E7SUFDQTs7SUFFQTtJQUNBO0lBQ0E7SUFDQTs7RUFFSjtBQUNKLENBQUM7O0FBRURqRixHQUFHLENBQUMrSSxTQUFTLENBQUNrRyxlQUFlLEdBQUcsVUFBU0MsR0FBRyxFQUFFO0VBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMzTixpQkFBaUIsQ0FBQ2pCLE1BQU0sRUFBRTtJQUNoQ3BFLGtEQUFNLENBQUN5USxJQUFJLENBQUMsNEJBQTRCLEdBQUd1QyxHQUFHLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQzdJLGVBQWUsQ0FBQyxJQUFJLENBQUNBLGVBQWUsQ0FBQy9GLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQztJQUNySCxPQUFPLEtBQUs7RUFDaEI7O0VBRUEsSUFBSTZPLFFBQVEsR0FBRyxJQUFJLENBQUM1TixpQkFBaUIsQ0FBQzZOLEtBQUssQ0FBQyxDQUFDO0VBQzdDLElBQUlDLFVBQVUsR0FBRyxJQUFJLENBQUNoSixlQUFlLENBQUMsSUFBSSxDQUFDQSxlQUFlLENBQUMvRixNQUFNLEdBQUMsQ0FBQyxDQUFDOztFQUVwRTtFQUNBO0VBQ0E7RUFDQSxJQUFJK08sVUFBVSxJQUFJLE9BQU8sSUFBSUYsUUFBUSxJQUFJLFlBQVksRUFBRTtJQUNuRCxJQUFJLENBQUN0QixTQUFTLENBQUNxQixHQUFHLENBQUM7SUFDbkIsT0FBTyxJQUFJO0VBQ2YsQ0FBQztFQUNJLElBQUlHLFVBQVUsRUFBRTtJQUNqQixJQUFJLENBQUMvSSxhQUFhLENBQUMrSSxVQUFVLENBQUMsQ0FBQ0YsUUFBUSxDQUFDLEdBQUdELEdBQUc7SUFDOUMsT0FBTyxJQUFJO0VBQ2Y7O0VBRUEsT0FBTyxLQUFLO0FBQ2hCLENBQUM7OztBQUdEbFAsR0FBRyxDQUFDK0ksU0FBUyxDQUFDdUcsV0FBVyxHQUFHLFlBQVc7RUFDbkMsSUFBSUMsQ0FBQyxHQUFHLElBQUksQ0FBQ2xELE1BQU07RUFDbkIsSUFBSW1ELElBQUksR0FBR0QsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUM7O0VBRXpCLElBQUltRCxHQUFHLEdBQUdGLENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDO0VBQ3hCLElBQUlvRCxHQUFHLEdBQUdILENBQUMsQ0FBQ0ksU0FBUyxDQUFDRixHQUFHLENBQUM7O0VBRTFCLFFBQVFELElBQUk7SUFDUixLQUFLOVIsZUFBZSxDQUFDQyxnQkFBZ0I7TUFDakMsSUFBSSxJQUFJLENBQUNzUixlQUFlLENBQUNTLEdBQUcsQ0FBQztNQUN6QjtNQUNKO0lBQ0osUUFBU3hULGtEQUFNLENBQUMwVCxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBRztFQUMxRTs7RUFFQSxPQUFPRixHQUFHO0FBQ2QsQ0FBQzs7O0FBR0QxUCxHQUFHLENBQUMrSSxTQUFTLENBQUMyRSxZQUFZLEdBQUcsWUFBVztFQUNwQyxJQUFJOUcsT0FBTyxHQUFHLElBQUksQ0FBQ04sYUFBYSxDQUFDTSxPQUFPO0VBQ3hDLElBQUksQ0FBQzFGLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQ0MsU0FBUyxDQUFDLEdBQUd5RixPQUFPO0VBQ3pDLElBQUksQ0FBQ3hGLE1BQU0sR0FBRyxJQUFJLENBQUNELFNBQVM7QUFDaEMsQ0FBQzs7O0FBR0RuQixHQUFHLENBQUMrSSxTQUFTLENBQUM4RyxVQUFVLEdBQUcsWUFBVztFQUNsQyxJQUFJTixDQUFDLEdBQUcsSUFBSSxDQUFDbEQsTUFBTTtFQUNuQixJQUFJbUQsSUFBSSxHQUFHRCxDQUFDLENBQUNqRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0IsSUFBSW9ELEdBQUcsR0FBRyxJQUFJLENBQUN0RCxtQkFBbUIsQ0FBQyxDQUFDOztFQUVwQyxRQUFRb0QsSUFBSTtJQUNSLEtBQUs5UixlQUFlLENBQUNDLGdCQUFnQjtNQUNqQyxJQUFJLElBQUksQ0FBQ3NSLGVBQWUsQ0FBQ1MsR0FBRyxDQUFDO01BQ3pCO01BQ0o7SUFDSixRQUFTeFQsa0RBQU0sQ0FBQzBULElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFHO0VBQ3pFOztFQUVBLE9BQU9GLEdBQUc7QUFDZCxDQUFDOzs7QUFHRDFQLEdBQUcsQ0FBQytJLFNBQVMsQ0FBQytHLGdCQUFnQixHQUFHLFlBQVc7O0VBRXhDLElBQUlQLENBQUMsR0FBRyxJQUFJLENBQUNsRCxNQUFNOztFQUVuQixJQUFJbUQsSUFBSSxHQUFHRCxDQUFDLENBQUNqRCxVQUFVLENBQUMsQ0FBQzs7RUFFekIsSUFBSTdJLEtBQUssR0FBRzhMLENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1QixJQUFJLENBQUM3SSxLQUFLLEVBQUU7RUFDWkEsS0FBSyxHQUFHQSxLQUFLLEdBQUcsQ0FBQzs7RUFFakIsSUFBSWlNLEdBQUcsR0FBRyxFQUFFO0VBQ1osSUFBSUssUUFBUTs7RUFFWixLQUFLLElBQUkzSCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUczRSxLQUFLLEVBQUUsRUFBRTJFLENBQUMsRUFBRTtJQUM1QjJILFFBQVEsR0FBRyxJQUFJLENBQUMzRCxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JDc0QsR0FBRyxDQUFDN0csSUFBSSxDQUFDa0gsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCTCxHQUFHLENBQUM3RyxJQUFJLENBQUNrSCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDekI7O0VBRUEsUUFBUVAsSUFBSTtJQUNSLEtBQUs5UixlQUFlLENBQUMyQixXQUFXO01BQzVCLElBQUksQ0FBQzJRLHdCQUF3QixDQUFDTixHQUFHLENBQUM7TUFDbEM7SUFDSixLQUFLaFMsZUFBZSxDQUFDK0IsTUFBTTtNQUN2QixJQUFJLENBQUN3USxRQUFRLENBQUNQLEdBQUcsQ0FBQztNQUNsQjtJQUNKLEtBQUtoUyxlQUFlLENBQUNDLGdCQUFnQjtNQUNqQyxJQUFJLElBQUksQ0FBQ3NSLGVBQWUsQ0FBQ1MsR0FBRyxDQUFDO01BQ3pCO01BQ0o7SUFDSixRQUFTeFQsa0RBQU0sQ0FBQzBULElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFHO0VBQ2hGOztFQUVBLE9BQU9GLEdBQUc7QUFDZCxDQUFDOztBQUVEMVAsR0FBRyxDQUFDK0ksU0FBUyxDQUFDbUgsYUFBYSxHQUFHLFlBQVc7RUFDckMsSUFBSVgsQ0FBQyxHQUFHLElBQUksQ0FBQ2xELE1BQU07RUFDbkIsSUFBSW1ELElBQUksR0FBR0QsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUM7RUFDekIsSUFBSTdJLEtBQUssR0FBRzhMLENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1QixJQUFJNkQsTUFBTSxHQUFHLEVBQUU7RUFDZixLQUFLLElBQUkvSCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUczRSxLQUFLLEVBQUUsRUFBRTJFLENBQUMsRUFBRTtJQUM1QitILE1BQU0sQ0FBQ3RILElBQUksQ0FBQzBHLENBQUMsQ0FBQ2EsU0FBUyxDQUFDLENBQUMsQ0FBQztFQUM5Qjs7RUFFQSxRQUFRWixJQUFJO0lBQ1IsS0FBSzlSLGVBQWUsQ0FBQ0MsZ0JBQWdCO01BQ2pDLElBQUksSUFBSSxDQUFDc1IsZUFBZSxDQUFDa0IsTUFBTSxDQUFDO01BQzVCO01BQ0o7SUFDSjtNQUNJLElBQUksQ0FBQ3ZELG9CQUFvQixDQUFDLGVBQWUsRUFBRTRDLElBQUksQ0FBQztNQUNoRDtFQUNSOztFQUVBLE9BQU9XLE1BQU07QUFDakIsQ0FBQzs7QUFFRG5RLEdBQUcsQ0FBQytJLFNBQVMsQ0FBQ3NILGdCQUFnQixHQUFHLFlBQVc7RUFDeEMsSUFBSWQsQ0FBQyxHQUFHLElBQUksQ0FBQ2xELE1BQU07RUFDbkIsSUFBSW1ELElBQUksR0FBR0QsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUM7RUFDekIsSUFBSTdJLEtBQUssR0FBRzhMLENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1QixJQUFJNkQsTUFBTSxHQUFHLEVBQUU7RUFDZixLQUFLLElBQUkvSCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUczRSxLQUFLLEVBQUUsRUFBRTJFLENBQUMsRUFBRTtJQUM1QitILE1BQU0sQ0FBQ3RILElBQUksQ0FBQzBHLENBQUMsQ0FBQ2UsVUFBVSxDQUFDLENBQUMsQ0FBQztFQUMvQjs7RUFFQSxRQUFRZCxJQUFJO0lBQ1IsS0FBSzlSLGVBQWUsQ0FBQ0MsZ0JBQWdCO01BQ2pDLElBQUksSUFBSSxDQUFDc1IsZUFBZSxDQUFDa0IsTUFBTSxDQUFDO01BQzVCO01BQ0o7SUFDSjtNQUNJLElBQUksQ0FBQ3ZELG9CQUFvQixDQUFDLGtCQUFrQixFQUFFNEMsSUFBSSxDQUFDO01BQ25EO0VBQ1I7O0VBRUEsT0FBT1csTUFBTTtBQUNqQixDQUFDOztBQUVEblEsR0FBRyxDQUFDK0ksU0FBUyxDQUFDd0gsY0FBYyxHQUFHLFlBQVc7RUFDdEMsSUFBSWhCLENBQUMsR0FBRyxJQUFJLENBQUNsRCxNQUFNO0VBQ25CLElBQUltRCxJQUFJLEdBQUdELENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDO0VBQ3pCLElBQUk3SSxLQUFLLEdBQUc4TCxDQUFDLENBQUNqRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsSUFBSTZELE1BQU0sR0FBRyxFQUFFO0VBQ2YsS0FBSyxJQUFJL0gsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHM0UsS0FBSyxFQUFFLEVBQUUyRSxDQUFDLEVBQUU7SUFDNUIrSCxNQUFNLENBQUN0SCxJQUFJLENBQUMwRyxDQUFDLENBQUNpQixRQUFRLENBQUMsQ0FBQyxDQUFDO0VBQzdCOztFQUVBLFFBQVFoQixJQUFJO0lBQ1IsS0FBSzlSLGVBQWUsQ0FBQ0MsZ0JBQWdCO01BQ2pDLElBQUksSUFBSSxDQUFDc1IsZUFBZSxDQUFDa0IsTUFBTSxDQUFDO01BQzVCO01BQ0o7SUFDSjtNQUNJLElBQUksQ0FBQ3ZELG9CQUFvQixDQUFDLGdCQUFnQixFQUFFNEMsSUFBSSxDQUFDO01BQ2pEO0VBQ1I7O0VBRUEsT0FBT1csTUFBTTtBQUNqQixDQUFDOzs7QUFHRG5RLEdBQUcsQ0FBQytJLFNBQVMsQ0FBQzBILGdCQUFnQixHQUFHLFlBQVc7RUFDeEMsSUFBSWxCLENBQUMsR0FBRyxJQUFJLENBQUNsRCxNQUFNO0VBQ25CLElBQUltRCxJQUFJLEdBQUdELENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDOztFQUV6QixJQUFJb0QsR0FBRyxHQUFHLEVBQUU7O0VBRVo7RUFDQSxJQUFJak0sS0FBSyxHQUFHOEwsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUM7O0VBRTFCLEtBQUssSUFBSWxFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzNFLEtBQUssRUFBRSxFQUFFMkUsQ0FBQyxFQUFFO0lBQzVCc0gsR0FBRyxDQUFDN0csSUFBSSxDQUFDMEcsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQSxRQUFRa0QsSUFBSTtJQUNSLEtBQUs5UixlQUFlLENBQUNDLGdCQUFnQjtNQUNqQyxJQUFJLElBQUksQ0FBQ3NSLGVBQWUsQ0FBQ1MsR0FBRyxDQUFDO01BQ3pCO01BQ0o7SUFDSjtNQUNJLElBQUksQ0FBQzlDLG9CQUFvQixDQUFDLGtCQUFrQixFQUFFNEMsSUFBSSxDQUFDO01BQ25EO0VBQ1I7O0VBRUEsT0FBT0UsR0FBRztBQUNkLENBQUM7OztBQUdEMVAsR0FBRyxDQUFDK0ksU0FBUyxDQUFDbEYsUUFBUSxHQUFHLFlBQVc7RUFDaEMsSUFBSTBMLENBQUMsR0FBRyxJQUFJLENBQUNsRCxNQUFNO0VBQ25CLElBQUltRCxJQUFJLEdBQUdELENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDO0VBQ3pCLElBQUk0QyxHQUFHLEdBQUdLLENBQUMsQ0FBQ2EsU0FBUyxDQUFDLENBQUM7O0VBRXZCLFFBQVFaLElBQUk7SUFDUixLQUFLOVIsZUFBZSxDQUFDWSxRQUFRO01BQ3pCLElBQUksQ0FBQzJJLEtBQUssR0FBRyxJQUFJLENBQUNnRixRQUFRLENBQUNpRCxHQUFHLEVBQUUsS0FBSyxDQUFDO01BQ3RDLElBQUksQ0FBQ2hLLGtCQUFrQixDQUFDa0osTUFBTSxFQUFFO01BQ2hDO0lBQ0osS0FBSzFRLGVBQWUsQ0FBQ0UsT0FBTztNQUN4QixJQUFJLENBQUM4UyxJQUFJLEdBQUcsSUFBSTtNQUNoQixJQUFJLENBQUN4SixTQUFTLEdBQUcsSUFBSSxDQUFDK0UsUUFBUSxDQUFDaUQsR0FBRyxFQUFFLElBQUksQ0FBQztNQUN6QyxJQUFJLENBQUNoSyxrQkFBa0IsQ0FBQ3lMLEtBQUssRUFBRTtNQUMvQjtJQUNKLEtBQUtqVCxlQUFlLENBQUNDLGdCQUFnQjtNQUNqQyxJQUFJLElBQUksQ0FBQ3NSLGVBQWUsQ0FBQ0MsR0FBRyxDQUFDO01BQ3pCO0lBQ1IsU0FBUztNQUNMLElBQUksQ0FBQ3RDLG9CQUFvQixDQUFDLFVBQVUsRUFBRTRDLElBQUksQ0FBQztNQUMzQztFQUNSOztFQUVBLE9BQU9OLEdBQUc7QUFDZCxDQUFDOztBQUVEbFAsR0FBRyxDQUFDK0ksU0FBUyxDQUFDNkgsU0FBUyxHQUFHLFlBQVc7RUFDbkMsSUFBSXBCLElBQUksR0FBRyxJQUFJLENBQUNuRCxNQUFNLENBQUNDLFVBQVUsQ0FBQyxDQUFDO0VBQ25DLFFBQVFrRCxJQUFJO0lBQ1IsS0FBSzlSLGVBQWUsQ0FBQ0csV0FBVztNQUM1QixJQUFJLENBQUM2UyxJQUFJLEdBQUcsS0FBSztNQUNqQixJQUFJLENBQUN4TCxrQkFBa0IsQ0FBQ3lMLEtBQUssRUFBRTtNQUMvQjtJQUNKO01BQ0ksSUFBSSxDQUFDL0Qsb0JBQW9CLENBQUMsV0FBVyxFQUFFNEMsSUFBSSxDQUFDO01BQzVDO0VBQ1I7QUFDRixDQUFDOztBQUVEeFAsR0FBRyxDQUFDK0ksU0FBUyxDQUFDOEgsV0FBVyxHQUFHLFlBQVc7RUFDbkMsSUFBSXRCLENBQUMsR0FBRyxJQUFJLENBQUNsRCxNQUFNO0VBQ25CLElBQUlXLGFBQWEsR0FBR3VDLENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDO0VBQ2xDLElBQUk0QyxHQUFHLEdBQUdLLENBQUMsQ0FBQ2pELFVBQVUsQ0FBQyxDQUFDOztFQUV4QixRQUFRVSxhQUFhO0lBQ2pCLEtBQUt0UCxlQUFlLENBQUNPLGNBQWM7TUFDL0IsSUFBSSxDQUFDNlMsVUFBVSxHQUFHLElBQUksQ0FBQ3ZGLEVBQUUsQ0FBQzJELEdBQUcsQ0FBQztNQUM5QixJQUFJLENBQUNoSyxrQkFBa0IsQ0FBQzZMLFlBQVksRUFBRTtNQUN0QztJQUNKLEtBQUtyVCxlQUFlLENBQUNvQixZQUFZO01BQzdCLElBQUksQ0FBQ29HLGtCQUFrQixDQUFDOEwsU0FBUyxFQUFFO01BQ25DO0lBQ0osS0FBS3RULGVBQWUsQ0FBQ3FCLFlBQVk7TUFDN0IsSUFBSSxDQUFDbUcsa0JBQWtCLENBQUMrTCxVQUFVLEVBQUU7TUFDcEM7SUFDSixLQUFLdlQsZUFBZSxDQUFDYyxZQUFZO0lBQ2pDLEtBQUtkLGVBQWUsQ0FBQ2UsWUFBWTtNQUM3QixJQUFJLENBQUNzSCxZQUFZLEdBQUdtSixHQUFHO01BQ3ZCLElBQUksQ0FBQy9JLGVBQWUsR0FBR3BELElBQUksQ0FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUNvRixlQUFlLEVBQUUrSSxHQUFHLENBQUM7TUFDMUQsSUFBSSxDQUFDaEssa0JBQWtCLENBQUNnTSxNQUFNLEVBQUU7TUFDaEM7SUFDSixLQUFLeFQsZUFBZSxDQUFDTSxPQUFPO01BQ3hCLElBQUksSUFBSSxDQUFDa0ksVUFBVSxFQUFFO1FBQ2pCLElBQUksQ0FBQ0wsU0FBUyxDQUFDLElBQUksQ0FBQ0ssVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDSixjQUFjLENBQUNxTCxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUNyTCxjQUFjLENBQUNvSCxTQUFTLENBQUMsQ0FBQztNQUNuQztNQUNBLElBQUksQ0FBQ2hILFVBQVUsR0FBR2dKLEdBQUc7TUFDckI7SUFDSixLQUFLeFIsZUFBZSxDQUFDSyxRQUFRO01BQ3pCLElBQUksQ0FBQ21ILGtCQUFrQixDQUFDdkIsTUFBTSxFQUFFO01BQ2hDLElBQUksQ0FBQ21ELEtBQUssR0FBRyxJQUFJLENBQUM3RixTQUFTLENBQUNpTyxHQUFHLENBQUM7TUFDaEM7SUFDSixLQUFLeFIsZUFBZSxDQUFDaUIsV0FBVztNQUM1QixJQUFJLENBQUN5QyxNQUFNLEdBQUc4TixHQUFHO01BQ2pCO0lBQ0osS0FBS3hSLGVBQWUsQ0FBQ0MsZ0JBQWdCO01BQ2pDLElBQUksSUFBSSxDQUFDc1IsZUFBZSxDQUFDQyxHQUFHLENBQUM7TUFDekI7TUFDSjtJQUNKO01BQ0k7RUFDUjs7RUFFQSxPQUFPQSxHQUFHO0FBQ2QsQ0FBQzs7QUFFRGxQLEdBQUcsQ0FBQytJLFNBQVMsQ0FBQ3FJLFVBQVUsR0FBRyxZQUFXO0VBQ2xDLElBQUk3QixDQUFDLEdBQUcsSUFBSSxDQUFDbEQsTUFBTTtFQUNuQixJQUFJVyxhQUFhLEdBQUd1QyxDQUFDLENBQUNqRCxVQUFVLENBQUMsQ0FBQztFQUNsQyxJQUFJNEMsR0FBRyxHQUFHSyxDQUFDLENBQUM4QixVQUFVLENBQUMsQ0FBQzs7RUFFeEIsUUFBUXJFLGFBQWE7SUFDakIsS0FBS3RQLGVBQWUsQ0FBQ1EsY0FBYztNQUMvQjtJQUNKLEtBQUtSLGVBQWUsQ0FBQ1MsZUFBZTtNQUNoQztJQUNKLEtBQUtULGVBQWUsQ0FBQ0MsZ0JBQWdCO01BQ2pDLElBQUksSUFBSSxDQUFDc1IsZUFBZSxDQUFDQyxHQUFHLENBQUMsRUFBRTtRQUMzQjtNQUNKO01BQ0E7SUFDSjtNQUNJO0VBQ1I7O0VBRUEsT0FBT0EsR0FBRztBQUNkLENBQUM7O0FBRURsUCxHQUFHLENBQUMrSSxTQUFTLENBQUN1SSxnQkFBZ0IsR0FBRyxZQUFXO0VBQ3hDLElBQUkvQixDQUFDLEdBQUcsSUFBSSxDQUFDbEQsTUFBTTtFQUNuQixJQUFJbUQsSUFBSSxHQUFHRCxDQUFDLENBQUNqRCxVQUFVLENBQUMsQ0FBQztFQUN6QixJQUFJLElBQUksQ0FBQ0MsWUFBWSxDQUFDaUQsSUFBSSxFQUFFOVIsZUFBZSxDQUFDMEIsTUFBTSxFQUFFLGtCQUFrQixDQUFDLEVBQUU7O0VBRXpFLElBQUltUyxLQUFLLEdBQUcsSUFBSSxDQUFDbkYsbUJBQW1CLENBQUMsQ0FBQztFQUN0QyxJQUFJb0YsS0FBSyxHQUFHakMsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUMsRUFBRSw4QkFBK0JtRixLQUFLLEdBQUdsQyxDQUFDLENBQUM4QixVQUFVLENBQUMsQ0FBQyxDQUFFSyxHQUFHLEdBQUduQyxDQUFDLENBQUM4QixVQUFVLENBQUMsQ0FBQzs7RUFFdkcsSUFBSSxDQUFDTSxnQkFBZ0IsQ0FBQ0osS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUVFLEtBQUssRUFBRUMsR0FBRyxFQUFFLElBQUksQ0FBQ2xHLEVBQUUsQ0FBQ2dHLEtBQUssQ0FBQyxDQUFDO0FBQ3pFLENBQUM7O0FBRUR4UixHQUFHLENBQUMrSSxTQUFTLENBQUM2SSxXQUFXLEdBQUcsWUFBVztFQUNuQyxJQUFJckMsQ0FBQyxHQUFHLElBQUksQ0FBQ2xELE1BQU07RUFDbkIsSUFBSW1ELElBQUksR0FBR0QsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUM7RUFDekIsSUFBSSxJQUFJLENBQUNDLFlBQVksQ0FBQ2lELElBQUksRUFBRTlSLGVBQWUsQ0FBQzBCLE1BQU0sRUFBRSxhQUFhLENBQUMsRUFBRTs7RUFFcEUsSUFBSW1TLEtBQUssR0FBRyxJQUFJLENBQUNuRixtQkFBbUIsQ0FBQyxDQUFDO0VBQ3RDLElBQUlvRixLQUFLLEdBQUdqQyxDQUFDLENBQUNqRCxVQUFVLENBQUMsQ0FBQzs7RUFFMUIsSUFBSSxDQUFDdUYsbUJBQW1CLENBQUNOLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQy9GLEVBQUUsQ0FBQ2dHLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUM7O0FBRUR4UixHQUFHLENBQUMrSSxTQUFTLENBQUMrSSxRQUFRLEdBQUcsWUFBVztFQUNoQyxJQUFJdkMsQ0FBQyxHQUFHLElBQUksQ0FBQ2xELE1BQU07RUFDbkIsSUFBSW1ELElBQUksR0FBR0QsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUM7RUFDekIsSUFBSSxJQUFJLENBQUNDLFlBQVksQ0FBQ2lELElBQUksRUFBRTlSLGVBQWUsQ0FBQzBCLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTs7RUFFakU7RUFDQSxJQUFJbVMsS0FBSyxHQUFHLElBQUksQ0FBQ25GLG1CQUFtQixDQUFDLENBQUM7O0VBRXRDLElBQUlvRixLQUFLLEdBQUdqQyxDQUFDLENBQUNqRCxVQUFVLENBQUMsQ0FBQztFQUMxQixJQUFJeUYsS0FBSyxHQUFHeEMsQ0FBQyxDQUFDakQsVUFBVSxDQUFDLENBQUM7O0VBRTFCLElBQUkwRixRQUFRLEdBQUd6QyxDQUFDLENBQUM4QixVQUFVLENBQUMsQ0FBQztFQUM3QixJQUFJSSxLQUFLLEdBQUdsQyxDQUFDLENBQUM4QixVQUFVLENBQUMsQ0FBQztFQUMxQixJQUFJSyxHQUFHLEdBQUduQyxDQUFDLENBQUM4QixVQUFVLENBQUMsQ0FBQzs7RUFFeEIsSUFBSSxDQUFDWSxRQUFRLENBQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUEsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFRSxLQUFLLEVBQUVDLEdBQUcsRUFBRSxJQUFJLENBQUNsRyxFQUFFLENBQUNnRyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUM5RixFQUFFLENBQUNxRyxLQUFLLENBQUMsRUFBRUMsUUFBUSxDQUFDO0FBQzNGLENBQUM7O0FBRURoUyxHQUFHLENBQUMrSSxTQUFTLENBQUNtSixhQUFhLEdBQUcsWUFBVztFQUNyQyxJQUFJQyxTQUFTLEdBQUcsSUFBSSxDQUFDOUYsTUFBTSxDQUFDQyxVQUFVLENBQUMsQ0FBQzs7RUFFeEMsUUFBUTZGLFNBQVM7SUFDYixLQUFLN1YsV0FBVyxDQUFDRSxPQUFPO01BQ3BCLElBQUksQ0FBQ29VLFNBQVMsQ0FBQyxDQUFDO01BQ2hCO0lBQ0osS0FBS3RVLFdBQVcsQ0FBQ0ksTUFBTTtNQUNuQixJQUFJLENBQUNtSCxRQUFRLENBQUMsQ0FBQztNQUNmO0lBQ0osS0FBS3ZILFdBQVcsQ0FBQ0MsU0FBUztNQUN0QixJQUFJLENBQUN3USxXQUFXLENBQUMsQ0FBQztNQUNsQjtJQUNKLEtBQUt6USxXQUFXLENBQUNPLFNBQVM7TUFDdEIsSUFBSSxDQUFDZ1UsV0FBVyxDQUFDLENBQUM7TUFDbEI7SUFDSixLQUFLdlUsV0FBVyxDQUFDUSxlQUFlO01BQzVCLElBQUksQ0FBQytTLFVBQVUsQ0FBQyxDQUFDO01BQ2pCO0lBQ0osS0FBS3ZULFdBQVcsQ0FBQ0ssUUFBUTtNQUNyQixJQUFJLENBQUN5VSxVQUFVLENBQUMsQ0FBQztNQUNqQjtJQUNKLEtBQUs5VSxXQUFXLENBQUNjLHFCQUFxQjtNQUNsQyxJQUFJLENBQUMwUyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3ZCO0lBQ0osS0FBS3hULFdBQVcsQ0FBQ2lCLGVBQWU7TUFDNUIsSUFBSSxDQUFDK1QsZ0JBQWdCLENBQUMsQ0FBQztNQUN2QjtJQUNKLEtBQUtoVixXQUFXLENBQUNnQixTQUFTO01BQ3RCLElBQUksQ0FBQ3NVLFdBQVcsQ0FBQyxDQUFDO01BQ2xCO0lBQ0osS0FBS3RWLFdBQVcsQ0FBQ2UsTUFBTTtNQUNuQixJQUFJLENBQUN5VSxRQUFRLENBQUMsQ0FBQztNQUNmO0lBQ0osS0FBS3hWLFdBQVcsQ0FBQ1UsWUFBWTtNQUN6QixJQUFJLENBQUNrVCxhQUFhLENBQUMsQ0FBQztNQUNwQjtJQUNKLEtBQUs1VCxXQUFXLENBQUNhLGVBQWU7TUFDNUIsSUFBSSxDQUFDc1QsZ0JBQWdCLENBQUMsQ0FBQztNQUN2QjtJQUNKLEtBQUtuVSxXQUFXLENBQUNTLGFBQWE7TUFDMUIsSUFBSSxDQUFDd1QsY0FBYyxDQUFDLENBQUM7TUFDckI7SUFDSixLQUFLalUsV0FBVyxDQUFDa0IsU0FBUztNQUN0QixJQUFJLENBQUM4UixXQUFXLENBQUMsQ0FBQztNQUNsQjtJQUNKLEtBQUtoVCxXQUFXLENBQUNZLGVBQWU7TUFDNUIsSUFBSSxDQUFDbVQsZ0JBQWdCLENBQUMsQ0FBQztNQUN2QjtJQUNKO01BQ0ksSUFBSSxDQUFDdEksS0FBSyxHQUFHLElBQUk7TUFDakI3TCxrREFBTSxDQUFDMFQsSUFBSSxDQUFDLCtCQUErQixHQUFHdUMsU0FBUyxDQUFDO01BQ3hEO0VBQ1I7QUFDSixDQUFDOztBQUVEblMsR0FBRyxDQUFDK0ksU0FBUyxDQUFDcUosVUFBVSxHQUFHLFlBQVc7RUFDbEMsSUFBSS9GLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU0sR0FBRyxJQUFJcFEsNERBQVcsQ0FBQyxJQUFJLENBQUNtTixJQUFJLENBQUM7O0VBRXJEO0VBQ0EsSUFBSWlKLE1BQU0sR0FBR2hHLE1BQU0sQ0FBQ3NELFNBQVMsQ0FBQyxDQUFDLENBQUM7O0VBRWhDLElBQUkwQyxNQUFNLEtBQUssS0FBSyxFQUFFO0lBQ2xCblcsa0RBQU0sQ0FBQzZMLEtBQUssQ0FBQyx1QkFBdUIsR0FBR3NLLE1BQU0sRUFBRWxXLGdFQUFlLENBQUNDLHVEQUFVLENBQUNrVyxRQUFRLENBQUMsQ0FBQztJQUNwRixPQUFPLEtBQUs7RUFDaEI7O0VBRUEsSUFBSUMsWUFBWSxHQUFHbEcsTUFBTSxDQUFDc0QsU0FBUyxDQUFDLENBQUMsQ0FBQztFQUN0QyxJQUFJNEMsWUFBWSxLQUFLLElBQUksRUFBRTtJQUN2QnJXLGtEQUFNLENBQUM2TCxLQUFLLENBQUMsd0RBQXdELEdBQUd3SyxZQUFZLEVBQUVwVyxnRUFBZSxDQUFDQyx1REFBVSxDQUFDa1csUUFBUSxDQUFDLENBQUM7SUFDM0gsT0FBTyxLQUFLO0VBQ2hCOztFQUVBLElBQUlFLEdBQUcsR0FBR25HLE1BQU0sQ0FBQ3NELFNBQVMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsSUFBSTZDLEdBQUcsS0FBSyxHQUFHLEVBQUU7SUFDYnRXLGtEQUFNLENBQUM2TCxLQUFLLENBQUMsNEJBQTRCLEVBQUU1TCxnRUFBZSxDQUFDQyx1REFBVSxDQUFDa1csUUFBUSxDQUFDLENBQUM7SUFDaEYsT0FBTyxLQUFLO0VBQ2hCOztFQUVBLElBQUlHLFlBQVksR0FBR3BHLE1BQU0sQ0FBQ3NELFNBQVMsQ0FBQyxDQUFDLENBQUM7RUFDdEMsT0FBTyxJQUFJO0FBQ2YsQ0FBQzs7QUFFRDNQLEdBQUcsQ0FBQytJLFNBQVMsQ0FBQ00sS0FBSyxHQUFHLFlBQVc7RUFDN0I7RUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDK0ksVUFBVSxDQUFDLENBQUM7RUFDbEI7O0VBRUosSUFBSS9GLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU07RUFDeEIsT0FBT0EsTUFBTSxDQUFDcUcsTUFBTSxHQUFHckcsTUFBTSxDQUFDc0csVUFBVSxFQUFFO0lBQ3RDLElBQUksQ0FBQ1QsYUFBYSxDQUFDLENBQUM7SUFDcEIsSUFBSSxJQUFJLENBQUNuSyxLQUFLO0lBQ1Y7SUFDSixJQUFJLENBQUNwRCxPQUFPLEVBQUU7RUFDbEI7O0VBRUEsSUFBSSxJQUFJLENBQUN1QixVQUFVLEVBQUU7SUFDakIsSUFBSSxDQUFDTCxTQUFTLENBQUMsSUFBSSxDQUFDSyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUNKLGNBQWMsQ0FBQ3FMLEtBQUssQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQ3JMLGNBQWMsQ0FBQ29ILFNBQVMsQ0FBQyxDQUFDO0VBQ25DOztFQUVBLElBQUksQ0FBQ3JDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQ3pCLElBQUksQ0FBQ3RELFVBQVUsR0FBRyxJQUFJOztFQUV0QixJQUFJLENBQUM4RSxNQUFNLEdBQUcsSUFBSTtFQUNsQixJQUFJLENBQUNqRCxJQUFJLEdBQUcsSUFBSTs7RUFFaEJsTixrREFBTSxDQUFDMFQsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQ2pMLE9BQU8sQ0FBQztBQUNoRSxDQUFDOztBQUVEM0UsR0FBRyxDQUFDK0ksU0FBUyxDQUFDYSxXQUFXLEdBQUcsVUFBU3FCLEtBQUssRUFBRTs7RUFFeEMsSUFBSSxJQUFJLENBQUM3QixJQUFJLEVBQUU7SUFDWCxJQUFJaUQsTUFBTSxHQUFHLElBQUksQ0FBQ0EsTUFBTSxHQUFHLElBQUlwUSw0REFBVyxDQUFDLElBQUksQ0FBQ21OLElBQUksQ0FBQztJQUNyRCxPQUFPaUQsTUFBTSxDQUFDcUcsTUFBTSxHQUFHckcsTUFBTSxDQUFDc0csVUFBVSxFQUFFO01BQ3RDLElBQUksQ0FBQ1QsYUFBYSxDQUFDLENBQUM7TUFDcEIsSUFBSSxJQUFJLENBQUNuSyxLQUFLO01BQ1Y7TUFDSixJQUFJLENBQUNwRCxPQUFPLEVBQUU7SUFDbEI7RUFDSixDQUFDLE1BQU0sSUFBSSxDQUFDc0csS0FBSyxFQUFFO0lBQ2YvTyxrREFBTSxDQUFDeVEsSUFBSSxDQUFDLHVHQUF1RyxDQUFDO0VBQ3hIOztFQUVBLElBQUkxQixLQUFLLEVBQUU7SUFDUCxJQUFJLENBQUNKLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0VBQzdCOztFQUVBLElBQUksQ0FBQ3dCLE1BQU0sR0FBRyxJQUFJO0VBQ2xCLElBQUksQ0FBQ2pELElBQUksR0FBRyxJQUFJO0FBQ3BCLENBQUM7O0FBRUQ7O0FBRUFwSixHQUFHLENBQUMrSSxTQUFTLENBQUNpSCx3QkFBd0IsR0FBRyxVQUFTN0IsTUFBTSxFQUFFOztFQUV0RCxJQUFJLENBQUN0RCxXQUFXLENBQUMsQ0FBQzs7RUFFbEI7RUFDQTs7RUFFQSxJQUFJcEgsS0FBSyxHQUFHMEssTUFBTSxDQUFDN04sTUFBTSxHQUFHLENBQUM7O0VBRTdCLElBQUlzUyxRQUFRLEdBQUcsQ0FBQztFQUNoQixJQUFJQyxFQUFFLEdBQUcxRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLElBQUkyRSxFQUFFLEdBQUczRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLEtBQUssSUFBSS9GLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzNFLEtBQUssRUFBRSxFQUFFMkUsQ0FBQyxFQUFFO0lBQzVCLElBQUkySyxFQUFFLEdBQUc1RSxNQUFNLENBQUMsQ0FBQyxHQUFDL0YsQ0FBQyxDQUFDO0lBQ3BCLElBQUk0SyxFQUFFLEdBQUc3RSxNQUFNLENBQUMsQ0FBQyxHQUFDL0YsQ0FBQyxHQUFDLENBQUMsQ0FBQzs7SUFFdEI7SUFDQSxJQUFJLENBQUNiLFVBQVUsQ0FBQ3lILFVBQVUsQ0FBQzZELEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUosUUFBUSxFQUFFLElBQUksQ0FBQzlCLFVBQVUsRUFBRSxJQUFJLENBQUM3SixLQUFLLEVBQUUsSUFBSSxDQUFDbEIsWUFBWSxFQUFFLElBQUksQ0FBQ2UsS0FBSyxFQUFFLElBQUksQ0FBQzdCLFdBQVcsQ0FBQzs7SUFFbEkyTixRQUFRLElBQUk3UCxJQUFJLENBQUNrUSxJQUFJLENBQUMsQ0FBQ0YsRUFBRSxHQUFDRixFQUFFLEtBQUdFLEVBQUUsR0FBQ0YsRUFBRSxDQUFDLEdBQUcsQ0FBQ0csRUFBRSxHQUFDRixFQUFFLEtBQUdFLEVBQUUsR0FBQ0YsRUFBRSxDQUFDLENBQUM7O0lBRXhERCxFQUFFLEdBQUdFLEVBQUU7SUFDUEQsRUFBRSxHQUFHRSxFQUFFO0VBQ1g7O0VBRUEsSUFBSSxDQUFDckwsWUFBWSxFQUFHO0VBQ3BCLElBQUksQ0FBQ0MsV0FBVyxJQUFJbkUsS0FBSyxHQUFHLENBQUM7O0VBRTdCLElBQUksQ0FBQ3lCLGtCQUFrQixDQUFDZ08sTUFBTSxFQUFFO0VBQ2hDLElBQUksQ0FBQ2hPLGtCQUFrQixDQUFDaU8sWUFBWSxJQUFJMVAsS0FBSyxHQUFHLENBQUM7QUFDckQsQ0FBQzs7QUFFRHpELEdBQUcsQ0FBQytJLFNBQVMsQ0FBQ2tILFFBQVEsR0FBRyxVQUFTOUIsTUFBTSxFQUFFOztFQUV0QyxJQUFJLENBQUNqSixrQkFBa0IsQ0FBQ2tPLElBQUksRUFBRTs7RUFFOUIsSUFBSVAsRUFBRSxHQUFHMUUsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNsQixJQUFJMkUsRUFBRSxHQUFHM0UsTUFBTSxDQUFDLENBQUMsQ0FBQzs7RUFFbEIsSUFBSSxDQUFDMEQsbUJBQW1CLENBQUNnQixFQUFFLEVBQUVDLEVBQUUsRUFBRSxJQUFJLENBQUN0SCxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3RELENBQUM7OztBQUdEeEwsR0FBRyxDQUFDK0ksU0FBUyxDQUFDOEksbUJBQW1CLEdBQUcsVUFBU3dCLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsRUFBRTtFQUNwRTtFQUNBLElBQUksQ0FBQzNJLFdBQVcsQ0FBQyxDQUFDO0VBQ2xCLElBQUksQ0FBQ3BELFVBQVUsRUFBRTs7RUFFakIsSUFBSSxDQUFDK0wsU0FBUztFQUNWLElBQUksQ0FBQ3RPLGtCQUFrQixDQUFDdU8sT0FBTyxFQUFFOztFQUVyQyxJQUFJLElBQUksQ0FBQy9DLElBQUksRUFBRTtJQUNYO0lBQ0E7SUFDQTtJQUNBLElBQUksQ0FBQ25KLFVBQVUsQ0FBQ3lILFVBQVUsQ0FBQ3FFLEVBQUUsRUFBRUMsRUFBRSxFQUFFRCxFQUFFLEVBQUVDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHQyxNQUFNLEVBQUUsSUFBSSxDQUFDdE0sS0FBSyxFQUFFLElBQUksQ0FBQ2xCLFlBQVk7SUFDbkYsSUFBSSxDQUFDZSxLQUFLLEVBQUUsSUFBSSxDQUFDN0IsV0FBVyxDQUFDO0VBQ3JDLENBQUMsTUFBTTtJQUNILElBQUksQ0FBQ3NDLFVBQVUsQ0FBQ21NLE1BQU0sQ0FBQ0wsRUFBRSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBR3ZRLElBQUksQ0FBQ0MsRUFBRSxFQUFFLFNBQVN1USxNQUFNLEVBQUUsU0FBU0EsTUFBTSxFQUFFLFFBQVEsR0FBRztJQUN4RixJQUFJLENBQUN6QyxVQUFVLEVBQUUsSUFBSSxDQUFDN0osS0FBSyxFQUFFLElBQUksQ0FBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUNlLEtBQUssRUFBRSxJQUFJLENBQUM3QixXQUFXLENBQUM7RUFDckY7QUFDSixDQUFDOztBQUVEakYsR0FBRyxDQUFDK0ksU0FBUyxDQUFDNEksZ0JBQWdCLEdBQUcsVUFBUzBCLEVBQUUsRUFBRUMsRUFBRSxFQUFFN0IsS0FBSyxFQUFFQyxHQUFHLEVBQUU2QixNQUFNLEVBQUU7RUFDbEUsSUFBSSxDQUFDOUwsVUFBVSxFQUFFO0VBQ2pCLElBQUksQ0FBQ3ZDLGtCQUFrQixDQUFDeU8sU0FBUyxFQUFFO0VBQ25DLElBQUksQ0FBQzlJLFdBQVcsQ0FBQyxDQUFDOztFQUV0Qjs7RUFFSSxJQUFJLENBQUN0RCxVQUFVLENBQUNtTSxNQUFNLENBQUNMLEVBQUUsRUFBRUMsRUFBRSxFQUFFN0IsS0FBSyxFQUFFQyxHQUFHLEVBQUUsU0FBUzZCLE1BQU0sRUFBRSxTQUFTQSxNQUFNLEVBQUUsUUFBUSxHQUFHO0VBQ3BGLElBQUksQ0FBQ3pDLFVBQVUsRUFBRSxJQUFJLENBQUM3SixLQUFLLEVBQUUsSUFBSSxDQUFDbEIsWUFBWSxFQUFFLElBQUksQ0FBQ2UsS0FBSyxFQUFFLElBQUksQ0FBQzdCLFdBQVcsQ0FBQztBQUNyRixDQUFDOztBQUVEakYsR0FBRyxDQUFDK0ksU0FBUyxDQUFDa0osUUFBUSxHQUFHLFVBQVNvQixFQUFFLEVBQUVDLEVBQUUsRUFBRTdCLEtBQUssRUFBRUMsR0FBRyxFQUFFRixLQUFLLEVBQUVPLEtBQUssRUFBRUMsUUFBUSxFQUFFO0VBQzFFLElBQUksQ0FBQ3RLLFdBQVcsRUFBRTtFQUNsQixJQUFJLENBQUN4QyxrQkFBa0IsQ0FBQzBPLElBQUksRUFBRTtFQUM5QjtFQUNBLElBQUksQ0FBQy9JLFdBQVcsQ0FBQyxDQUFDO0VBQ2xCLElBQUksQ0FBQ3RELFVBQVUsQ0FBQ21NLE1BQU0sQ0FBQ0wsRUFBRSxFQUFFQyxFQUFFLEVBQUU3QixLQUFLLEVBQUVDLEdBQUcsRUFBRUYsS0FBSyxFQUFFTyxLQUFLLEVBQUVDLFFBQVE7RUFDN0QsSUFBSSxDQUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQzdKLEtBQUssRUFBRSxJQUFJLENBQUNsQixZQUFZLEVBQUUsSUFBSSxDQUFDZSxLQUFLLEVBQUUsSUFBSSxDQUFDN0IsV0FBVyxDQUFDO0FBQ3JGLENBQUM7O0FBRURqRixHQUFHLENBQUMrSSxTQUFTLENBQUN5RSxXQUFXLEdBQUcsWUFBVzs7RUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQ25NLGlCQUFpQjtFQUN2Qjs7RUFFSixJQUFJLENBQUN3SixXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzs7RUFFekIsSUFBSWdKLEVBQUUsR0FBRyxJQUFJLENBQUN2TixhQUFhLENBQUNJLE1BQU07O0VBRWxDLElBQUlxSixRQUFRLEdBQUc4RCxFQUFFLENBQUM5RCxRQUFRO0lBQ3RCK0QsT0FBTyxHQUFJRCxFQUFFLENBQUNDLE9BQU87SUFDckJDLFFBQVEsR0FBRyxJQUFJLENBQUM3TCxXQUFXLENBQUM0TCxPQUFPLENBQUM7O0VBRXhDLElBQUlFLEtBQUssR0FBSSxJQUFJLENBQUN4SSxFQUFFLENBQUNxSSxFQUFFLENBQUNHLEtBQUssQ0FBQztJQUMxQkMsTUFBTSxHQUFHLElBQUksQ0FBQ3ZJLEVBQUUsQ0FBQ21JLEVBQUUsQ0FBQ0ksTUFBTSxDQUFDOztFQUUvQixJQUFJQyxPQUFPLEdBQUduRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHaUUsS0FBSztJQUNuQ0csT0FBTyxHQUFHcEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBR2tFLE1BQU07O0VBRXhDLElBQUksQ0FBQzFNLFVBQVUsQ0FBQzZNLGVBQWUsQ0FBQ0YsT0FBTyxFQUFFQyxPQUFPLEVBQUVILEtBQUssRUFBRUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUNsTyxZQUFZLEVBQUUsSUFBSSxDQUFDZSxLQUFLLEVBQUUsSUFBSSxDQUFDN0IsV0FBVyxDQUFDO0VBQzVJLElBQUksQ0FBQ3lGLFlBQVksR0FBRyxFQUFFMkosT0FBTyxFQUFFTixRQUFRLENBQUMsQ0FBQzs7RUFFekM7RUFDQSxJQUFJLENBQUNsSixXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzs7RUFFekI7RUFDQSxJQUFJLENBQUMzRixrQkFBa0IsQ0FBQ29QLE9BQU8sRUFBRTtBQUNyQyxDQUFDOztBQUVEdFUsR0FBRyxDQUFDK0ksU0FBUyxDQUFDd0UsU0FBUyxHQUFHLFlBQVc7O0VBRWpDLElBQUlnSCxDQUFDLEdBQUcsSUFBSSxDQUFDak8sYUFBYSxDQUFDRyxJQUFJO0VBQy9CLElBQUksQ0FBQ0gsYUFBYSxDQUFDRyxJQUFJLEdBQUcsQ0FBQyxDQUFDOztFQUU1QixJQUFJLENBQUN0QixLQUFLLENBQUMwRCxJQUFJLENBQUMwTCxDQUFDLENBQUM7O0VBRWxCLElBQUksQ0FBQ3JQLGtCQUFrQixDQUFDQyxLQUFLLEVBQUU7QUFDbkMsQ0FBQzs7QUFFRG5GLEdBQUcsQ0FBQytJLFNBQVMsQ0FBQzBFLFNBQVMsR0FBRyxZQUFXO0VBQ2pDO0VBQ0E7RUFDQSxJQUFJLENBQUNySSxPQUFPLENBQUMsSUFBSSxDQUFDTyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQ1csYUFBYSxDQUFDSyxJQUFJLENBQUM2TixNQUFNOztFQUV2RSxJQUFJLENBQUN0UCxrQkFBa0IsQ0FBQ3VQLEtBQUssRUFBRTtFQUMvQixJQUFJLENBQUN2UCxrQkFBa0IsQ0FBQ0UsT0FBTyxDQUFDeUQsSUFBSSxDQUFDLElBQUksQ0FBQ3ZDLGFBQWEsQ0FBQ0ssSUFBSSxDQUFDNk4sTUFBTSxDQUFDOztFQUVwRSxJQUFJLENBQUNuUCxXQUFXLENBQUMsSUFBSSxDQUFDTSxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQ0ksWUFBWTtFQUM5RCxJQUFJLENBQUNULFdBQVcsQ0FBQ3VELElBQUksQ0FBQyxJQUFJLENBQUNqRCxnQkFBZ0IsQ0FBQ2pGLEdBQUcsQ0FBQ0MsQ0FBQyxFQUFFLElBQUksQ0FBQ2dGLGdCQUFnQixDQUFDakYsR0FBRyxDQUFDRSxDQUFDLEVBQUUsSUFBSSxDQUFDK0UsZ0JBQWdCLENBQUM3RSxHQUFHLENBQUNILENBQUMsRUFBRSxJQUFJLENBQUNnRixnQkFBZ0IsQ0FBQzdFLEdBQUcsQ0FBQ0YsQ0FBQyxDQUFDO0VBQ3pJLElBQUksSUFBSSxDQUFDZ0UscUJBQXFCLEVBQUU7SUFDNUIsSUFBSSxDQUFDVSxnQkFBZ0IsQ0FBQ3NELElBQUksQ0FBQyxJQUFJLENBQUN2QyxhQUFhLENBQUNLLElBQUksQ0FBQytOLFVBQVUsQ0FBQztJQUM5RCxJQUFJLENBQUNsUCxZQUFZLENBQUNxRCxJQUFJLENBQUMsSUFBSSxDQUFDdkMsYUFBYSxDQUFDSyxJQUFJLENBQUNxTCxRQUFRLENBQUM7SUFDeEQsSUFBSSxDQUFDdk0sZUFBZSxDQUFDb0QsSUFBSSxDQUFDLElBQUksQ0FBQ3ZDLGFBQWEsQ0FBQ0ssSUFBSSxDQUFDb0osUUFBUSxDQUFDO0lBQzNELElBQUksQ0FBQ3JLLGFBQWEsQ0FBQ21ELElBQUksQ0FBQyxJQUFJLENBQUN2QyxhQUFhLENBQUNLLElBQUksQ0FBQ3NOLE1BQU0sQ0FBQztFQUMzRDtFQUNBLElBQUksQ0FBQ3JPLGdCQUFnQixDQUFDc0gsU0FBUyxDQUFDLENBQUM7RUFDakMsSUFBSSxDQUFDdkgsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0VBQzdCLElBQUksSUFBSSxDQUFDSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0VBQ3RCLElBQUksQ0FBQ0EsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUM7OztBQUdELElBQUk0TyxVQUFVLEdBQUcsSUFBSTVZLDZEQUFVLENBQUMsQ0FBQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBaUUsR0FBRyxDQUFDK0ksU0FBUyxDQUFDZ0csZUFBZSxHQUFHLFVBQVNaLE1BQU0sRUFBRUMsTUFBTSxFQUFFd0csSUFBSSxFQUFFM04sS0FBSyxFQUFFNE4sSUFBSSxFQUFFL04sS0FBSyxFQUFFZ08sY0FBYyxFQUFFO0VBQy9GLElBQUlDLEVBQUUsR0FBRyxJQUFJO0VBQ2IsSUFBSUMsT0FBTyxHQUFHLElBQUk7O0VBRWxCO0VBQ0E7RUFDQTtFQUNBLElBQUlDLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3pCLElBQUksSUFBSSxDQUFDN08sV0FBVyxDQUFDLElBQUksQ0FBQ0EsV0FBVyxDQUFDOUYsTUFBTSxHQUFDLENBQUMsQ0FBQyxJQUFJNUMsZUFBZSxDQUFDNkIsT0FBTztFQUN0RTBWLFlBQVksR0FBRyxDQUFDLEdBQUc7OztFQUd2QixTQUFTQyxXQUFXQSxDQUFDQyxLQUFLLEVBQUVDLEdBQUcsRUFBRTtJQUM3QixJQUFJRCxLQUFLLEdBQUdDLEdBQUcsRUFBRTtNQUNiLElBQUlDLEdBQUcsR0FBR0YsS0FBSztNQUNmQSxLQUFLLEdBQUdDLEdBQUc7TUFDWEEsR0FBRyxHQUFHQyxHQUFHO0lBQ2I7O0lBRUEsSUFBSSxDQUFDTCxPQUFPLENBQUNHLEtBQUssQ0FBQztJQUNmSCxPQUFPLENBQUNHLEtBQUssQ0FBQyxHQUFHLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCO01BQ0QsSUFBSUUsYUFBYSxHQUFHTixPQUFPLENBQUNHLEtBQUssQ0FBQztNQUNsQyxJQUFJSSxHQUFHLEdBQUdELGFBQWEsQ0FBQ0UsV0FBVyxDQUFDSixHQUFHLENBQUM7TUFDeEMsSUFBSUcsR0FBRyxJQUFJLENBQUMsQ0FBQztNQUNURCxhQUFhLENBQUN6TSxJQUFJLENBQUN1TSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQUE7TUFFekJFLGFBQWEsQ0FBQ0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQztFQUNKOzs7RUFHQSxTQUFTRSxvQkFBb0JBLENBQUEsRUFBRzs7SUFFNUIsS0FBSyxJQUFJck4sQ0FBQyxHQUFHLENBQUMsRUFBRXNOLElBQUksR0FBR1YsT0FBTyxDQUFDMVUsTUFBTSxFQUFFOEgsQ0FBQyxHQUFDc04sSUFBSSxFQUFFdE4sQ0FBQyxFQUFFLEVBQUU7O01BRWhELElBQUlrTixhQUFhLEdBQUdOLE9BQU8sQ0FBQzVNLENBQUMsQ0FBQztNQUM5QixJQUFJLENBQUNrTixhQUFhO01BQ2Q7O01BRUosS0FBSyxJQUFJSyxDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUNMLGFBQWEsQ0FBQ2hWLE1BQU0sRUFBRXFWLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLElBQUlQLEdBQUcsR0FBR0UsYUFBYSxDQUFDSyxDQUFDLENBQUM7UUFDMUIsSUFBSVAsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNULFNBQVMsQ0FBQztRQUFBLEtBQ1Q7VUFDRDtVQUNBTCxFQUFFLENBQUNsSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1VBQ2pCa0ssRUFBRSxDQUFDeE4sVUFBVSxDQUFDeUgsVUFBVSxDQUFDYixNQUFNLENBQUMsQ0FBQyxHQUFDL0YsQ0FBQyxDQUFDLEVBQUUrRixNQUFNLENBQUMsQ0FBQyxHQUFDL0YsQ0FBQyxHQUFDLENBQUMsQ0FBQztVQUMxQitGLE1BQU0sQ0FBQyxDQUFDLEdBQUNpSCxHQUFHLENBQUMsRUFBRWpILE1BQU0sQ0FBQyxDQUFDLEdBQUNpSCxHQUFHLEdBQUMsQ0FBQyxDQUFDO1VBQzlCLENBQUM7VUFDREgsWUFBWTtVQUNaRixFQUFFLENBQUM5SSxRQUFRLENBQUNtQyxNQUFNLEdBQUdBLE1BQU0sQ0FBQ2hHLENBQUMsQ0FBQyxHQUFHbkIsS0FBSyxFQUFFLElBQUksQ0FBQztVQUM3QzROLElBQUksRUFBRS9OLEtBQUssRUFBRWlPLEVBQUUsQ0FBQzlQLFdBQVcsQ0FBQztVQUN6RTtZQUNvQixJQUFJbUosTUFBTSxJQUFLQSxNQUFNLENBQUNoRyxDQUFDLENBQUMsSUFBSWdHLE1BQU0sQ0FBQ2dILEdBQUcsQ0FBRTtZQUNwQ2xaLGtEQUFNLENBQUN5USxJQUFJLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUN2RjtNQUNKO0lBQ0o7RUFDSjs7RUFFQSxTQUFTaUosZ0JBQWdCQSxDQUFDVCxLQUFLLEVBQUVDLEdBQUcsRUFBRTtJQUNsQyxJQUFJRCxLQUFLLEdBQUdDLEdBQUcsRUFBRTtNQUNiLElBQUlDLEdBQUcsR0FBR0YsS0FBSztNQUNmQSxLQUFLLEdBQUdDLEdBQUc7TUFDWEEsR0FBRyxHQUFHQyxHQUFHO0lBQ2I7O0lBRUEsSUFBSUMsYUFBYSxHQUFHTixPQUFPLENBQUNHLEtBQUssQ0FBQztJQUNsQyxJQUFJLENBQUNHLGFBQWE7SUFDZDs7SUFFSixJQUFJQyxHQUFHLEdBQUdELGFBQWEsQ0FBQzlNLE9BQU8sQ0FBQzRNLEdBQUcsQ0FBQztJQUNwQyxJQUFJRyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUU7TUFDWDtNQUNBUixFQUFFLENBQUNsSyxXQUFXLENBQUMsQ0FBQyxDQUFDO01BQ2pCa0ssRUFBRSxDQUFDeE4sVUFBVSxDQUFDeUgsVUFBVSxDQUFDYixNQUFNLENBQUMsQ0FBQyxHQUFDZ0gsS0FBSyxDQUFDLEVBQUVoSCxNQUFNLENBQUMsQ0FBQyxHQUFDZ0gsS0FBSyxHQUFDLENBQUMsQ0FBQztNQUNsQ2hILE1BQU0sQ0FBQyxDQUFDLEdBQUNpSCxHQUFHLENBQUMsRUFBRWpILE1BQU0sQ0FBQyxDQUFDLEdBQUNpSCxHQUFHLEdBQUMsQ0FBQyxDQUFDO01BQzlCLENBQUM7TUFDREgsWUFBWTtNQUNaRixFQUFFLENBQUM5SSxRQUFRLENBQUNtQyxNQUFNLEdBQUdBLE1BQU0sQ0FBQytHLEtBQUssQ0FBQyxHQUFHbE8sS0FBSyxFQUFFLElBQUksQ0FBQztNQUNqRDROLElBQUksRUFBRS9OLEtBQUssRUFBRWlPLEVBQUUsQ0FBQzlQLFdBQVcsQ0FBQzs7TUFFckQsSUFBSW1KLE1BQU0sSUFBS0EsTUFBTSxDQUFDK0csS0FBSyxDQUFDLElBQUkvRyxNQUFNLENBQUNnSCxHQUFHLENBQUU7TUFDeENsWixrREFBTSxDQUFDeVEsSUFBSSxDQUFDLGlFQUFpRSxDQUFDO0lBQ3RGO0VBQ0o7O0VBRUEsSUFBSW1JLGNBQWMsRUFBRTtJQUNoQkUsT0FBTyxHQUFHLElBQUlhLEtBQUssQ0FBQzFILE1BQU0sQ0FBQzdOLE1BQU0sR0FBQyxDQUFDLENBQUM7O0lBRXBDLEtBQUssSUFBSThILENBQUMsR0FBRSxDQUFDLEVBQUVzTixJQUFJLEdBQUdkLElBQUksQ0FBQ3RVLE1BQU0sRUFBRThILENBQUMsR0FBQ3NOLElBQUksRUFBRXROLENBQUMsSUFBRyxDQUFDLEVBQUU7TUFDOUMsSUFBSTBOLEVBQUUsR0FBR2xCLElBQUksQ0FBQ3hNLENBQUMsQ0FBQztNQUNoQixJQUFJMk4sRUFBRSxHQUFHbkIsSUFBSSxDQUFDeE0sQ0FBQyxHQUFDLENBQUMsQ0FBQztNQUNsQixJQUFJNE4sRUFBRSxHQUFHcEIsSUFBSSxDQUFDeE0sQ0FBQyxHQUFDLENBQUMsQ0FBQzs7TUFFbEI4TSxXQUFXLENBQUNZLEVBQUUsRUFBRUMsRUFBRSxDQUFDO01BQ25CYixXQUFXLENBQUNhLEVBQUUsRUFBRUMsRUFBRSxDQUFDO01BQ25CZCxXQUFXLENBQUNjLEVBQUUsRUFBRUYsRUFBRSxDQUFDO0lBQ3ZCO0VBQ0o7O0VBRUE7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDblEsbUJBQW1CLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDTyxVQUFVLEVBQUU7SUFDcEQsSUFBSXpDLEtBQUssR0FBRzBLLE1BQU0sQ0FBQzdOLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQixLQUFLLElBQUk4SCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUczRSxLQUFLLEVBQUUsRUFBRTJFLENBQUMsRUFBRTtNQUM1QnVNLFVBQVUsQ0FBQ25MLEdBQUcsQ0FBQzJFLE1BQU0sQ0FBQyxDQUFDLEdBQUMvRixDQUFDLENBQUMsRUFBRStGLE1BQU0sQ0FBQyxDQUFDLEdBQUMvRixDQUFDLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztNQUU3QyxJQUFJLElBQUksQ0FBQ3pDLG1CQUFtQixLQUFLLENBQUMsQ0FBQztNQUMvQixJQUFJLENBQUNDLGdCQUFnQixDQUFDcVEsYUFBYSxDQUFDdEIsVUFBVSxDQUFDOztNQUVuRCxJQUFJLElBQUksQ0FBQ3pPLFVBQVU7TUFDZixJQUFJLENBQUNKLGNBQWMsQ0FBQ21RLGFBQWEsQ0FBQ3RCLFVBQVUsQ0FBQztJQUNyRDtFQUNKOztFQUVBLElBQUksSUFBSSxDQUFDcE4sVUFBVSxDQUFDSCxhQUFhLEVBQUU7SUFDL0IsSUFBSTNELEtBQUssR0FBR21SLElBQUksQ0FBQ3RVLE1BQU07SUFDdkIsS0FBSyxJQUFJOEgsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHM0UsS0FBSyxFQUFFMkUsQ0FBQyxJQUFFLENBQUMsRUFBRTtNQUM3QixJQUFJME4sRUFBRSxHQUFHbEIsSUFBSSxDQUFDeE0sQ0FBQyxDQUFDO01BQ2hCLElBQUkyTixFQUFFLEdBQUduQixJQUFJLENBQUN4TSxDQUFDLEdBQUMsQ0FBQyxDQUFDO01BQ2xCLElBQUk0TixFQUFFLEdBQUdwQixJQUFJLENBQUN4TSxDQUFDLEdBQUMsQ0FBQyxDQUFDOztNQUVsQixJQUFJLENBQUN5QyxXQUFXLENBQUMsQ0FBQyxDQUFDOztNQUVuQixJQUFJLENBQUN0RCxVQUFVLENBQUMyTyxlQUFlLENBQUMvSCxNQUFNLENBQUMsQ0FBQyxHQUFDMkgsRUFBRSxDQUFDLEVBQUUzSCxNQUFNLENBQUMsQ0FBQyxHQUFDMkgsRUFBRSxHQUFDLENBQUMsQ0FBQztNQUM1QjNILE1BQU0sQ0FBQyxDQUFDLEdBQUM0SCxFQUFFLENBQUMsRUFBRTVILE1BQU0sQ0FBQyxDQUFDLEdBQUM0SCxFQUFFLEdBQUMsQ0FBQyxDQUFDO01BQzVCNUgsTUFBTSxDQUFDLENBQUMsR0FBQzZILEVBQUUsQ0FBQyxFQUFFN0gsTUFBTSxDQUFDLENBQUMsR0FBQzZILEVBQUUsR0FBQyxDQUFDLENBQUM7TUFDNUIsSUFBSSxDQUFDL0osUUFBUSxDQUFDbUMsTUFBTSxHQUFHQSxNQUFNLENBQUMwSCxFQUFFLENBQUMsR0FBRzdPLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTROLElBQUksRUFBRS9OLEtBQUssRUFBRSxJQUFJLENBQUM3QixXQUFXLENBQUM7O01BRWhILElBQUk2UCxjQUFjLEVBQUU7UUFDaEJjLGdCQUFnQixDQUFDRSxFQUFFLEVBQUVDLEVBQUUsQ0FBQztRQUN4QkgsZ0JBQWdCLENBQUNHLEVBQUUsRUFBRUMsRUFBRSxDQUFDO1FBQ3hCSixnQkFBZ0IsQ0FBQ0ksRUFBRSxFQUFFRixFQUFFLENBQUM7TUFDNUI7SUFDSjtFQUNKLENBQUM7RUFDSTtJQUNELElBQUlyUyxLQUFLLEdBQUcwSyxNQUFNLENBQUM3TixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0lBRS9CLElBQUksQ0FBQ3VLLFdBQVcsQ0FBQ3BILEtBQUssQ0FBQztJQUN2QixJQUFJeUssR0FBRyxHQUFHLElBQUksQ0FBQzNHLFVBQVU7SUFDekIsSUFBSTRPLEtBQUssR0FBR2pJLEdBQUcsQ0FBQ2xELE1BQU07O0lBRXRCLEtBQUssSUFBSTVDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzNFLEtBQUssRUFBRSxFQUFFMkUsQ0FBQyxFQUFFO01BQzVCLElBQUl4SCxDQUFDLEdBQUd1TixNQUFNLENBQUMsQ0FBQyxHQUFDL0YsQ0FBQyxDQUFDO01BQ25CLElBQUl2SCxDQUFDLEdBQUdzTixNQUFNLENBQUMsQ0FBQyxHQUFDL0YsQ0FBQyxHQUFDLENBQUMsQ0FBQztNQUNyQjhGLEdBQUcsQ0FBQ2tJLHFCQUFxQixDQUFDeFYsQ0FBQyxFQUFFQyxDQUFDLEVBQUUsSUFBSSxDQUFDb0wsUUFBUSxDQUFDbUMsTUFBTSxHQUFHQSxNQUFNLENBQUNoRyxDQUFDLENBQUMsR0FBR25CLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTROLElBQUksRUFBRS9OLEtBQUssRUFBRSxJQUFJLENBQUM3QixXQUFXLENBQUM7SUFDbkg7O0lBRUFpSixHQUFHLENBQUNtSSxVQUFVLENBQUN6QixJQUFJLEVBQUV1QixLQUFLLENBQUM7O0lBRTNCLElBQUlyQixjQUFjLEVBQUU7TUFDaEJXLG9CQUFvQixDQUFDLENBQUM7SUFDMUI7O0VBRUo7QUFDSixDQUFDOztBQUVEelYsR0FBRyxDQUFDK0ksU0FBUyxDQUFDc0UsaUJBQWlCLEdBQUcsWUFBVzs7RUFFekMsSUFBSWlKLElBQUksR0FBRyxJQUFJLENBQUNoUSxhQUFhLENBQUNDLFlBQVk7RUFDMUMsSUFBSSxDQUFDRCxhQUFhLENBQUNDLFlBQVksR0FBRyxDQUFDLENBQUM7O0VBRXBDLElBQUk0SCxNQUFNLEdBQUdtSSxJQUFJLENBQUNuSSxNQUFNO0VBQ3hCLElBQUl5RyxJQUFJLEdBQUcwQixJQUFJLENBQUNqSSxPQUFPO0VBQ3ZCLElBQUlELE1BQU0sR0FBR2tJLElBQUksQ0FBQ2xJLE1BQU07O0VBRXhCLElBQUksQ0FBQ0QsTUFBTSxJQUFJLENBQUN5RyxJQUFJLEVBQUU7SUFDbEIxWSxrREFBTSxDQUFDeVEsSUFBSSxDQUFDLHlCQUF5QixDQUFDO0lBQ3RDO0VBQ0o7O0VBRUE7RUFDQTtFQUNBLElBQUksSUFBSSxDQUFDdkcsV0FBVyxDQUFDLElBQUksQ0FBQ0EsV0FBVyxDQUFDOUYsTUFBTSxHQUFDLENBQUMsQ0FBQyxJQUFJNUMsZUFBZSxDQUFDNkIsT0FBTyxFQUFFO0lBQ3hFLElBQUksSUFBSSxDQUFDcUYsbUJBQW1CLEVBQUU7TUFDMUI7SUFDSjtFQUNKLENBQUMsTUFBTTtJQUNILElBQUksQ0FBQ00sa0JBQWtCLENBQUNxUixLQUFLLEVBQUU7SUFDL0IsSUFBSSxDQUFDclIsa0JBQWtCLENBQUNzUixXQUFXLElBQUlySSxNQUFNLENBQUM3TixNQUFNLEdBQUcsQ0FBQztJQUN4RCxJQUFJLENBQUM0RSxrQkFBa0IsQ0FBQ3VSLFlBQVksSUFBSTdCLElBQUksQ0FBQ3RVLE1BQU07RUFDdkQ7O0VBRUEsSUFBSSxDQUFDdUgsZ0JBQWdCLEVBQUU7RUFDdkIsSUFBSSxDQUFDQyxZQUFZLElBQUk4TSxJQUFJLENBQUN0VSxNQUFNLEdBQUcsQ0FBQzs7RUFFcEMsSUFBSSxDQUFDeU8sZUFBZSxDQUFDWixNQUFNLEVBQUVDLE1BQU0sRUFBRXdHLElBQUksRUFBRSxJQUFJLENBQUMzTixLQUFLLEVBQUUsSUFBSSxDQUFDbEIsWUFBWSxFQUFFLElBQUksQ0FBQ2UsS0FBSyxFQUFFLElBQUksQ0FBQztBQUMvRixDQUFDOztBQUVEOUcsR0FBRyxDQUFDK0ksU0FBUyxDQUFDdUUsYUFBYSxHQUFHLFlBQVc7O0VBRXJDLElBQUlpSCxDQUFDLEdBQUcsSUFBSSxDQUFDak8sYUFBYSxDQUFDRSxRQUFRO0VBQ25DLElBQUksQ0FBQ0YsYUFBYSxDQUFDRSxRQUFRLEdBQUcsQ0FBQyxDQUFDOztFQUVoQytOLENBQUMsQ0FBQ3ZRLFlBQVksR0FBRyxJQUFJLENBQUNrQixrQkFBa0IsR0FBR3JGLGVBQWUsQ0FBQyxDQUFDOztFQUU1RCxJQUFJLENBQUNtRixTQUFTLENBQUM2RCxJQUFJLENBQUMwTCxDQUFDLENBQUM7RUFDdEIsSUFBSSxDQUFDdFAsV0FBVyxHQUFHLElBQUksQ0FBQ0QsU0FBUyxDQUFDMUUsTUFBTSxHQUFHLENBQUM7QUFDaEQsQ0FBQzs7QUFFRE4sR0FBRyxDQUFDK0ksU0FBUyxDQUFDaEYsaUJBQWlCLEdBQUcsVUFBU0osTUFBTSxFQUFFOztFQUUvQztFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUkrUyxVQUFVLEdBQUcsSUFBSSxDQUFDQSxVQUFVLEdBQUcsRUFBQzlMLElBQUksRUFBRSxNQUFNLEVBQUVuQyxFQUFFLEVBQUUsTUFBTSxFQUFFa08sY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFQyxPQUFPLEVBQUUsS0FBSyxFQUFDO0VBQ2pHLElBQUlDLE9BQU8sR0FBRyxDQUFDLENBQUVDLE9BQU8sR0FBRyxDQUFDOztFQUU1QixLQUFLLElBQUlwVCxDQUFDLElBQUlDLE1BQU0sRUFBRTs7SUFFbEIsSUFBSUMsS0FBSyxHQUFHQyxRQUFRLENBQUNILENBQUMsQ0FBQztJQUN2QixJQUFJcVQsUUFBUSxHQUFHcFQsTUFBTSxDQUFDRCxDQUFDLENBQUM7O0lBRXhCLElBQUlrSCxJQUFJLEdBQUksT0FBT21NLFFBQVEsS0FBSyxRQUFRLEdBQUlBLFFBQVEsR0FBR0EsUUFBUSxDQUFDbk0sSUFBSTs7SUFFcEUsSUFBSSxDQUFDQSxJQUFJO0lBQ0xBLElBQUksR0FBR2xILENBQUMsQ0FBQyxDQUFDOztJQUVkLElBQUlvRixJQUFJLEdBQUc4QixJQUFJLENBQUNvTSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzFCLElBQUlDLE1BQU0sR0FBR1AsVUFBVTs7SUFFdkIsSUFBSTVOLElBQUksQ0FBQ3hJLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDakIsS0FBSyxJQUFJOEgsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHVSxJQUFJLENBQUN4SSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUU4SCxDQUFDLEVBQUU7UUFDdEMsSUFBSThPLGFBQWEsR0FBR3BPLElBQUksQ0FBQ1YsQ0FBQyxDQUFDO1FBQzNCLElBQUkrTyxJQUFJLEdBQUdGLE1BQU0sQ0FBQ04sY0FBYyxDQUFDTyxhQUFhLENBQUM7UUFDL0MsSUFBSSxDQUFDQyxJQUFJLEVBQUU7VUFDUEEsSUFBSSxHQUFHO1lBQ0h2TSxJQUFJLEVBQUVzTSxhQUFhO1lBQ25Cek8sRUFBRSxFQUFFLFFBQVEsR0FBR29PLE9BQU8sRUFBRTtZQUN4QkYsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNsQkMsT0FBTyxFQUFFO1VBQ2IsQ0FBQztVQUNESyxNQUFNLENBQUNOLGNBQWMsQ0FBQ08sYUFBYSxDQUFDLEdBQUdDLElBQUk7UUFDL0M7UUFDQUYsTUFBTSxHQUFHRSxJQUFJO01BQ2pCO0lBQ0o7O0lBRUFGLE1BQU0sQ0FBQ04sY0FBYyxDQUFDL0wsSUFBSSxDQUFDLEdBQUc7TUFDMUJBLElBQUksRUFBRUEsSUFBSTtNQUNWaEgsS0FBSyxFQUFFQSxLQUFLO01BQ1o2RSxFQUFFLEVBQUVxTyxPQUFPLEVBQUU7TUFDYkgsY0FBYyxFQUFFLENBQUMsQ0FBQztNQUNsQkMsT0FBTyxFQUFFO0lBQ2IsQ0FBQztFQUNMOztFQUVBLFNBQVNRLFVBQVVBLENBQUNILE1BQU0sRUFBRTtJQUN4QixJQUFJSSxRQUFRLEdBQUdwVCxNQUFNLENBQUNDLElBQUksQ0FBQytTLE1BQU0sQ0FBQ04sY0FBYyxDQUFDLENBQUN4UyxHQUFHLENBQUMsVUFBU21ULENBQUMsRUFBRSxDQUFDLE9BQU9MLE1BQU0sQ0FBQ04sY0FBYyxDQUFDVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckcsT0FBT0wsTUFBTSxDQUFDTixjQUFjOztJQUU1QixJQUFJVSxRQUFRLENBQUMvVyxNQUFNLEVBQUU7TUFDakIyVyxNQUFNLENBQUNJLFFBQVEsR0FBR0EsUUFBUTs7TUFFMUJKLE1BQU0sQ0FBQ00sVUFBVSxHQUFHLENBQUM7O01BRXJCLEtBQUssSUFBSW5QLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2lQLFFBQVEsQ0FBQy9XLE1BQU0sRUFBRSxFQUFFOEgsQ0FBQyxFQUFFO1FBQ3RDNk8sTUFBTSxDQUFDTSxVQUFVLElBQUlILFVBQVUsQ0FBQ0MsUUFBUSxDQUFDalAsQ0FBQyxDQUFDLENBQUM7TUFDaEQ7O01BRUFpUCxRQUFRLENBQUNHLElBQUksQ0FBQyxVQUFVM0wsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7UUFDMUIsSUFBSUQsQ0FBQyxDQUFDK0ssT0FBTyxJQUFJLENBQUM5SyxDQUFDLENBQUM4SyxPQUFPLEVBQUU7VUFDekIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxNQUFNLElBQUksQ0FBQy9LLENBQUMsQ0FBQytLLE9BQU8sSUFBSTlLLENBQUMsQ0FBQzhLLE9BQU8sRUFBRTtVQUNoQyxPQUFPLENBQUM7UUFDWjtRQUNBLE9BQU8vSyxDQUFDLENBQUNqQixJQUFJLENBQUM2TSxhQUFhLENBQUMzTCxDQUFDLENBQUNsQixJQUFJLEVBQUVySyxTQUFTLEVBQUUsRUFBQ21YLFdBQVcsRUFBRSxNQUFNLEVBQUVDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7TUFDMUYsQ0FBQyxDQUFDO0lBQ047O0lBRUEsT0FBT1YsTUFBTSxDQUFDTCxPQUFPLEdBQUcsQ0FBQyxHQUFHSyxNQUFNLENBQUNNLFVBQVU7RUFDakQ7RUFDQUgsVUFBVSxDQUFDLElBQUksQ0FBQ1YsVUFBVSxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2YyZC9GMmQuanM/NjlmMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IFZlcnRleEJ1ZmZlckJ1aWxkZXJ9ICBmcm9tIFwiLi4vY29tbW9uL1ZlcnRleEJ1ZmZlckJ1aWxkZXJcIjtcbmltcG9ydCB7IExtdkJveDMgfSBmcm9tIFwiLi4vLi4vLi4vd2dzL3NjZW5lL0xtdkJveDNcIjtcbmltcG9ydCB7IExtdlZlY3RvcjMgfSBmcm9tIFwiLi4vLi4vLi4vd2dzL3NjZW5lL0xtdlZlY3RvcjNcIjtcbmltcG9ydCB7IFZCVXRpbHMgfSBmcm9tIFwiLi4vY29tbW9uL1ZiVXRpbHNcIjtcbmltcG9ydCB7IElucHV0U3RyZWFtIH0gZnJvbSBcIi4uL2NvbW1vbi9JbnB1dFN0cmVhbVwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL2xvZ2dlci9Mb2dnZXJcIjtcbmltcG9ydCB7IGVycm9yQ29kZVN0cmluZywgRXJyb3JDb2RlcyB9IGZyb20gXCIuLi8uLi9uZXQvRXJyb3JDb2Rlc1wiO1xuXG5cbnZhciBNT0JJTEVfTUFYX1ZDT1VOVCA9IDE2MzgzO1xuXG5leHBvcnQgdmFyIEYyZERhdGFUeXBlID0ge1xuICAgIC8vRml4ZWQgc2l6ZSB0eXBlc1xuICAgIGR0X29iamVjdCA6IDAsXG4gICAgZHRfdm9pZCA6IDEsXG4gICAgZHRfYnl0ZSA6IDIsXG4gICAgZHRfaW50IDogMyxcbiAgICBkdF9mbG9hdCA6IDQsXG4gICAgZHRfZG91YmxlIDogNSxcbiAgICBkdF92YXJpbnQgOiA2LFxuICAgIGR0X3BvaW50X3ZhcmludCA6IDcsXG5cbiAgICAvL1ZhcmlhYmxlIHNpemUgdHlwZXNcbiAgICAvL0RhdGEgYnl0ZXMgYXJlIHByZWZpeGVkIGJ5IGFuIGludGVnZXJcbiAgICAvL3JlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS5cbiAgICBkdF9ieXRlX2FycmF5IDogMzIsXG4gICAgZHRfaW50X2FycmF5IDogMzMsXG4gICAgZHRfZmxvYXRfYXJyYXkgOiAzNCxcbiAgICBkdF9kb3VibGVfYXJyYXkgOiAzNSxcbiAgICBkdF92YXJpbnRfYXJyYXkgOiAzNixcbiAgICAvL1NwZWNpYWwgdmFyaWFibGUgaW50IGVuY29kaW5nIGZvciBwb2ludCBkYXRhXG4gICAgZHRfcG9pbnRfdmFyaW50X2FycmF5IDogMzcsXG5cbiAgICAvL1dlbGwta25vd24gZGF0YSB0eXBlcyB0aGF0IGhlbHAgcmVkdWNlIG91dHB1dCBzaXplIGZvciBjb21tb25seVxuICAgIC8vZW5jb3VudGVyZWQgc2ltcGxlIGdlb21ldHJpZXNcbiAgICBkdF9hcmMgOiAzOCxcbiAgICBkdF9jaXJjbGUgOiAzOSxcbiAgICBkdF9jaXJjdWxhcl9hcmMgOiA0MCxcblxuICAgIGR0X3N0cmluZyA6IDYzLFxuICAgIC8vZG8gbm90IHdhbnQgdG8gZ28gaW50byB2YXJpbnQgcmFuZ2VcbiAgICBkdF9sYXN0X2RhdGFfdHlwZSA6IDEyN1xufTtcblxuZXhwb3J0IHZhciBGMmRTZW1hbnRpY1R5cGUgPSB7XG4gICAgLy9Gb3Igb2JqZWN0cyB3aXRoIGZpeGVkIHNlcmlhbGl6YXRpb24gKGFyYywgcmFzdGVyKSB3ZSBkb24ndCBib3RoZXIgaGF2aW5nIGRlZGljYXRlZCBzZW1hbnRpYyBmb3IgZWFjaCBtZW1iZXJcbiAgICAvL2FuZCBhc3N1bWUgdGhlIHBhcnNpbmcgYXBwbGljYXRpb24ga25vd3MgdGhlIG9yZGVyIHRoZXkgYXBwZWFyLiBUaGVyZSBpcyBzdGlsbCBhbiBlbmQtb2JqZWN0IHRhZyBvZiBjb3Vyc2VcbiAgICAvL3doaWNoIHNob3dzIHdoZXJlIHRoZSBvYmplY3QgZW5kcy5cbiAgICBzdF9vYmplY3RfbWVtYmVyIDogMCxcblxuICAgIC8vU2ltcGxlIC8gZml4ZWQgc2l6ZSBhdHRyaWJ1dGVzXG4gICAgc3RfZmlsbCA6IDEsXG4gICAgc3RfZmlsbF9vZmYgOiAyLFxuICAgIHN0X2NsaXBfb2ZmIDogMyxcbiAgICBzdF9sYXllciA6IDQsXG4gICAgc3RfbGluayA6IDUsXG4gICAgc3RfbGluZV93ZWlnaHQgOiA2LFxuICAgIHN0X21pdGVyX2FuZ2xlIDogNyxcbiAgICBzdF9taXRlcl9sZW5ndGggOiA4LFxuICAgIHN0X2xpbmVfcGF0dGVybl9yZWYgOiA5LFxuICAgIHN0X2JhY2tfY29sb3IgOiAxMCxcbiAgICBzdF9jb2xvciA6IDExLFxuICAgIHN0X21hcmt1cCA6IDEyLFxuICAgIHN0X29iamVjdF9pZCA6IDEzLFxuICAgIHN0X21hcmt1cF9pZCA6IDE0LFxuICAgIHN0X3Jlc2V0X3JlbF9vZmZzZXQgOiAxNSxcbiAgICBzdF9mb250X3JlZiA6IDE2LFxuXG4gICAgLy9Db21wb3VuZCBvYmplY3Qgb3Bjb2Rlc1xuXG4gICAgLy9CZWdpbiBhIGdlbmVyaWMgb2JqZWN0IG9wY29kZVxuICAgIHN0X2JlZ2luX29iamVjdCA6IDMyLFxuXG4gICAgLy9TdHlsZSBhdHRyaWJ1dGUgcmVsYXRlZCBvcGNvZGVzLiBUaG9zZSBhcmUgY29tcG91bmQgb2JqZWN0c1xuICAgIHN0X2NsaXAgOiAzMyxcbiAgICBzdF9saW5lX2NhcHMgOiAzNCxcbiAgICBzdF9saW5lX2pvaW4gOiAzNSxcbiAgICBzdF9saW5lX3BhdHRlcm5fZGVmIDogMzYsXG4gICAgc3RfZm9udF9kZWYgOiAzNyxcbiAgICBzdF92aWV3cG9ydCA6IDM4LFxuXG4gICAgLy9EcmF3YWJsZXMgYXJlIGFsbCBvYmplY3RzLXR5cGVkIGJvdW5kZWQgYnkgYmVnaW4vZW5kIG9iamVjdCBvcGNvZGVzXG5cbiAgICAvL1Jvb3QgbGV2ZWwgZG9jdW1lbnQgYmVnaW5cbiAgICBzdF9zaGVldCA6IDQyLFxuICAgIC8vQ2lyY2xlLCBFbGxpcHNlLCBBcmNzXG4gICAgc3RfYXJjIDogNDMsXG4gICAgLy9UaGUgZ3JhbmRmYXRoZXIgb2YgdGhlbSBhbGxcbiAgICBzdF9wb2x5bGluZSA6IDQ0LFxuICAgIHN0X3Jhc3RlciA6IDQ1LFxuICAgIHN0X3RleHQgOiA0NixcbiAgICBzdF9wb2x5dHJpYW5nbGUgOiA0NyxcbiAgICBzdF9kb3QgOiA0OCxcbiAgICAvL2VuZCBvYmplY3QgLS0gY291bGQgYmUgZW5kaW5nIGEgZ2VuZXJpYyBvYmplY3Qgb3IgZHJhd2FibGUsIGV0Yy5cbiAgICBzdF9lbmRfb2JqZWN0IDogNjMsXG5cbiAgICBzdF9sYXN0X3NlbWFudGljX3R5cGUgOiAxMjdcbn07XG5cbi8vIEYyRCBzaGFkb3cgcmF0aW8sIHJlbGF0aXZlIHRvIHBhcGVyIHdpZHRoLlxuZXhwb3J0IGNvbnN0IEYyZFNoYWRvd1JhdGlvID0gMC4wMDc1O1xuXG5cbi8vSW5pdGlhbGl6ZXMgYSBzdHJ1Y3R1cmUgb2YgY291bnRlcnMgdXNlZCBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMgYW5kIHNoZWV0IGNvbnRlbnQgaGFzaFxuZnVuY3Rpb24gaW5pdEdlb21NZXRyaWNzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIFwiYXJjc1wiOiAwLFxuICAgICAgICBcImNpcmNsZXNcIjogMCxcbiAgICAgICAgXCJjaXJjX2FyY3NcIjogMCxcbiAgICAgICAgXCJ2aWV3cG9ydHNcIjogMCxcbiAgICAgICAgXCJjbGlwc1wiOiAwLFxuICAgICAgICBcImNvbG9yc1wiOiAwLFxuICAgICAgICBcImRiX2lkc1wiOiAwLFxuICAgICAgICBcImRvdHNcIjogMCxcbiAgICAgICAgXCJmaWxsc1wiOiAwLFxuICAgICAgICBcImxheWVyc1wiOiAwLFxuICAgICAgICBcImxpbmVfY2Fwc1wiOiAwLFxuICAgICAgICBcImxpbmVfam9pbnNcIjogMCxcbiAgICAgICAgXCJsaW5lX3BhdHRlcm5zXCI6IDAsXG4gICAgICAgIFwibGluZV9wYXRfcmVmc1wiOiAwLFxuICAgICAgICBcInBsaW5lc1wiOiAwLFxuICAgICAgICBcInBsaW5lX3BvaW50c1wiOiAwLFxuICAgICAgICBcImxpbmVfd2VpZ2h0c1wiOiAwLFxuICAgICAgICBcImxpbmtzXCI6IDAsXG4gICAgICAgIFwibWl0ZXJzXCI6IDAsXG4gICAgICAgIFwicHRyaXNcIjogMCxcbiAgICAgICAgXCJwdHJpX2luZGljZXNcIjogMCxcbiAgICAgICAgXCJwdHJpX3BvaW50c1wiOiAwLFxuICAgICAgICBcInJhc3RlcnNcIjogMCxcbiAgICAgICAgXCJ0ZXh0c1wiOiAwLFxuICAgICAgICBcInN0cmluZ3NcIjogW11cbiAgICB9O1xufVxuXG5cbi8vIFJlc3RvcmUgc2lnbiBiaXQgZnJvbSBMU0Igb2YgYW4gZW5jb2RlZCBpbnRlZ2VyIHdoaWNoIGhhcyB0aGUgc2lnbiBiaXRcbi8vIG1vdmVkIGZyb20gTVNCIHRvIExTQi5cbi8vIFRoZSBkZWNvZGluZyBwcm9jZXNzIGlzIHRoZSByZXZlcnNlIGJ5IHJlc3RvcmluZyB0aGUgc2lnbiBiaXQgZnJvbSBMU0IgdG8gTVNCLlxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RvcmVTaWduQml0RnJvbUxTQihpbnRlZ2VyKSB7XG4gICAgcmV0dXJuIChpbnRlZ2VyICYgMSkgPyAtKGludGVnZXIgPj4+IDEpIDogKGludGVnZXIgPj4+IDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRjJEKG1ldGFkYXRhLCBtYW5pZmVzdCwgYmFzZVBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0aGlzLnNjYWxlWCA9IDE7XG4gICAgdGhpcy5zY2FsZVkgPSAxO1xuICAgIHRoaXMuYmJveCA9IHsgbWluOnt4OjAseTowLHo6MH0sIG1heDp7eDowLHk6MCx6OjB9IH07XG4gICAgdGhpcy5pczJkID0gdHJ1ZTtcbiAgICB0aGlzLmxheWVyc01hcCA9IHt9O1xuICAgIHRoaXMuZm9udERlZnMgPSB7fTtcbiAgICB0aGlzLmZvbnRDb3VudCA9IDA7XG4gICAgdGhpcy5mb250SWQgPSAwO1xuICAgIHRoaXMubWFuaWZlc3RBdmFpbGFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmdlb21NZXRyaWNzU3VtID0gMDtcbiAgICB0aGlzLm9iamVjdE1lbWJlclF1ZXVlID0gW107XG5cbiAgICB0aGlzLnByb3BlcnR5ZGIgPSB7XG4gICAgICAgIGF0dHJzIDogW10sXG4gICAgICAgIGF2czogW10sXG4gICAgICAgIGlkczogW10sXG4gICAgICAgIHZhbHVlczogW10sXG4gICAgICAgIG9mZnNldHM6IFtdLFxuICAgICAgICB2aWV3YWJsZXM6IFtdXG4gICAgfTtcblxuICAgIGlmIChtZXRhZGF0YSkge1xuXG4gICAgICAgIHZhciBkaW1zID0gbWV0YWRhdGEucGFnZV9kaW1lbnNpb25zO1xuXG4gICAgICAgIHRoaXMucGFwZXJXaWR0aCA9IGRpbXMucGFnZV93aWR0aDtcbiAgICAgICAgdGhpcy5wYXBlckhlaWdodCA9IGRpbXMucGFnZV9oZWlnaHQ7XG5cbiAgICAgICAgLy8gVE9ETzogc2NhbGUgcGFyc2luZy5cbiAgICAgICAgdGhpcy5zY2FsZVggPSB0aGlzLnBhcGVyV2lkdGggLyBkaW1zLnBsb3Rfd2lkdGg7XG4gICAgICAgIHRoaXMuc2NhbGVZID0gdGhpcy5wYXBlckhlaWdodCAvIGRpbXMucGxvdF9oZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5oaWRlUGFwZXIgPSBkaW1zLmhpZGVfcGFwZXI7XG5cbiAgICAgICAgdmFyIHB3ID0gdGhpcy5wYXBlcldpZHRoO1xuICAgICAgICB2YXIgcGggPSB0aGlzLnBhcGVySGVpZ2h0O1xuICAgICAgICB0aGlzLmJib3gubWF4LnggPSBwdztcbiAgICAgICAgdGhpcy5iYm94Lm1heC55ID0gcGg7XG5cbiAgICAgICAgdmFyIGRpbSA9IG1ldGFkYXRhLnBhZ2VfZGltZW5zaW9ucyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlIHBhcGVyIGlzIHJvdGF0ZWQgb3Igb2Zmc2V0LCBpbmNsdWRlIHRoYXQgaW4gdGhlIGJib3hcbiAgICAgICAgaWYgKGlzRmluaXRlKGRpbS5wYXBlcl9yb3RhdGlvbikgJiYgZGltLnBhcGVyX3JvdGF0aW9uICE9PSAwKSB7XG4gICAgICAgICAgICB2YXIgYW5nbGUgPSBkaW0ucGFwZXJfcm90YXRpb24gKiBNYXRoLlBJIC8gMTgwO1xuICAgICAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICB2YXIgZHd4ID0gcHcgKiBjb3M7XG4gICAgICAgICAgICB2YXIgZHd5ID0gcHcgKiBzaW47XG4gICAgICAgICAgICB2YXIgZGh4ID0gLXBoICogc2luO1xuICAgICAgICAgICAgdmFyIGRoeSA9IHBoICogY29zO1xuICAgICAgICAgICAgdGhpcy5iYm94Lm1pbi54ID0gTWF0aC5taW4oMCwgZHd4LCBkaHgsIGR3eCArIGRoeCk7XG4gICAgICAgICAgICB0aGlzLmJib3gubWF4LnggPSBNYXRoLm1heCgwLCBkd3gsIGRoeCwgZHd4ICsgZGh4KTtcbiAgICAgICAgICAgIHRoaXMuYmJveC5taW4ueSA9IE1hdGgubWluKDAsIGR3eSwgZGh5LCBkd3kgKyBkaHkpO1xuICAgICAgICAgICAgdGhpcy5iYm94Lm1heC55ID0gTWF0aC5tYXgoMCwgZHd5LCBkaHksIGR3eSArIGRoeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRmluaXRlKGRpbS5wYXBlcl9vZmZzZXRfeCkgJiYgZGltLnBhcGVyX29mZnNldF94ICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmJib3gubWluLnggKz0gZGltLnBhcGVyX29mZnNldF94O1xuICAgICAgICAgICAgdGhpcy5iYm94Lm1heC54ICs9IGRpbS5wYXBlcl9vZmZzZXRfeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaW5pdGUoZGltLnBhcGVyX29mZnNldF95KSAmJiBkaW0ucGFwZXJfb2Zmc2V0X3kgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYmJveC5taW4ueSArPSBkaW0ucGFwZXJfb2Zmc2V0X3k7XG4gICAgICAgICAgICB0aGlzLmJib3gubWF4LnkgKz0gZGltLnBhcGVyX29mZnNldF95O1xuICAgICAgICB9XG5cbiAgICAgICAgLy9Jbml0aWFsaXplIG1hcHBpbmcgYmV0d2VlbiBsYXllciBpbmRleCAtPiBsYXllciBudW1iZXIgdG8gYmUgdXNlZCBmb3IgcmVuZGVyaW5nXG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgIC8vU29tZSBnZW9tZXRyeSBjb21lcyBvbiBudWxsIGxheWVyLCBhbmQgd2UgcmVzZXJ2ZSBhIHNwb3QgZm9yIHRoYXQgb25lLlxuICAgICAgICAvL0ZvciBleGFtcGxlLCBSZXZpdCBwbG90cyBoYXZlIG5vIGxheWVycyBhdCBhbGwuXG4gICAgICAgIHRoaXMubGF5ZXJzTWFwWzBdID0gY291bnQrKztcblxuICAgICAgICBmb3IgKHZhciBsIGluIG1ldGFkYXRhLmxheWVycykge1xuXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludChsKTtcblxuICAgICAgICAgICAgLy9XZSBzdG9yZSBpbiBhIG1hcCBpbiBvcmRlciB0byBhbGxvdyBub24tY29uc2VjdXRpdmUgbGF5ZXIgbnVtYmVycyxcbiAgICAgICAgICAgIC8vd2hpY2ggZG9lcyBoYXBwZW4uXG4gICAgICAgICAgICB0aGlzLmxheWVyc01hcFtpbmRleF0gPSBjb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXllckNvdW50ID0gY291bnQ7XG5cbiAgICAgICAgLy9DcmVhdGUgYSBsYXllcnMgdHJlZSB0byBiZSB1c2VkIGJ5IHRoZSBVSSAtLSB0aGlzIHNwbGl0cyBBdXRvQ0FEIHN0eWxlXG4gICAgICAgIC8vbGF5ZXIgZ3JvdXBzIChzcGVjaWZpZWQgdXNpbmcgfCBjaGFyYWN0ZXIpIGludG8gYSB0cmVlIG9mIGxheWVycy5cbiAgICAgICAgdGhpcy5jcmVhdGVMYXllckdyb3VwcyhtZXRhZGF0YS5sYXllcnMpO1xuXG4gICAgICAgIGlmIChtZXRhZGF0YS5nZW9tX21ldHJpY3MpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBPYmplY3Qua2V5cyhtZXRhZGF0YS5nZW9tX21ldHJpY3MpLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGEuZ2VvbV9tZXRyaWNzW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZ2VvbU1ldHJpY3NTdW0gPSB2YWx1ZXMucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaGlkZVBhcGVyID0gdGhpcy5oaWRlUGFwZXIgfHwgb3B0aW9ucy5tb2RlbFNwYWNlO1xuICAgIHRoaXMubm9TaGFkb3cgPSAhIW9wdGlvbnMubm9TaGFkb3c7IC8vIFRoZSByZXF1ZXN0IHRvIG5vdCBkcmF3IGEgc2hhZG93XG5cbiAgICB0aGlzLmhhc1BhZ2VTaGFkb3cgPSBmYWxzZTsgLy8gV2lsbCBiZSB0cnVlIG9ubHkgaWYgdGhlIHNoYWRvdyB3YXMgYWN0dWFsbHkgY3JlYXRlZFxuXG4gICAgLy8gRm9yIGRlYnVnZ2luZyBvbmx5LiBDb3VsZCBiZSByZW1vdmVkLlxuICAgIHRoaXMub3BDb3VudCA9IDA7XG5cbiAgICB0aGlzLmV4Y2x1ZGVUZXh0R2VvbWV0cnkgPSBvcHRpb25zLmV4Y2x1ZGVUZXh0R2VvbWV0cnk7XG4gICAgLy9wcm92aWRlcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHByZWNpc2UgdGV4dCBzZWFyY2ggYW5kIGhpZ2hsaWdodFxuICAgIHRoaXMuZXh0ZW5kU3RyaW5nc0ZldGNoaW5nID0gb3B0aW9ucy5leHRlbmRTdHJpbmdzRmV0Y2hpbmc7XG5cbiAgICB0aGlzLmZvbnRGYWNlcyA9IFtdO1xuICAgIHRoaXMuZm9udEZhbWlsaWVzID0gW107XG5cbiAgICB0aGlzLnZpZXdwb3J0cyA9IFt7fV07IC8vIG1ha2Ugdmlld3BvcnQgaW5kZXggc3RhcnQgYXQgMSwgMCBhcyBwYXBlciBpcyB1c2VkIGluIExpbmVTaGFkZXJcbiAgICB0aGlzLmN1cnJlbnRWcElkID0gMDsgLy8gY3VycmVudCB2aWV3cG9ydCBpbmRleFxuICAgIHRoaXMudmlld3BvcnRzWzBdLmdlb21fbWV0cmljcyA9IHRoaXMuY3VycmVudEdlb21NZXRyaWNzID0gaW5pdEdlb21NZXRyaWNzKCk7XG5cbiAgICB0aGlzLmNsaXBzID0gWzBdOyAvLyBtYWtlIGNsaXAgaW5kZXggc3RhcnQgYXQgMSwgbWF0Y2hlZCB3aXRoIHZpZXdwb3J0IGluZGV4XG5cbiAgICB0aGlzLnN0cmluZ3MgPSBbXTtcbiAgICB0aGlzLnN0cmluZ0RiSWRzID0gW107XG4gICAgdGhpcy5zdHJpbmdCb3hlcyA9IFtdO1xuICAgIGlmICh0aGlzLmV4dGVuZFN0cmluZ3NGZXRjaGluZykge1xuICAgICAgICB0aGlzLnN0cmluZ0NoYXJXaWR0aHMgPSBbXTtcbiAgICAgICAgdGhpcy5zdHJpbmdBbmdsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zdHJpbmdQb3NpdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zdHJpbmdIZWlnaHRzID0gW107XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFN0cmluZ051bWJlciA9IC0xO1xuICAgIHRoaXMuY3VycmVudFN0cmluZ0JveCA9IG5ldyBMbXZCb3gzKCk7XG5cbiAgICB0aGlzLmxpbmtCb3hlcyA9IFtdO1xuICAgIHRoaXMuY3VycmVudExpbmtCb3ggPSBuZXcgTG12Qm94MygpO1xuXG4gICAgdGhpcy5vYmplY3ROdW1iZXIgPSAwO1xuICAgIHRoaXMuY3VycmVudEZha2VJZCA9IC0yOyAvL1dlIHRhZyBjZXJ0YWluIG9iamVjdHMgdGhhdCB3ZSBjYXJlIGFib3V0IChsaWtlIHN0cmluZ3MpIHRoYXQgaGF2ZSBubyBJRCB3aXRoIGZha2UgbmVnYXRpdmUgSURzIGluc3RlYWQgb2YgZ2l2aW5nIHRoZW0gZGVmYXVsdCBJRCBvZiAwLlxuICAgIHRoaXMuaW1hZ2VOdW1iZXIgPSAwO1xuICAgIHRoaXMubGlua051bWJlciA9IDA7XG4gICAgdGhpcy5tYXhPYmplY3ROdW1iZXIgPSAwO1xuXG4gICAgdGhpcy5vYmplY3RTdGFjayA9IFtdO1xuICAgIHRoaXMub2JqZWN0TmFtZVN0YWNrID0gW107XG4gICAgdGhpcy5wYXJzZU9ialN0YXRlID0ge1xuICAgICAgICBwb2x5VHJpYW5nbGUgOiB7fSxcbiAgICAgICAgdmlld3BvcnQgOiB7fSxcbiAgICAgICAgY2xpcCA6IHt9LFxuICAgICAgICByYXN0ZXIgOiB7fSxcbiAgICAgICAgdGV4dDoge30sXG4gICAgICAgIGZvbnREZWY6IHt9LFxuICAgICAgICB1a25vd246IHt9XG4gICAgfTtcblxuICAgIHRoaXMubGF5ZXIgPSAwO1xuXG4gICAgdGhpcy5iZ0NvbG9yID0gKHR5cGVvZiBvcHRpb25zLmJnQ29sb3IgPT09IFwibnVtYmVyXCIpID8gb3B0aW9ucy5iZ0NvbG9yIDogMHhmZmZmZmZmZjtcblxuICAgIC8vTk9URTogVXNlIG9mIGNvbnRyYXN0IGNvbG9yIGlzIHR1cm5lZCBvZmYgaW4gbWFwQ29sb3IoKSB1bnRpbCBVWCBtYWtlcyB1cCB0aGVpciBtaW5kXG4gICAgLy9vbmUgd2F5IG9yIGFub3RoZXIuXG4gICAgdGhpcy5jb250cmFzdENvbG9yID0gdGhpcy5jb2xvciA9IHRoaXMuZmlsbENvbG9yID0gMHhmZjAwMDAwMDtcbiAgICBpZiAodGhpcy5oaWRlUGFwZXIpXG4gICAgICAgIHRoaXMuY29udHJhc3RDb2xvciA9IDB4ZmZmZmZmMDA7XG5cbiAgICB0aGlzLmlzTW9iaWxlID0gb3B0aW9ucyAmJiAhIW9wdGlvbnMuaXNNb2JpbGU7XG5cbiAgICB2YXIgdXNlSW5zdGFuY2luZyA9IHRoaXMuaXNNb2JpbGU7XG4gICAgdmFyIHVzZUNvbXBhY3RCdWZmZXJzID0gdGhpcy5pc01vYmlsZTtcblxuICAgIHRoaXMubWF4X3Zjb3VudCA9IHRoaXMuaXNNb2JpbGUgPyBNT0JJTEVfTUFYX1ZDT1VOVCA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuY3VycmVudFZiYiA9IG5ldyBWZXJ0ZXhCdWZmZXJCdWlsZGVyKHVzZUluc3RhbmNpbmcsIHVuZGVmaW5lZCwgdGhpcy5tYXhfdmNvdW50LCB1c2VDb21wYWN0QnVmZmVycyk7XG4gICAgdGhpcy5tZXNoZXMgPSBbXTtcblxuICAgIHRoaXMubnVtQ2lyY2xlcyA9IHRoaXMubnVtRWxsaXBzZXMgPSB0aGlzLm51bVBvbHlsaW5lcyA9IHRoaXMubnVtTGluZVNlZ3MgPSAwO1xuICAgIHRoaXMubnVtUG9seXRyaWFuZ2xlcyA9IHRoaXMubnVtVHJpYW5nbGVzID0gMDtcblxuICAgIC8vIE5ld2x5IGFkZGVkIGYyZCBwYXNpbmcgc3R1ZmYuXG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuXG4gICAgLy8gTGFzdCBhYnNvbHV0ZSBwb3NpdGlvbnMgb2YgcG9pbnQgcGFyc2VkIHNvIGZhci5cbiAgICAvLyBVc2VkIHRvIGRlY29kZSByZWxhdGl2ZSBwb3NpdGlvbnMgcGFyc2VkIGZyb20gcG9pbnRzIGFycmF5LlxuICAgIHRoaXMub2Zmc2V0WCA9IDA7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcblxuICAgIC8vIFBhcnNlIG1hbmlmZXN0LCBkbyBzdHVmZi5cbiAgICAvLyAxLiBCdWlsZCBpbWFnZSBpZCB0byByYXN0ZXIgVVJJIG1hcCB1c2VkIHRvIGFzc2lnbiB2YWx1ZXMgdG8gdGV4dHVyZSBwYXRoLlxuICAgIC8vIDIuIEFjcXVpcmUgbmFtZXMgb2YgcHJvcGVydHkgZGF0YWJhc2UganNvbiBzdHJlYW1zLlxuICAgIGlmIChtYW5pZmVzdCkge1xuICAgICAgICB0aGlzLm1hbmlmZXN0QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbWFnZUlkMlVSSSA9IHt9O1xuICAgICAgICB2YXIgYXNzZXRzID0gbWFuaWZlc3QuYXNzZXRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGFzc2V0cy5sZW5ndGg7IGkgPCBlOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGFzc2V0c1tpXTtcbiAgICAgICAgICAgIHZhciBtaW1lID0gZW50cnkubWltZTtcbiAgICAgICAgICAgIGlmIChtaW1lLmluZGV4T2YoJ2ltYWdlLycpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHZhciBpZCA9IGVudHJ5LmlkO1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmluZGV4T2YoJy4nKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZUlkMlVSSVtpZF0gPSBiYXNlUGF0aCArIGVudHJ5LlVSSTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiQXV0b2Rlc2suQ2xvdWRQbGF0Zm9ybS5Qcm9wZXJ0eUF0dHJpYnV0ZXNcIilcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5ZGIuYXR0cnMucHVzaCh7cGF0aDplbnRyeS5VUkl9KTtcbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBcIkF1dG9kZXNrLkNsb3VkUGxhdGZvcm0uUHJvcGVydHlWYWx1ZXNcIilcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5ZGIudmFsdWVzLnB1c2goe3BhdGg6ZW50cnkuVVJJfSk7XG4gICAgICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJBdXRvZGVzay5DbG91ZFBsYXRmb3JtLlByb3BlcnR5SURzXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eWRiLmlkcy5wdXNoKHtwYXRoOmVudHJ5LlVSSX0pO1xuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiQXV0b2Rlc2suQ2xvdWRQbGF0Zm9ybS5Qcm9wZXJ0eVZpZXdhYmxlc1wiKVxuICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydHlkYi52aWV3YWJsZXMucHVzaCh7cGF0aDplbnRyeS5VUkl9KTtcbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBcIkF1dG9kZXNrLkNsb3VkUGxhdGZvcm0uUHJvcGVydHlPZmZzZXRzXCIpIHtcbiAgICAgICAgICAgICAgICAvLyByY3YgYW5kIHJjdl9vZmZzZXRzIGFyZSBub3QgdXNlZCBhbnkgbG9uZ2VyXG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlkLmluZGV4T2YoJ3JjdicpID09PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eWRiLm9mZnNldHMucHVzaCh7cGF0aDplbnRyeS5VUkl9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBcIkF1dG9kZXNrLkNsb3VkUGxhdGZvcm0uUHJvcGVydHlBVnNcIilcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5ZGIuYXZzLnB1c2goe3BhdGg6ZW50cnkuVVJJfSk7XG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuRjJELnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24obG9hZENvbnRleHQsIGZ5ZG9QYWNrKSB7XG5cbiAgICBpZiAoIShmeWRvUGFjayBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKVxuICAgICAgICBmeWRvUGFjayA9IG5ldyBVaW50OEFycmF5KGZ5ZG9QYWNrKTtcbiAgICB0aGlzLmRhdGEgPSBmeWRvUGFjaztcbiAgICB0aGlzLnBhcnNlKCk7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdCb3hlcy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGZidWYgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuc3RyaW5nQm94ZXMubGVuZ3RoKTtcbiAgICAgICAgZmJ1Zi5zZXQodGhpcy5zdHJpbmdCb3hlcyk7XG4gICAgICAgIHRoaXMuc3RyaW5nQm94ZXMgPSBmYnVmO1xuICAgIH1cblxuICAgIGxvYWRDb250ZXh0LmxvYWREb25lQ0IodHJ1ZSk7XG59O1xuXG5GMkQucHJvdG90eXBlLmxvYWRGcmFtZXMgPSBmdW5jdGlvbihsb2FkQ29udGV4dCkge1xuXG4gICAgdGhpcy5sb2FkQ29udGV4dCA9IGxvYWRDb250ZXh0O1xuXG4gICAgdmFyIGRhdGEgPSBsb2FkQ29udGV4dC5kYXRhO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKVxuICAgICAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIH0gZWxzZSBpZiAobG9hZENvbnRleHQuZmluYWxGcmFtZSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLnN0cmluZ0JveGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGZidWYgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuc3RyaW5nQm94ZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZidWYuc2V0KHRoaXMuc3RyaW5nQm94ZXMpO1xuICAgICAgICAgICAgdGhpcy5zdHJpbmdCb3hlcyA9IGZidWY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhcnNlRnJhbWVzKGxvYWRDb250ZXh0LmZpbmFsRnJhbWUpO1xuXG4gICAgbG9hZENvbnRleHQubG9hZERvbmVDQih0cnVlKTtcbn07XG5cblxuRjJELnByb3RvdHlwZS5wdXNoTWVzaCA9IGZ1bmN0aW9uKG1lc2gpIHtcbiAgICB0aGlzLm1lc2hlcy5wdXNoKG1lc2gpO1xuXG5cbiAgICBtZXNoLm1hdGVyaWFsID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEVsbGlwdGljYWxzIDogIXRoaXMuY3VycmVudFZiYi5udW1FbGxpcHRpY2FscyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBDaXJjbGVzOiAhdGhpcy5jdXJyZW50VmJiLm51bUNpcmN1bGFycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUcmlhbmdsZUdlb21zIDogIXRoaXMuY3VycmVudFZiYi5udW1UcmlhbmdsZUdlb21zLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcE1pdGVyTGluZXM6ICF0aGlzLmN1cnJlbnRWYmIubnVtTWl0ZXJMaW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUluc3RhbmNpbmcgOiB0aGlzLmN1cnJlbnRWYmIudXNlSW5zdGFuY2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVucGFja1Bvc2l0aW9uczogISFtZXNoLnVucGFja1hmb3JtXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICBpZiAodGhpcy5jdXJyZW50SW1hZ2UpIHtcbiAgICAgICAgbWVzaC5tYXRlcmlhbC5pbWFnZSA9IHRoaXMuY3VycmVudEltYWdlO1xuICAgICAgICBtZXNoLm1hdGVyaWFsLmltYWdlLm5hbWUgPSB0aGlzLmltYWdlTnVtYmVyKys7XG4gICAgICAgIHRoaXMuY3VycmVudEltYWdlID0gbnVsbDtcbiAgICB9XG59O1xuXG5GMkQucHJvdG90eXBlLmZsdXNoQnVmZmVyID0gZnVuY3Rpb24oYWRkQ291bnQsIGZpbmFsRmx1c2gpXG57XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRWYmIudmNvdW50ICYmICFmaW5hbEZsdXNoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBmbHVzaCA9IGZpbmFsRmx1c2g7XG4gICAgZmx1c2ggPSBmbHVzaCB8fCB0aGlzLmN1cnJlbnRWYmIuaXNGdWxsKGFkZENvdW50KTtcblxuICAgIGlmIChmbHVzaCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VmJiLnZjb3VudCkge1xuICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLmN1cnJlbnRWYmIudG9NZXNoKCk7XG4gICAgICAgICAgICBWQlV0aWxzLmJib3hVbmlvbih0aGlzLmJib3gsIG1lc2guYm91bmRpbmdCb3gpO1xuXG4gICAgICAgICAgICB0aGlzLnB1c2hNZXNoKG1lc2gpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmJiLnJlc2V0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG9hZENvbnRleHQpXG4gICAgICAgICAgICB0aGlzLmxvYWRDb250ZXh0LmxvYWREb25lQ0IodHJ1ZSwgZmluYWxGbHVzaCk7XG4gICAgfVxuXG5cbn07XG5cbkYyRC5wcm90b3R5cGUudHggPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHRoaXMuc3goeCk7XG59O1xuXG5GMkQucHJvdG90eXBlLnR5ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB0aGlzLnN5KHkpO1xufTtcblxuRjJELnByb3RvdHlwZS5zeCA9IGZ1bmN0aW9uKHgpIHtcbiAgICAvL1RPRE86IFRoZSBoYXJkY29kZWQgc2NhbGUgaXMgdXNlZCB0byBnZXQgdGhlIGludGVnZXIgY29vcmRzIGZyb20gRllET1xuICAgIC8vaW50byBzb21ldGhpbmcgbm9ybWFsIGFuZCBjbG9zZSB0byBwYWdlIGNvb3JkaW5hdGVzXG4gICAgcmV0dXJuIHggKiB0aGlzLnNjYWxlWDtcbn07XG5cbkYyRC5wcm90b3R5cGUuc3kgPSBmdW5jdGlvbih5KSB7XG4gICAgLy9UT0RPOiBUaGUgaGFyZGNvZGVkIHNjYWxlIGlzIHVzZWQgdG8gZ2V0IHRoZSBpbnRlZ2VyIGNvb3JkcyBmcm9tIEZZRE9cbiAgICAvL2ludG8gc29tZXRoaW5nIG5vcm1hbCBhbmQgY2xvc2UgdG8gcGFnZSBjb29yZGluYXRlc1xuICAgIHJldHVybiB5ICogdGhpcy5zY2FsZVk7XG59O1xuXG5GMkQucHJvdG90eXBlLmludmVydENvbG9yID0gZnVuY3Rpb24oYykge1xuICAgIHZhciBhID0gKChjID4+IDI0KSAmIDB4ZmYpO1xuICAgIHZhciBiID0gKChjID4+IDE2KSAmIDB4ZmYpO1xuICAgIHZhciBnID0gKChjID4+ICA4KSAmIDB4ZmYpO1xuICAgIHZhciByID0gKChjKSAgICAgICAmIDB4ZmYpO1xuXG4gICAgYiA9IDI1NSAtIGI7XG4gICAgZyA9IDI1NSAtIGc7XG4gICAgciA9IDI1NSAtIHI7XG5cbiAgICByZXR1cm4gKGEgPDwgMjQpIHwgKGIgPDwgMTYpIHwgKGcgPDwgOCkgfCByO1xufTtcblxuRjJELnByb3RvdHlwZS5tYXBDb2xvciA9IGZ1bmN0aW9uKGMsIGlzRmlsbCkge1xuXG4gICAgaWYgKCF0aGlzLmhpZGVQYXBlciB8fCB0aGlzLmJnQ29sb3IgIT09IDApXG4gICAgICAgIHJldHVybiBjO1xuXG4gICAgLy9Db2xvciBzdWJzdGl0dXRpb24gaW4gY2FzZXMgd2hlbiB3ZSB3YW50IHRvIGludGVybGVhdmUgdGhlIDJEIGRyYXdpbmdcbiAgICAvL2ludG8gYSAzRCBzY2VuZSAod2hlbiBiZ0NvbG9yIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRyYW5zcGFyZW50IGJsYWNrICgwKVxuICAgIC8vYW5kIGhpZGVQYXBlciBpcyBzZXQgdG8gdHJ1ZS5cblxuICAgIHZhciByID0gYyAmIDB4ZmY7XG4gICAgdmFyIGcgPSAoYyAmIDB4ZmYwMCkgPj4gODtcbiAgICB2YXIgYiA9IChjICYgMHhmZjAwMDApID4+IDE2O1xuXG4gICAgdmFyIGlzR3JleSA9IChyID09PSBnKSAmJiAociA9PT0gYik7XG5cbiAgICBpZiAociA8IDB4N2YpIHtcbiAgICAgICAgLy9jID0gdGhpcy5jb250cmFzdENvbG9yO1xuICAgIH0gZWxzZSBpZiAoaXNHcmV5ICYmIGlzRmlsbCkge1xuICAgICAgICBjID0gYyAmIDB4NTVmZmZmZmY7XG4gICAgfVxuXG4gICAgcmV0dXJuIGM7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09IEYyRCBQYXJzZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC8vXG5cblxuLy8gQ29udmVydCByZWxhdGl2ZSBwb3NpdGlvbnMgdG8gYWJzb2x1dGUgcG9zaXRpb25zLCBhbmQgdXBkYXRlIGdsb2JhbCBvZmZzZXRzLlxuRjJELnByb3RvdHlwZS5wYXJzZVBvaW50UG9zaXRpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHggPSB0aGlzLnN0cmVhbS5nZXRWYXJpbnRzKCk7XG4gICAgdmFyIHkgPSB0aGlzLnN0cmVhbS5nZXRWYXJpbnRzKCk7XG5cbiAgICB4ID0gcmVzdG9yZVNpZ25CaXRGcm9tTFNCKHgpO1xuICAgIHkgPSByZXN0b3JlU2lnbkJpdEZyb21MU0IoeSk7XG5cbiAgICB4ICs9IHRoaXMub2Zmc2V0WDtcbiAgICB5ICs9IHRoaXMub2Zmc2V0WTtcblxuICAgIHRoaXMub2Zmc2V0WCA9IHg7XG4gICAgdGhpcy5vZmZzZXRZID0geTtcblxuICAgIHJldHVybiBbdGhpcy50eCh4KSwgdGhpcy50eSh5KV07XG59O1xuXG5GMkQucHJvdG90eXBlLnBhcnNlckFzc2VydCA9IGZ1bmN0aW9uKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSwgZnVuY3Rpb25OYW1lKSB7XG4gICAgaWYgKGFjdHVhbFR5cGUgIT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwiRXhwZWN0IFwiICsgZXhwZWN0ZWRUeXBlICsgXCI7IGFjdHVhbCB0eXBlIGlzIFwiICtcbiAgICAgICAgICAgIGFjdHVhbFR5cGUgKyBcIjsgaW4gZnVuY3Rpb24gXCIgKyBmdW5jdGlvbk5hbWUpO1xuICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG5cbkYyRC5wcm90b3R5cGUudW5oYW5kbGVkVHlwZVdhcm5pbmcgPSBmdW5jdGlvbihpbkZ1bmN0aW9uLCBzZW1hbnRpY1R5cGUpIHtcbiAgICBsb2dnZXIud2FybihcIlVuaGFuZGxlZCBzZW1hbnRpYyB0eXBlIDogXCIgKyBzZW1hbnRpY1R5cGUgKyBcIiBpbiBmdW5jdGlvbiBcIiArIGluRnVuY3Rpb24pO1xufTtcblxuRjJELnByb3RvdHlwZS5wYXJzZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzZW1hbnRpY190eXBlID0gdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuICAgIHRoaXMub2JqZWN0U3RhY2sucHVzaChzZW1hbnRpY190eXBlKTtcbiAgICAvL2RlYnVnKHNlbWFudGljX3R5cGUpO1xuICAgIHN3aXRjaCAoc2VtYW50aWNfdHlwZSkge1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9zaGVldCA6XG4gICAgICAgICAgICB0aGlzLm9iamVjdE5hbWVTdGFjay5wdXNoKFwic2hlZXRcIik7XG4gICAgICAgICAgICB0aGlzLm9iamVjdE1lbWJlclF1ZXVlLnVuc2hpZnQoXCJwYXBlckNvbG9yXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X3ZpZXdwb3J0IDpcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TmFtZVN0YWNrLnB1c2goXCJ2aWV3cG9ydFwiKTtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TWVtYmVyUXVldWUudW5zaGlmdChcInVuaXRzXCIsIFwidHJhbnNmb3JtXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2NsaXAgOlxuICAgICAgICAgICAgdGhpcy5vYmplY3ROYW1lU3RhY2sucHVzaChcImNsaXBcIik7XG4gICAgICAgICAgICB0aGlzLm9iamVjdE1lbWJlclF1ZXVlLnVuc2hpZnQoXCJjb250b3VyQ291bnRzXCIsIFwicG9pbnRzXCIsIFwiaW5kaWNlc1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9wb2x5dHJpYW5nbGUgOlxuICAgICAgICAgICAgdGhpcy5vYmplY3ROYW1lU3RhY2sucHVzaChcInBvbHlUcmlhbmdsZVwiKTtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TWVtYmVyUXVldWUudW5zaGlmdChcInBvaW50c1wiLCBcImluZGljZXNcIiwgXCJjb2xvcnNcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3RfcmFzdGVyOlxuICAgICAgICAgICAgdGhpcy5vYmplY3ROYW1lU3RhY2sucHVzaChcInJhc3RlclwiKTtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TWVtYmVyUXVldWUudW5zaGlmdChcInBvc2l0aW9uXCIsIFwid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJpbWFnZUlkXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X3RleHQ6XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmdOdW1iZXIgPSB0aGlzLnN0cmluZ3MubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub2JqZWN0TnVtYmVyID09PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TnVtYmVyID0gdGhpcy5jdXJyZW50RmFrZUlkLS07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmdCb3gubWFrZUVtcHR5KCk7XG4gICAgICAgICAgICB0aGlzLm9iamVjdE5hbWVTdGFjay5wdXNoKFwidGV4dFwiKTtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TWVtYmVyUXVldWUudW5zaGlmdChcInN0cmluZ1wiLCBcInBvc2l0aW9uXCIsIFwiaGVpZ2h0XCIsIFwid2lkdGhTY2FsZVwiLCBcInJvdGF0aW9uXCIsIFwib2JsaXF1ZVwiLCBcImNoYXJXaWR0aHNcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3RfZm9udF9kZWY6XG4gICAgICAgICAgICB0aGlzLm9iamVjdE5hbWVTdGFjay5wdXNoKFwiZm9udERlZlwiKTtcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TWVtYmVyUXVldWUudW5zaGlmdChcIm5hbWVcIiwgXCJmdWxsTmFtZVwiLCBcImZsYWdzXCIsIFwic3BhY2luZ1wiLCBcInBhbm9zZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9lbmRfb2JqZWN0IDoge1xuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0U3RhY2sucG9wKCk7IC8vcG9wIHRoZSBlbmRfb2JqZWN0IHdlIHB1c2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvblxuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9iamVjdFN0YWNrLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZXJBc3NlcnQoMCwxLCBcInBhcnNlRW5kT2JqZWN0IChTdGFjayBFbXB0eSlcIik7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vRG8gYW55IGVuZC1vZi1vYmplY3QgcG9zdCBwcm9jZXNzaW5nIGRlcGVuZGluZyBvbiBvYmplY3QgdHlwZVxuICAgICAgICAgICAgICAgICAgICB2YXIgb2JqVHlwZSA9IHRoaXMub2JqZWN0U3RhY2sucG9wKCk7IC8vcG9wIHRoZSBzdGFydCBvYmplY3RcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X3BvbHl0cmlhbmdsZTogICB0aGlzLmFjdE9uUG9seVRyaWFuZ2xlKCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3Rfdmlld3BvcnQ6ICAgICAgIHRoaXMuYWN0T25WaWV3cG9ydCgpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2NsaXA6ICAgICAgICAgICB0aGlzLmFjdE9uQ2xpcCgpOyBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X3Jhc3RlcjogICAgICAgICB0aGlzLmFjdE9uUmFzdGVyKCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3RfdGV4dDogICAgICAgICAgIHRoaXMuYWN0T25UZXh0KCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3RfZm9udF9kZWY6ICAgICAgIHRoaXMuYWN0T25Gb250RGVmKCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy9aZXJvIG91dCB0aGUgc3RhdGUgb2YgdGhlIG9iamVjdCB3ZSBqdXN0IGZpbmlzaGVkIHByb2Nlc3NpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLm9iamVjdE5hbWVTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5wYXJzZU9ialN0YXRlW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIHN0YXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbcF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0TWVtYmVyUXVldWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5vYmplY3ROYW1lU3RhY2sucHVzaChcInVua25vd25cIik7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudW5oYW5kbGVkVHlwZVdhcm5pbmcoJ3BhcnNlT2JqZWN0Jywgc2VtYW50aWNfdHlwZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG5cbkYyRC5wcm90b3R5cGUuaW5pdFNoZWV0ID0gZnVuY3Rpb24ocGFwZXJDb2xvcikge1xuICAgIGlmICh0aGlzLmhpZGVQYXBlcilcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5iZ0NvbG9yID0gcGFwZXJDb2xvcjtcblxuICAgIGlmICh0aGlzLm1ldGFkYXRhKSB7XG4gICAgICAgIHZhciBwdyA9IHRoaXMucGFwZXJXaWR0aDtcbiAgICAgICAgdmFyIHBoID0gdGhpcy5wYXBlckhlaWdodDtcblxuICAgICAgICB2YXIgbyA9IHsgeDogMCwgeTogMCB9OyAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpblxuICAgICAgICB2YXIgZHcgPSB7IHg6IHB3LCB5OiAwIH07ICAgICAgLy8gcGFwZXIgd2lkdGggZGlyZWN0aW9uXG4gICAgICAgIHZhciBkaCA9IHsgeDogMCwgeTogcGggfTsgICAgIC8vIHBhcGVyIGhlaWdodCBkaXJlY3Rpb25cblxuICAgICAgICAvLyBJZiB0aGUgbWV0YWRhdGEgaGFzIGEgbm9uLXplcm8gcm90YXRpb24sIHRoZW4gdXNlIGl0XG4gICAgICAgIHZhciBkaW0gPSB0aGlzLm1ldGFkYXRhLnBhZ2VfZGltZW5zaW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKGlzRmluaXRlKGRpbS5wYXBlcl9yb3RhdGlvbikgJiYgZGltLnBhcGVyX3JvdGF0aW9uICE9PSAwKSB7XG4gICAgICAgICAgICB2YXIgYW5nbGUgPSBkaW0ucGFwZXJfcm90YXRpb24gKiBNYXRoLlBJIC8gMTgwO1xuICAgICAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgICAgIHZhciBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICBkdy55ID0gcHcgKiBzaW47XG4gICAgICAgICAgICBkdy54ID0gcHcgKiBjb3M7XG4gICAgICAgICAgICBkaC54ID0gLXBoICogc2luO1xuICAgICAgICAgICAgZGgueSA9IHBoICogY29zO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBtZXRhZGF0YSBoYXMgYSBub24temVybyBvZmZzZXQsIHRoZW4gdXNlIHRoZW1cbiAgICAgICAgaWYgKGlzRmluaXRlKGRpbS5wYXBlcl9vZmZzZXRfeCkgJiYgZGltLnBhcGVyX29mZnNldF94ICE9PSAwKSB7XG4gICAgICAgICAgICBvLnggPSBkaW0ucGFwZXJfb2Zmc2V0X3g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRmluaXRlKGRpbS5wYXBlcl9vZmZzZXRfeSkgJiYgZGltLnBhcGVyX29mZnNldF95ICE9PSAwKSB7XG4gICAgICAgICAgICBvLnkgPSBkaW0ucGFwZXJfb2Zmc2V0X3k7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdmJiID0gdGhpcy5jdXJyZW50VmJiO1xuXG4gICAgICAgIHZhciBwb2ludHMgPSBbby54LG8ueSwgby54K2R3Lngsby55K2R3LnksIG8ueCtkdy54K2RoLngsby55K2R3LnkrZGgueSwgby54K2RoLngsby55K2RoLnldO1xuICAgICAgICB2YXIgY29sb3JzID0gW3BhcGVyQ29sb3IsIHBhcGVyQ29sb3IsIHBhcGVyQ29sb3IsIHBhcGVyQ29sb3JdO1xuICAgICAgICB2YXIgaW5kaWNlcyA9IFswLDEsMiwwLDIsM107XG5cbiAgICAgICAgaWYgKCF0aGlzLm5vU2hhZG93KSB7XG4gICAgICAgICAgICB2YXIgc3MgPSBwdyAqIEYyZFNoYWRvd1JhdGlvO1xuICAgICAgICAgICAgdmFyIHNzdyA9IHsgeDogZHcueCAqIHNzIC8gcHcsIHk6IGR3LnkgKiBzcyAvIHB3IH07IC8vIHNoYWRvdyBvZmZzZXQgaW4gd2lkdGggZGlyZWN0aW9uXG4gICAgICAgICAgICB2YXIgc3NoID0geyB4OiBkaC54ICogc3MgLyBwaCwgeTogZGgueSAqIHNzIC8gcGggfTsgLy8gc2hhZG93IG9mZnNldCBpbiBoZWlnaHQgZGlyZWN0aW9uXG4gICAgICAgICAgICB2YXIgc3NiID0geyB4OiBvLngrc3N3LngsIHk6IG8ueStzc3cueSB9OyAgICAgICAgICAgLy8gYm90dG9tIHNoYWRvdyBvcmlnaW5cbiAgICAgICAgICAgIHZhciBzc3IgPSB7IHg6IG8ueCtkdy54LCB5OiBvLnkrZHcueSB9OyAgICAgICAgICAgICAvLyByaWdodCBzaGFkb3cgb3JpZ2luXG4gICAgICAgICAgICB2YXIgc2hhZG93Q29sb3IgPSAweGZmNTU1NTU1O1xuXG4gICAgICAgICAgICBwb2ludHMgPSBwb2ludHMuY29uY2F0KFtzc2IueC1zc2gueCxzc2IueS1zc2gueSwgc3NiLngtc3NoLngrZHcueCxzc2IueS1zc2gueStkdy55LCBzc2IueCtkdy54LHNzYi55K2R3LnksIHNzYi54LHNzYi55LFxuICAgICAgICAgICAgICAgIHNzci54LHNzci55LCBzc3IueCtzc3cueCxzc3IueStzc3cueSwgc3NyLngrc3N3Lngtc3NoLngrZGgueCxzc3IueStzc3cueS1zc2gueStkaC55LCBzc3IueC1zc2gueCtkaC54LHNzci55LXNzaC55K2RoLnldKTtcbiAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycy5jb25jYXQoW3NoYWRvd0NvbG9yLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3Isc2hhZG93Q29sb3IsXG4gICAgICAgICAgICAgICAgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvcixzaGFkb3dDb2xvcl0pO1xuICAgICAgICAgICAgaW5kaWNlcyA9IGluZGljZXMuY29uY2F0KFs0LDUsNiw0LDYsNyxcbiAgICAgICAgICAgICAgICA4LDksMTAsOCwxMCwxMV0pO1xuXG4gICAgICAgICAgICB0aGlzLmhhc1BhZ2VTaGFkb3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcGVyTGF5ZXIgPSAwOyAvL1B1dCB0aGUgcGFwZXIgdGhlIG51bGwgbGF5ZXIgc28gaXQgd29uJ3QgZ2V0IHR1cm5lZCBvZmYuXG4gICAgICAgIHZhciBwYXBlckRiSWQgPSAtMTtcblxuICAgICAgICB0aGlzLmFkZFBvbHlUcmlhbmdsZShwb2ludHMsIGNvbG9ycywgaW5kaWNlcywgMHhmZmZmZmZmZiwgcGFwZXJEYklkLCBwYXBlckxheWVyLCBmYWxzZSk7XG5cbiAgICAgICAgLy9QYWdlIG91dGxpbmVcbiAgICAgICAgdmJiLmFkZFNlZ21lbnQoby54LG8ueSxvLngrZHcueCxvLnkrZHcueSwgICAwLCAxZS02LCAweGZmMDAwMDAwLCBwYXBlckRiSWQsIHBhcGVyTGF5ZXIsIHRoaXMuY3VycmVudFZwSWQpO1xuICAgICAgICB2YmIuYWRkU2VnbWVudChvLngrZHcueCxvLnkrZHcueSxvLngrZHcueCtkaC54LG8ueStkdy55K2RoLnksIDAsIDFlLTYsIDB4ZmYwMDAwMDAsIHBhcGVyRGJJZCwgcGFwZXJMYXllciwgdGhpcy5jdXJyZW50VnBJZCk7XG4gICAgICAgIHZiYi5hZGRTZWdtZW50KG8ueCtkdy54K2RoLngsby55K2R3LnkrZGgueSxvLngrZGgueCxvLnkrZGgueSwgMCwgMWUtNiwgMHhmZjAwMDAwMCwgcGFwZXJEYklkLCBwYXBlckxheWVyLCB0aGlzLmN1cnJlbnRWcElkKTtcbiAgICAgICAgdmJiLmFkZFNlZ21lbnQoby54K2RoLngsby55K2RoLnksby54LG8ueSwgICAwLCAxZS02LCAweGZmMDAwMDAwLCBwYXBlckRiSWQsIHBhcGVyTGF5ZXIsIHRoaXMuY3VycmVudFZwSWQpO1xuXG5cbiAgICAgICAgLy9UZXN0IHBhdHRlcm4gZm9yIGxpbmUgc3R5bGVzLlxuICAgICAgICAvL2ZvciAodmFyIGk9MDsgaTwzOTsgaSsrKSB7XG4gICAgICAgIC8vICAgIHZiYi5hZGRTZWdtZW50KDAsIHBoICsgaSAqIDAuMjUgKyAxLCAxMiwgMTIgKyBwaCArIGkgKiAwLjI1ICsgMSwgMCwgLTEgLyogZGV2aWNlIHNwYWNlIHBpeGVsIHdpZHRoICovLCAweGZmMDAwMDAwLCAweGZmZmZmZmZmLCAwLCAwLCBpKTtcbiAgICAgICAgLy99XG5cbiAgICAgICAgLy9UZXN0IHBhdHRlcm4gZm9yIGxpbmUgc3R5bGVzLlxuICAgICAgICAvL2ZvciAodmFyIGk9MDsgaTwzOTsgaSsrKSB7XG4gICAgICAgIC8vICAgIHZiYi5hZGRTZWdtZW50KDAsIHBoICsgKGkrMzkpICogMC4yNSArIDEsIDEyLCAxMiArIHBoICsgKGkrMzkpICogMC4yNSArIDEsIDAsICgxLjAgLyAyNS40KSAvKjFtbSB3aWR0aCovLCAweGZmMDAwMDAwLCAweGZmZmZmZmZmLCAwLCAwLCBpKTtcbiAgICAgICAgLy99XG5cbiAgICB9XG59O1xuXG5GMkQucHJvdG90eXBlLnNldE9iamVjdE1lbWJlciA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIGlmICghdGhpcy5vYmplY3RNZW1iZXJRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJVbmV4cGVjdGVkIG9iamVjdCBtZW1iZXIuIFwiICsgdmFsICsgXCIgb24gb2JqZWN0IFwiICsgdGhpcy5vYmplY3ROYW1lU3RhY2tbdGhpcy5vYmplY3ROYW1lU3RhY2subGVuZ3RoLTFdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBwcm9wTmFtZSA9IHRoaXMub2JqZWN0TWVtYmVyUXVldWUuc2hpZnQoKTtcbiAgICB2YXIgY3VyT2JqTmFtZSA9IHRoaXMub2JqZWN0TmFtZVN0YWNrW3RoaXMub2JqZWN0TmFtZVN0YWNrLmxlbmd0aC0xXTtcblxuICAgIC8vVGhlIHBhcGVyIGNvbG9yIG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBhcyBzb29uIGFzIGl0IGNvbWVzIGluXG4gICAgLy9iZWNhdXNlIHdlIHdhbnQgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZSBnZW9tZXRyeSBmaXJzdCwgYmVmb3JlXG4gICAgLy9hZGRpbmcgYW55IG90aGVyIGdlb21ldHJ5XG4gICAgaWYgKGN1ck9iak5hbWUgPT0gXCJzaGVldFwiICYmIHByb3BOYW1lID09IFwicGFwZXJDb2xvclwiKSB7XG4gICAgICAgIHRoaXMuaW5pdFNoZWV0KHZhbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChjdXJPYmpOYW1lKSB7XG4gICAgICAgIHRoaXMucGFyc2VPYmpTdGF0ZVtjdXJPYmpOYW1lXVtwcm9wTmFtZV0gPSB2YWw7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblxuRjJELnByb3RvdHlwZS5wYXJzZVN0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzID0gdGhpcy5zdHJlYW07XG4gICAgdmFyIHNlbWEgPSBzLmdldFZhcmludHMoKTtcblxuICAgIHZhciBsZW4gPSBzLmdldFZhcmludHMoKTtcbiAgICB2YXIgcmV0ID0gcy5nZXRTdHJpbmcobGVuKTtcblxuICAgIHN3aXRjaCAoc2VtYSkge1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9vYmplY3RfbWVtYmVyOlxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0T2JqZWN0TWVtYmVyKHJldCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IGxvZ2dlci5pbmZvKFwiVW5leHBlY3RlZCBvcGNvZGUgc2VtYW50aWMgdHlwZSBmb3Igc3RyaW5nLlwiKTsgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG59O1xuXG5cbkYyRC5wcm90b3R5cGUuYWN0T25Gb250RGVmID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvbnREZWYgPSB0aGlzLnBhcnNlT2JqU3RhdGUuZm9udERlZjtcbiAgICB0aGlzLmZvbnREZWZzWysrdGhpcy5mb250Q291bnRdID0gZm9udERlZjtcbiAgICB0aGlzLmZvbnRJZCA9IHRoaXMuZm9udENvdW50O1xufTtcblxuXG5GMkQucHJvdG90eXBlLnBhcnNlUG9pbnQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHZhciBzZW1hID0gcy5nZXRWYXJpbnRzKCk7IC8vc2tpcCBwYXN0IHRoZSBzZW1hbnRpY3NcbiAgICB2YXIgcmV0ID0gdGhpcy5wYXJzZVBvaW50UG9zaXRpb25zKCk7XG5cbiAgICBzd2l0Y2ggKHNlbWEpIHtcbiAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3Rfb2JqZWN0X21lbWJlcjpcbiAgICAgICAgICAgIGlmICh0aGlzLnNldE9iamVjdE1lbWJlcihyZXQpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiBsb2dnZXIuaW5mbyhcIlVuZXhwZWN0ZWQgb3Bjb2RlIHNlbWFudGljIHR5cGUgZm9yIHBvaW50LlwiKTsgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG59O1xuXG5cbkYyRC5wcm90b3R5cGUucGFyc2VQb2ludHNBcnJheSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcblxuICAgIHZhciBzZW1hID0gcy5nZXRWYXJpbnRzKCk7XG5cbiAgICB2YXIgY291bnQgPSBzLmdldFZhcmludHMoKTsgLy8gbnVtYmVyIG9mIGNvb3JkaW5hdGVzICogMlxuICAgIGlmICghY291bnQpIHJldHVybjtcbiAgICBjb3VudCA9IGNvdW50IC8gMjtcblxuICAgIHZhciByZXQgPSBbXTtcbiAgICB2YXIgcG9zaXRpb247XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgcG9zaXRpb24gPSB0aGlzLnBhcnNlUG9pbnRQb3NpdGlvbnMoKTtcbiAgICAgICAgcmV0LnB1c2gocG9zaXRpb25bMF0pO1xuICAgICAgICByZXQucHVzaChwb3NpdGlvblsxXSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChzZW1hKSB7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X3BvbHlsaW5lIDpcbiAgICAgICAgICAgIHRoaXMuYWN0T25Qb2x5bGluZVBvaW50c0FycmF5KHJldCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2RvdDpcbiAgICAgICAgICAgIHRoaXMuYWN0T25Eb3QocmV0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3Rfb2JqZWN0X21lbWJlcjpcbiAgICAgICAgICAgIGlmICh0aGlzLnNldE9iamVjdE1lbWJlcihyZXQpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiBsb2dnZXIuaW5mbyhcIlVuZXhwZWN0ZWQgb3Bjb2RlIHNlbWFudGljIHR5cGUgZm9yIHBvaW50cyBhcnJheS5cIik7ICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxuRjJELnByb3RvdHlwZS5wYXJzZUludEFycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICB2YXIgc2VtYSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIHZhciBjb3VudCA9IHMuZ2V0VmFyaW50cygpOyAvLyB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4gaW50ZWdlciBhcnJheS5cbiAgICB2YXIgcmV0VmFsID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgIHJldFZhbC5wdXNoKHMuZ2V0VWludDMyKCkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc2VtYSkge1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9vYmplY3RfbWVtYmVyOlxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0T2JqZWN0TWVtYmVyKHJldFZhbCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLnVuaGFuZGxlZFR5cGVXYXJuaW5nKCdwYXJzZUludEFycmF5Jywgc2VtYSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0VmFsO1xufTtcblxuRjJELnByb3RvdHlwZS5wYXJzZURvdWJsZUFycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICB2YXIgc2VtYSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIHZhciBjb3VudCA9IHMuZ2V0VmFyaW50cygpOyAvLyB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4gaW50ZWdlciBhcnJheS5cbiAgICB2YXIgcmV0VmFsID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgIHJldFZhbC5wdXNoKHMuZ2V0RmxvYXQ2NCgpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNlbWEpIHtcbiAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3Rfb2JqZWN0X21lbWJlcjpcbiAgICAgICAgICAgIGlmICh0aGlzLnNldE9iamVjdE1lbWJlcihyZXRWYWwpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy51bmhhbmRsZWRUeXBlV2FybmluZygncGFyc2VEb3VibGVBcnJheScsIHNlbWEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFZhbDtcbn07XG5cbkYyRC5wcm90b3R5cGUucGFyc2VCeXRlQXJyYXkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHZhciBzZW1hID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgdmFyIGNvdW50ID0gcy5nZXRWYXJpbnRzKCk7IC8vIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBpbiBieXRlIGFycmF5LlxuICAgIHZhciByZXRWYWwgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgcmV0VmFsLnB1c2gocy5nZXRVaW50OCgpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNlbWEpIHtcbiAgICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3Rfb2JqZWN0X21lbWJlcjpcbiAgICAgICAgICAgIGlmICh0aGlzLnNldE9iamVjdE1lbWJlcihyZXRWYWwpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy51bmhhbmRsZWRUeXBlV2FybmluZygncGFyc2VCeXRlQXJyYXknLCBzZW1hKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXRWYWw7XG59O1xuXG5cbkYyRC5wcm90b3R5cGUucGFyc2VWYXJpbnRBcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzID0gdGhpcy5zdHJlYW07XG4gICAgdmFyIHNlbWEgPSBzLmdldFZhcmludHMoKTtcblxuICAgIHZhciByZXQgPSBbXTtcblxuICAgIC8vIFRvdGFsIG51bWJlciBvZiBpbnRlZ2VycyBpbiBhcnJheSwgbm90IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMuXG4gICAgdmFyIGNvdW50ID0gcy5nZXRWYXJpbnRzKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgcmV0LnB1c2gocy5nZXRWYXJpbnRzKCkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc2VtYSkge1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9vYmplY3RfbWVtYmVyOlxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0T2JqZWN0TWVtYmVyKHJldCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLnVuaGFuZGxlZFR5cGVXYXJuaW5nKCdwYXJzZVZhckludEFycmF5Jywgc2VtYSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxuXG5GMkQucHJvdG90eXBlLnBhcnNlSW50ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICB2YXIgc2VtYSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIHZhciB2YWwgPSBzLmdldFVpbnQzMigpO1xuXG4gICAgc3dpdGNoIChzZW1hKSB7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2NvbG9yOlxuICAgICAgICAgICAgdGhpcy5jb2xvciA9IHRoaXMubWFwQ29sb3IodmFsLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRHZW9tTWV0cmljcy5jb2xvcnMrKztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9maWxsOlxuICAgICAgICAgICAgdGhpcy5maWxsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmlsbENvbG9yID0gdGhpcy5tYXBDb2xvcih2YWwsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50R2VvbU1ldHJpY3MuZmlsbHMrKztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9vYmplY3RfbWVtYmVyOlxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0T2JqZWN0TWVtYmVyKHZhbCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICAgICAgICB0aGlzLnVuaGFuZGxlZFR5cGVXYXJuaW5nKCdwYXJzZUludCcsIHNlbWEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbkYyRC5wcm90b3R5cGUucGFyc2VWb2lkID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZW1hID0gdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuICBzd2l0Y2ggKHNlbWEpIHtcbiAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2ZpbGxfb2ZmOlxuICAgICAgICAgIHRoaXMuZmlsbCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLmZpbGxzKys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMudW5oYW5kbGVkVHlwZVdhcm5pbmcoJ3BhcnNlVm9pZCcsIHNlbWEpO1xuICAgICAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5GMkQucHJvdG90eXBlLnBhcnNlVmFyaW50ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICB2YXIgc2VtYW50aWNfdHlwZSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIHZhciB2YWwgPSBzLmdldFZhcmludHMoKTtcblxuICAgIHN3aXRjaCAoc2VtYW50aWNfdHlwZSkge1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9saW5lX3dlaWdodDpcbiAgICAgICAgICAgIHRoaXMubGluZVdlaWdodCA9IHRoaXMudHgodmFsKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLmxpbmVfd2VpZ2h0cysrO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2xpbmVfY2FwczpcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLmxpbmVfY2FwcysrO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2xpbmVfam9pbjpcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLmxpbmVfam9pbnMrKztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9vYmplY3RfaWQ6XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X21hcmt1cF9pZDpcbiAgICAgICAgICAgIHRoaXMub2JqZWN0TnVtYmVyID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5tYXhPYmplY3ROdW1iZXIgPSBNYXRoLm1heCh0aGlzLm1heE9iamVjdE51bWJlciwgdmFsKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLmRiX2lkcysrO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2xpbms6XG4gICAgICAgICAgICBpZiAodGhpcy5saW5rTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rQm94ZXNbdGhpcy5saW5rTnVtYmVyXSA9IHRoaXMuY3VycmVudExpbmtCb3guY2xvbmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMaW5rQm94Lm1ha2VFbXB0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5rTnVtYmVyID0gdmFsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X2xheWVyOlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50R2VvbU1ldHJpY3MubGF5ZXJzKys7XG4gICAgICAgICAgICB0aGlzLmxheWVyID0gdGhpcy5sYXllcnNNYXBbdmFsXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9mb250X3JlZjpcbiAgICAgICAgICAgIHRoaXMuZm9udElkID0gdmFsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X29iamVjdF9tZW1iZXI6XG4gICAgICAgICAgICBpZiAodGhpcy5zZXRPYmplY3RNZW1iZXIodmFsKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG59O1xuXG5GMkQucHJvdG90eXBlLnBhcnNlRmxvYXQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHZhciBzZW1hbnRpY190eXBlID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgdmFyIHZhbCA9IHMuZ2V0RmxvYXQzMigpO1xuXG4gICAgc3dpdGNoIChzZW1hbnRpY190eXBlKSB7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X21pdGVyX2FuZ2xlOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X21pdGVyX2xlbmd0aDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9vYmplY3RfbWVtYmVyOlxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0T2JqZWN0TWVtYmVyKHZhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG59O1xuXG5GMkQucHJvdG90eXBlLnBhcnNlQ2lyY3VsYXJBcmMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHZhciBzZW1hID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgaWYgKHRoaXMucGFyc2VyQXNzZXJ0KHNlbWEsIEYyZFNlbWFudGljVHlwZS5zdF9hcmMsICdwYXJzZUNpcmN1bGFyQXJjJykpIHJldHVybjtcblxuICAgIHZhciBwb2ludCA9IHRoaXMucGFyc2VQb2ludFBvc2l0aW9ucygpO1xuICAgIHZhciBtYWpvciA9IHMuZ2V0VmFyaW50cygpLCAvKnJvdGF0aW9uID0gcy5nZXRGbG9hdDMyKCksKi8gc3RhcnQgPSBzLmdldEZsb2F0MzIoKSwgZW5kID0gcy5nZXRGbG9hdDMyKCk7XG5cbiAgICB0aGlzLmFjdE9uQ2lyY3VsYXJBcmMocG9pbnRbMF0sIHBvaW50WzFdLCBzdGFydCwgZW5kLCB0aGlzLnN4KG1ham9yKSk7XG59O1xuXG5GMkQucHJvdG90eXBlLnBhcnNlQ2lyY2xlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICB2YXIgc2VtYSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIGlmICh0aGlzLnBhcnNlckFzc2VydChzZW1hLCBGMmRTZW1hbnRpY1R5cGUuc3RfYXJjLCAncGFyc2VDaXJjbGUnKSkgcmV0dXJuO1xuXG4gICAgdmFyIHBvaW50ID0gdGhpcy5wYXJzZVBvaW50UG9zaXRpb25zKCk7XG4gICAgdmFyIG1ham9yID0gcy5nZXRWYXJpbnRzKCk7XG5cbiAgICB0aGlzLmFjdE9uQ29tcGxldGVDaXJjbGUocG9pbnRbMF0sIHBvaW50WzFdLCB0aGlzLnN4KG1ham9yKSk7XG59O1xuXG5GMkQucHJvdG90eXBlLnBhcnNlQXJjID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICB2YXIgc2VtYSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIGlmICh0aGlzLnBhcnNlckFzc2VydChzZW1hLCBGMmRTZW1hbnRpY1R5cGUuc3RfYXJjLCAncGFyc2VBcmMnKSkgcmV0dXJuO1xuXG4gICAgLy8gUmVsYXRpdmUgcG9zaXRpb25zLlxuICAgIHZhciBwb2ludCA9IHRoaXMucGFyc2VQb2ludFBvc2l0aW9ucygpO1xuXG4gICAgdmFyIG1ham9yID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgdmFyIG1pbm9yID0gcy5nZXRWYXJpbnRzKCk7XG5cbiAgICB2YXIgcm90YXRpb24gPSBzLmdldEZsb2F0MzIoKTtcbiAgICB2YXIgc3RhcnQgPSBzLmdldEZsb2F0MzIoKTtcbiAgICB2YXIgZW5kID0gcy5nZXRGbG9hdDMyKCk7XG5cbiAgICB0aGlzLmFjdE9uQXJjKHBvaW50WzBdLCBwb2ludFsxXSwgc3RhcnQsIGVuZCwgdGhpcy5zeChtYWpvciksIHRoaXMuc3kobWlub3IpLCByb3RhdGlvbik7XG59O1xuXG5GMkQucHJvdG90eXBlLnBhcnNlRGF0YVR5cGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YV90eXBlID0gdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuXG4gICAgc3dpdGNoIChkYXRhX3R5cGUpIHtcbiAgICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF92b2lkOlxuICAgICAgICAgICAgdGhpcy5wYXJzZVZvaWQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X2ludCA6XG4gICAgICAgICAgICB0aGlzLnBhcnNlSW50KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF9vYmplY3QgOlxuICAgICAgICAgICAgdGhpcy5wYXJzZU9iamVjdCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfdmFyaW50IDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VWYXJpbnQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X3BvaW50X3ZhcmludCA6XG4gICAgICAgICAgICB0aGlzLnBhcnNlUG9pbnQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X2Zsb2F0IDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VGbG9hdCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfcG9pbnRfdmFyaW50X2FycmF5IDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VQb2ludHNBcnJheSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfY2lyY3VsYXJfYXJjIDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VDaXJjdWxhckFyYygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfY2lyY2xlIDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VDaXJjbGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X2FyYyA6XG4gICAgICAgICAgICB0aGlzLnBhcnNlQXJjKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF9pbnRfYXJyYXk6XG4gICAgICAgICAgICB0aGlzLnBhcnNlSW50QXJyYXkoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X3ZhcmludF9hcnJheTpcbiAgICAgICAgICAgIHRoaXMucGFyc2VWYXJpbnRBcnJheSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfYnl0ZV9hcnJheTpcbiAgICAgICAgICAgIHRoaXMucGFyc2VCeXRlQXJyYXkoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X3N0cmluZzpcbiAgICAgICAgICAgIHRoaXMucGFyc2VTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X2RvdWJsZV9hcnJheTpcbiAgICAgICAgICAgIHRoaXMucGFyc2VEb3VibGVBcnJheSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiRGF0YSB0eXBlIG5vdCBzdXBwb3J0ZWQgeWV0OiBcIiArIGRhdGFfdHlwZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG5GMkQucHJvdG90eXBlLnJlYWRIZWFkZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW0gPSBuZXcgSW5wdXRTdHJlYW0odGhpcy5kYXRhKTtcblxuICAgIC8vIFwiRjJEXCJcbiAgICB2YXIgaGVhZGVyID0gc3RyZWFtLmdldFN0cmluZygzKTtcblxuICAgIGlmIChoZWFkZXIgIT09IFwiRjJEXCIpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiSW52YWxpZCBGMkQgaGVhZGVyIDogXCIgKyBoZWFkZXIsIGVycm9yQ29kZVN0cmluZyhFcnJvckNvZGVzLkJBRF9EQVRBKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdmVyc2lvbk1ham9yID0gc3RyZWFtLmdldFN0cmluZygyKTtcbiAgICBpZiAodmVyc2lvbk1ham9yICE9PSBcIjAxXCIpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiT25seSBzdXBwb3J0IGYyZCBtYWpvciB2ZXJzaW9uIDE7IGFjdHVhbCB2ZXJzaW9uIGlzIDogXCIgKyB2ZXJzaW9uTWFqb3IsIGVycm9yQ29kZVN0cmluZyhFcnJvckNvZGVzLkJBRF9EQVRBKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZG90ID0gc3RyZWFtLmdldFN0cmluZygxKTtcbiAgICBpZiAoZG90ICE9PSBcIi5cIikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIHZlcnNpb24gZGVsaW1pdGVyLlwiLCBlcnJvckNvZGVTdHJpbmcoRXJyb3JDb2Rlcy5CQURfREFUQSkpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZlcnNpb25NaW5vciA9IHN0cmVhbS5nZXRTdHJpbmcoMik7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5GMkQucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gUmVhZCBhbmQgY2hlY2sgaGVhZGVyXG4gICAgaWYgKCF0aGlzLnJlYWRIZWFkZXIoKSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIHdoaWxlIChzdHJlYW0ub2Zmc2V0IDwgc3RyZWFtLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5wYXJzZURhdGFUeXBlKCk7XG4gICAgICAgIGlmICh0aGlzLmVycm9yKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIHRoaXMub3BDb3VudCsrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxpbmtOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5saW5rQm94ZXNbdGhpcy5saW5rTnVtYmVyXSA9IHRoaXMuY3VycmVudExpbmtCb3guY2xvbmUoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TGlua0JveC5tYWtlRW1wdHkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZsdXNoQnVmZmVyKDAsIHRydWUpO1xuICAgIHRoaXMuY3VycmVudFZiYiA9IG51bGw7XG5cbiAgICB0aGlzLnN0cmVhbSA9IG51bGw7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcblxuICAgIGxvZ2dlci5pbmZvKFwiRjJkIHBhcnNlOiBkYXRhIHR5cGVzIGNvdW50IDogXCIgKyB0aGlzLm9wQ291bnQpO1xufTtcblxuRjJELnByb3RvdHlwZS5wYXJzZUZyYW1lcyA9IGZ1bmN0aW9uKGZsdXNoKSB7XG5cbiAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbSA9IG5ldyBJbnB1dFN0cmVhbSh0aGlzLmRhdGEpO1xuICAgICAgICB3aGlsZSAoc3RyZWFtLm9mZnNldCA8IHN0cmVhbS5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlRGF0YVR5cGUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVycm9yKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgdGhpcy5vcENvdW50Kys7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFmbHVzaCkge1xuICAgICAgICBsb2dnZXIud2FybihcIlVuZXhwZWN0ZWQgRjJEIHBhcnNlIHN0YXRlOiBJZiB0aGVyZSBpcyBubyBkYXRhLCB3ZSBvbmx5IGV4cGVjdCBhIGZsdXNoIGNvbW1hbmQsIGJ1dCBmbHVzaCB3YXMgZmFsc2UuXCIpO1xuICAgIH1cblxuICAgIGlmIChmbHVzaCkge1xuICAgICAgICB0aGlzLmZsdXNoQnVmZmVyKDAsIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc3RyZWFtID0gbnVsbDtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT0gU2VtYW50aWMgQW5hbHlzaXMgUGFzcyA9PT09PT09PT09PT09PT09PT09PT09Ly9cblxuRjJELnByb3RvdHlwZS5hY3RPblBvbHlsaW5lUG9pbnRzQXJyYXkgPSBmdW5jdGlvbihwb2ludHMpIHtcblxuICAgIHRoaXMuZmx1c2hCdWZmZXIoKTtcblxuICAgIC8vIEZvciBub3cgb25seSBjb25zaWRlciB0aGlzLmZpbGwgPT0gZmFsc2UgY2FzZS5cbiAgICAvLyBUT0RPOiBoYW5kbGUgZmlsbCBjYXNlLlxuXG4gICAgdmFyIGNvdW50ID0gcG9pbnRzLmxlbmd0aCAvIDI7XG5cbiAgICB2YXIgdG90YWxMZW4gPSAwO1xuICAgIHZhciB4MCA9IHBvaW50c1swXTtcbiAgICB2YXIgeTAgPSBwb2ludHNbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgIHZhciB4MSA9IHBvaW50c1syKmldO1xuICAgICAgICB2YXIgeTEgPSBwb2ludHNbMippKzFdO1xuXG4gICAgICAgIC8vIFRPRE86IG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSByZXVzZWQgYXMgaXMuXG4gICAgICAgIHRoaXMuY3VycmVudFZiYi5hZGRTZWdtZW50KHgwLCB5MCwgeDEsIHkxLCB0b3RhbExlbiwgdGhpcy5saW5lV2VpZ2h0LCB0aGlzLmNvbG9yLCB0aGlzLm9iamVjdE51bWJlciwgdGhpcy5sYXllciwgdGhpcy5jdXJyZW50VnBJZCk7XG5cbiAgICAgICAgdG90YWxMZW4gKz0gTWF0aC5zcXJ0KCh4MS14MCkqKHgxLXgwKSArICh5MS15MCkqKHkxLXkwKSk7XG5cbiAgICAgICAgeDAgPSB4MTtcbiAgICAgICAgeTAgPSB5MTtcbiAgICB9XG5cbiAgICB0aGlzLm51bVBvbHlsaW5lcyArKztcbiAgICB0aGlzLm51bUxpbmVTZWdzICs9IGNvdW50IC0gMTtcblxuICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLnBsaW5lcysrO1xuICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLnBsaW5lX3BvaW50cyArPSBjb3VudCAtIDE7XG59O1xuXG5GMkQucHJvdG90eXBlLmFjdE9uRG90ID0gZnVuY3Rpb24ocG9pbnRzKSB7XG5cbiAgICB0aGlzLmN1cnJlbnRHZW9tTWV0cmljcy5kb3RzKys7XG5cbiAgICB2YXIgeDAgPSBwb2ludHNbMF07XG4gICAgdmFyIHkwID0gcG9pbnRzWzFdO1xuXG4gICAgdGhpcy5hY3RPbkNvbXBsZXRlQ2lyY2xlKHgwLCB5MCwgdGhpcy5zeCgxKSwgdHJ1ZSk7XG59O1xuXG5cbkYyRC5wcm90b3R5cGUuYWN0T25Db21wbGV0ZUNpcmNsZSA9IGZ1bmN0aW9uKGN4LCBjeSwgcmFkaXVzLCBza2lwQ291bnQpIHtcbiAgICAvLyBSZWxhdGl2ZSBwb3NpdGlvbnMuXG4gICAgdGhpcy5mbHVzaEJ1ZmZlcigpO1xuICAgIHRoaXMubnVtQ2lyY2xlcysrO1xuXG4gICAgaWYgKCFza2lwQ291bnQpXG4gICAgICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLmNpcmNsZXMrKztcblxuICAgIGlmICh0aGlzLmZpbGwpIHtcbiAgICAgICAgLy9BIHNpbXBsZSBmaWxsZWQgY2lyY2xlIGNhbiBiZSBoYW5kbGVkXG4gICAgICAgIC8vYXMgZGVnZW5lcmF0ZSB0aGljayBsaW5lIHNlZ21lbnQgLS0gbG90cyBvZiB0aGVzZVxuICAgICAgICAvL2luIGxpbmUgc3R5bGUgZ3Jhc3MgY2xpcHBpbmdzXG4gICAgICAgIHRoaXMuY3VycmVudFZiYi5hZGRTZWdtZW50KGN4LCBjeSwgY3gsIGN5LCAwLCAyICogcmFkaXVzLCB0aGlzLmNvbG9yLCB0aGlzLm9iamVjdE51bWJlcixcbiAgICAgICAgICAgIHRoaXMubGF5ZXIsIHRoaXMuY3VycmVudFZwSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZiYi5hZGRBcmMoY3gsIGN5LCAwLCAyICogTWF0aC5QSSwgLyptYWpvciovcmFkaXVzLCAvKm1pbm9yKi9yYWRpdXMsIC8qdGlsdCovMC4wLFxuICAgICAgICAgICAgdGhpcy5saW5lV2VpZ2h0LCB0aGlzLmNvbG9yLCB0aGlzLm9iamVjdE51bWJlciwgdGhpcy5sYXllciwgdGhpcy5jdXJyZW50VnBJZCk7XG4gICAgfVxufTtcblxuRjJELnByb3RvdHlwZS5hY3RPbkNpcmN1bGFyQXJjID0gZnVuY3Rpb24oY3gsIGN5LCBzdGFydCwgZW5kLCByYWRpdXMpIHtcbiAgICB0aGlzLm51bUNpcmNsZXMrKztcbiAgICB0aGlzLmN1cnJlbnRHZW9tTWV0cmljcy5jaXJjX2FyY3MrKztcbiAgICB0aGlzLmZsdXNoQnVmZmVyKCk7XG5cbi8vICAgIGRlYnVnKFwiY2lyY2xlIFwiICsgc3RhcnQgKyBcIiBcIiArIGVuZCArIFwiIGMgXCIgKyB0aGlzLmNvbG9yLnRvU3RyaW5nKDE2KSk7XG5cbiAgICB0aGlzLmN1cnJlbnRWYmIuYWRkQXJjKGN4LCBjeSwgc3RhcnQsIGVuZCwgLyptYWpvciovcmFkaXVzLCAvKm1pbm9yKi9yYWRpdXMsIC8qdGlsdCovMC4wLFxuICAgICAgICB0aGlzLmxpbmVXZWlnaHQsIHRoaXMuY29sb3IsIHRoaXMub2JqZWN0TnVtYmVyLCB0aGlzLmxheWVyLCB0aGlzLmN1cnJlbnRWcElkKTtcbn07XG5cbkYyRC5wcm90b3R5cGUuYWN0T25BcmMgPSBmdW5jdGlvbihjeCwgY3ksIHN0YXJ0LCBlbmQsIG1ham9yLCBtaW5vciwgcm90YXRpb24pIHtcbiAgICB0aGlzLm51bUVsbGlwc2VzKys7XG4gICAgdGhpcy5jdXJyZW50R2VvbU1ldHJpY3MuYXJjcysrO1xuICAgIC8vIFRPRE86IG5lZWQgdGhpcz9cbiAgICB0aGlzLmZsdXNoQnVmZmVyKCk7XG4gICAgdGhpcy5jdXJyZW50VmJiLmFkZEFyYyhjeCwgY3ksIHN0YXJ0LCBlbmQsIG1ham9yLCBtaW5vciwgcm90YXRpb24sXG4gICAgICAgIHRoaXMubGluZVdlaWdodCwgdGhpcy5jb2xvciwgdGhpcy5vYmplY3ROdW1iZXIsIHRoaXMubGF5ZXIsIHRoaXMuY3VycmVudFZwSWQpO1xufTtcblxuRjJELnByb3RvdHlwZS5hY3RPblJhc3RlciA9IGZ1bmN0aW9uKCkge1xuXG4gICAgaWYgKCF0aGlzLm1hbmlmZXN0QXZhaWxhYmxlKVxuICAgICAgICByZXR1cm47XG5cbiAgICB0aGlzLmZsdXNoQnVmZmVyKDQsIHRydWUpO1xuXG4gICAgdmFyIHBzID0gdGhpcy5wYXJzZU9ialN0YXRlLnJhc3RlcjtcblxuICAgIHZhciBwb3NpdGlvbiA9IHBzLnBvc2l0aW9uLFxuICAgICAgICBpbWFnZUlkICA9IHBzLmltYWdlSWQsXG4gICAgICAgIGltYWdlVXJpID0gdGhpcy5pbWFnZUlkMlVSSVtpbWFnZUlkXTtcblxuICAgIHZhciB3aWR0aCAgPSB0aGlzLnN4KHBzLndpZHRoKSxcbiAgICAgICAgaGVpZ2h0ID0gdGhpcy5zeShwcy5oZWlnaHQpO1xuXG4gICAgdmFyIGNlbnRlclggPSBwb3NpdGlvblswXSArIDAuNSAqIHdpZHRoLFxuICAgICAgICBjZW50ZXJZID0gcG9zaXRpb25bMV0gLSAwLjUgKiBoZWlnaHQ7XG5cbiAgICB0aGlzLmN1cnJlbnRWYmIuYWRkVGV4dHVyZWRRdWFkKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIC8qcm90YXRpb24qLzAsIDB4ZmYwMGZmZmYsIHRoaXMub2JqZWN0TnVtYmVyLCB0aGlzLmxheWVyLCB0aGlzLmN1cnJlbnRWcElkKTtcbiAgICB0aGlzLmN1cnJlbnRJbWFnZSA9IHsgZGF0YVVSSTogaW1hZ2VVcmkgfTtcblxuICAgIC8vV2UgY2FuIGRvIG9uZSBpbWFnZSBwZXIgVmVydGV4IEJ1ZmZlciwgc28gZmx1c2ggdGhlIHF1YWRcbiAgICB0aGlzLmZsdXNoQnVmZmVyKDAsIHRydWUpO1xuXG4gICAgLy9UT0RPOiB3ZSBuZWVkIHRvIGNvbXBhcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByYXN0ZXIgYWxzby5cbiAgICB0aGlzLmN1cnJlbnRHZW9tTWV0cmljcy5yYXN0ZXJzKys7XG59O1xuXG5GMkQucHJvdG90eXBlLmFjdE9uQ2xpcCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIHYgPSB0aGlzLnBhcnNlT2JqU3RhdGUuY2xpcDtcbiAgICB0aGlzLnBhcnNlT2JqU3RhdGUuY2xpcCA9IHt9O1xuXG4gICAgdGhpcy5jbGlwcy5wdXNoKHYpO1xuXG4gICAgdGhpcy5jdXJyZW50R2VvbU1ldHJpY3MuY2xpcHMrKztcbn07XG5cbkYyRC5wcm90b3R5cGUuYWN0T25UZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgLy9UT0RPOiB0ZXh0IG5vdCBjdXJyZW50bHkgdXNlZCBmb3IgcmVuZGVyaW5nLFxuICAgIC8vYnV0IHdlIGNvbGxlY3QgdGhlIHN0cmluZ3MgZm9yIHNlYXJjaC9sb29rdXAgcHVycG9zZXNcbiAgICB0aGlzLnN0cmluZ3NbdGhpcy5jdXJyZW50U3RyaW5nTnVtYmVyXSA9IHRoaXMucGFyc2VPYmpTdGF0ZS50ZXh0LnN0cmluZztcblxuICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLnRleHRzKys7XG4gICAgdGhpcy5jdXJyZW50R2VvbU1ldHJpY3Muc3RyaW5ncy5wdXNoKHRoaXMucGFyc2VPYmpTdGF0ZS50ZXh0LnN0cmluZyk7XG5cbiAgICB0aGlzLnN0cmluZ0RiSWRzW3RoaXMuY3VycmVudFN0cmluZ051bWJlcl0gPSB0aGlzLm9iamVjdE51bWJlcjtcbiAgICB0aGlzLnN0cmluZ0JveGVzLnB1c2godGhpcy5jdXJyZW50U3RyaW5nQm94Lm1pbi54LCB0aGlzLmN1cnJlbnRTdHJpbmdCb3gubWluLnksIHRoaXMuY3VycmVudFN0cmluZ0JveC5tYXgueCwgdGhpcy5jdXJyZW50U3RyaW5nQm94Lm1heC55KTtcbiAgICBpZiAodGhpcy5leHRlbmRTdHJpbmdzRmV0Y2hpbmcpIHtcbiAgICAgICAgdGhpcy5zdHJpbmdDaGFyV2lkdGhzLnB1c2godGhpcy5wYXJzZU9ialN0YXRlLnRleHQuY2hhcldpZHRocyk7XG4gICAgICAgIHRoaXMuc3RyaW5nQW5nbGVzLnB1c2godGhpcy5wYXJzZU9ialN0YXRlLnRleHQucm90YXRpb24pO1xuICAgICAgICB0aGlzLnN0cmluZ1Bvc2l0aW9ucy5wdXNoKHRoaXMucGFyc2VPYmpTdGF0ZS50ZXh0LnBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5zdHJpbmdIZWlnaHRzLnB1c2godGhpcy5wYXJzZU9ialN0YXRlLnRleHQuaGVpZ2h0KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50U3RyaW5nQm94Lm1ha2VFbXB0eSgpO1xuICAgIHRoaXMuY3VycmVudFN0cmluZ051bWJlciA9IC0xO1xuICAgIGlmICh0aGlzLm9iamVjdE51bWJlciA8IC0xKVxuICAgICAgICB0aGlzLm9iamVjdE51bWJlciA9IDA7IC8vcmVzZXQgdGhlIGN1cnJlbnQgb2JqZWN0IElEIGluIGNhc2Ugd2Ugd2VyZSB1c2luZyBhIGZha2Ugb25lIGZvciB0aGUgdGV4dCBvYmplY3Rcbn07XG5cblxudmFyIF90bXBWZWN0b3IgPSBuZXcgTG12VmVjdG9yMygpO1xuXG4vL1BvbHl0cmlhbmdsZSBwcm9jZXNzaW5nIGRpZmZlcnMgZGVwZW5kaW5nIG9uIHdoZXRoZXJcbi8vd2Ugd2FudCBlZGdlIGFudGlhbGlhc2luZyBhbmQgd2hldGhlciB0aGUgcmVuZGVyZXIgaXMgdXNpbmdcbi8vaGFyZHdhcmUgaW5zdGFuY2luZyBvciBub3QsIHNvIGl0IHJlcXVpcmUgYSBsb3QgbW9yZVxuLy93b3JrIHRoYW4gb3RoZXIgZ2VvbWV0cmllcyBiZWZvcmUgc2VuZGluZyByYXcgcHJpbWl0aXZlcyB0byB0aGVcbi8vdmVydGV4IGJ1ZmZlci5cbkYyRC5wcm90b3R5cGUuYWRkUG9seVRyaWFuZ2xlID0gZnVuY3Rpb24ocG9pbnRzLCBjb2xvcnMsIGluZHMsIGNvbG9yLCBkYklkLCBsYXllciwgYW50aWFsaWFzRWRnZXMpIHtcbiAgICB2YXIgbWUgPSB0aGlzO1xuICAgIHZhciBlZGdlTWFwID0gbnVsbDtcblxuICAgIC8vRm9yIG5vbi10ZXh0IGdlb21ldHJ5IHdlIGdldCBnb29kIGxvb2tpbmcgcmVzdWx0cyB3aXRoXG4gICAgLy8xIHBpeGVsIG91dGxpbmVzLiBGb3IgdGV4dCwgd2hpY2ggaXMgZ2VuZXJhbGx5IHNtYWxsIGFuZCBoaWdobHkgZGV0YWlsZWQsXG4gICAgLy9hIDAuNSBwaXhlbCBBQSBvdXRsaW5lIGRvZXMgYmV0dGVyLlxuICAgIHZhciBhYUxpbmVXZWlnaHQgPSAtMS4wOyAvL25lZ2F0aXZlID0gaW4gcGl4ZWwgdW5pdHNcbiAgICBpZiAodGhpcy5vYmplY3RTdGFja1t0aGlzLm9iamVjdFN0YWNrLmxlbmd0aC0xXSA9PSBGMmRTZW1hbnRpY1R5cGUuc3RfdGV4dClcbiAgICAgICAgYWFMaW5lV2VpZ2h0ID0gLTAuNTtcblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0VkZ2UoaUZyb20sIGlUbykge1xuICAgICAgICBpZiAoaUZyb20gPiBpVG8pIHtcbiAgICAgICAgICAgIHZhciB0bXAgPSBpRnJvbTtcbiAgICAgICAgICAgIGlGcm9tID0gaVRvO1xuICAgICAgICAgICAgaVRvID0gdG1wO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlZGdlTWFwW2lGcm9tXSlcbiAgICAgICAgICAgIGVkZ2VNYXBbaUZyb21dID0gW2lUb107XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGFkamFjZW50VmVydHMgPSBlZGdlTWFwW2lGcm9tXTtcbiAgICAgICAgICAgIHZhciBpZHggPSBhZGphY2VudFZlcnRzLmxhc3RJbmRleE9mKGlUbyk7XG4gICAgICAgICAgICBpZiAoaWR4ID09IC0xKVxuICAgICAgICAgICAgICAgIGFkamFjZW50VmVydHMucHVzaChpVG8pOyAvL2ZpcnN0IHRpbWUgd2Ugc2VlIHRoaXMgZWRnZSwgc28gcmVtZW1iZXIgaXQgYXMgZXh0ZXJpb3IgZWRnZVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFkamFjZW50VmVydHNbaWR4XSA9IC0xOyAvL3RoZSBzZWNvbmQgdGltZSB3ZSBzZWUgYW4gZWRnZSBtYXJrIGl0IGFzIGludGVyaW9yIGVkZ2VcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYWRkQWxsQW50aWFsaWFzRWRnZXMoKSB7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlFbmQgPSBlZGdlTWFwLmxlbmd0aDsgaTxpRW5kOyBpKyspIHtcblxuICAgICAgICAgICAgdmFyIGFkamFjZW50VmVydHMgPSBlZGdlTWFwW2ldO1xuICAgICAgICAgICAgaWYgKCFhZGphY2VudFZlcnRzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8YWRqYWNlbnRWZXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBpVG8gPSBhZGphY2VudFZlcnRzW2pdO1xuICAgICAgICAgICAgICAgIGlmIChpVG8gPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvL2FuIGludGVyaW9yIGVkZ2Ugd2FzIGhlcmUgLS0gc2tpcFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL2V4dGVyaW9yIGVkZ2UgLS0gYWRkIGFuIGFudGlhbGlhc2luZyBsaW5lIGZvciBpdFxuICAgICAgICAgICAgICAgICAgICBtZS5mbHVzaEJ1ZmZlcig0KTtcbiAgICAgICAgICAgICAgICAgICAgbWUuY3VycmVudFZiYi5hZGRTZWdtZW50KHBvaW50c1syKmldLCBwb2ludHNbMippKzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzWzIqaVRvXSwgcG9pbnRzWzIqaVRvKzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhTGluZVdlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lLm1hcENvbG9yKGNvbG9ycyA/IGNvbG9yc1tpXSA6IGNvbG9yLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiSWQsIGxheWVyLCBtZS5jdXJyZW50VnBJZCk7XG57XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xvcnMgJiYgKGNvbG9yc1tpXSAhPSBjb2xvcnNbaVRvXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihcIkdvdXJhdWQgdHJpYW5nbGUgZW5jb3VudGVyZWQuIFdpbGwgaGF2ZSBpbmNvcnJlY3QgYW50aWFsaWFzaW5nLlwiKTt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYW50aWFsaWFzT25lRWRnZShpRnJvbSwgaVRvKSB7XG4gICAgICAgIGlmIChpRnJvbSA+IGlUbykge1xuICAgICAgICAgICAgdmFyIHRtcCA9IGlGcm9tO1xuICAgICAgICAgICAgaUZyb20gPSBpVG87XG4gICAgICAgICAgICBpVG8gPSB0bXA7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYWRqYWNlbnRWZXJ0cyA9IGVkZ2VNYXBbaUZyb21dO1xuICAgICAgICBpZiAoIWFkamFjZW50VmVydHMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdmFyIGlkeCA9IGFkamFjZW50VmVydHMuaW5kZXhPZihpVG8pO1xuICAgICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgICAgICAvL2V4dGVyaW9yIGVkZ2UgLS0gYWRkIGFuIGFudGlhbGlhc2luZyBsaW5lIGZvciBpdFxuICAgICAgICAgICAgbWUuZmx1c2hCdWZmZXIoNCk7XG4gICAgICAgICAgICBtZS5jdXJyZW50VmJiLmFkZFNlZ21lbnQocG9pbnRzWzIqaUZyb21dLCBwb2ludHNbMippRnJvbSsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbMippVG9dLCBwb2ludHNbMippVG8rMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYUxpbmVXZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWUubWFwQ29sb3IoY29sb3JzID8gY29sb3JzW2lGcm9tXSA6IGNvbG9yLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYklkLCBsYXllciwgbWUuY3VycmVudFZwSWQpO1xuXG4gICAgICAgICAgICBpZiAoY29sb3JzICYmIChjb2xvcnNbaUZyb21dICE9IGNvbG9yc1tpVG9dKSlcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybihcIkdvdXJhdWQgdHJpYW5nbGUgZW5jb3VudGVyZWQuIFdpbGwgaGF2ZSBpbmNvcnJlY3QgYW50aWFsaWFzaW5nLlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbnRpYWxpYXNFZGdlcykge1xuICAgICAgICBlZGdlTWFwID0gbmV3IEFycmF5KHBvaW50cy5sZW5ndGgvMik7XG5cbiAgICAgICAgZm9yIChsZXQgaT0gMCwgaUVuZCA9IGluZHMubGVuZ3RoOyBpPGlFbmQ7IGkrPSAzKSB7XG4gICAgICAgICAgICBsZXQgaTAgPSBpbmRzW2ldO1xuICAgICAgICAgICAgbGV0IGkxID0gaW5kc1tpKzFdO1xuICAgICAgICAgICAgbGV0IGkyID0gaW5kc1tpKzJdO1xuXG4gICAgICAgICAgICBwcm9jZXNzRWRnZShpMCwgaTEpO1xuICAgICAgICAgICAgcHJvY2Vzc0VkZ2UoaTEsIGkyKTtcbiAgICAgICAgICAgIHByb2Nlc3NFZGdlKGkyLCBpMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL0lmIHRoZSBwb2x5dHJpYW5nbGUgaXMgcGFydCBvZiB0ZXNzZWxhdGVkIHRleHQgb3IgaHlwZXJsaW5rLCBhZGQgaXQgdG8gdGhlIGN1cnJlbnRcbiAgICAvL3RleHQgb2JqZWN0IGJvdW5kaW5nIGJveFxuICAgIGlmICh0aGlzLmN1cnJlbnRTdHJpbmdOdW1iZXIgIT09IC0xIHx8IHRoaXMubGlua051bWJlcikge1xuICAgICAgICBsZXQgY291bnQgPSBwb2ludHMubGVuZ3RoIC8gMjsgLy8gbnVtYmVyIG9mIHZlcnRpY2VzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgICAgX3RtcFZlY3Rvci5zZXQocG9pbnRzWzIqaV0sIHBvaW50c1syKmkrMV0sIDApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RyaW5nTnVtYmVyICE9PSAtMSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJpbmdCb3guZXhwYW5kQnlQb2ludChfdG1wVmVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubGlua051bWJlcilcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMaW5rQm94LmV4cGFuZEJ5UG9pbnQoX3RtcFZlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50VmJiLnVzZUluc3RhbmNpbmcpIHtcbiAgICAgICAgbGV0IGNvdW50ID0gaW5kcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrPTMpIHtcbiAgICAgICAgICAgIGxldCBpMCA9IGluZHNbaV07XG4gICAgICAgICAgICBsZXQgaTEgPSBpbmRzW2krMV07XG4gICAgICAgICAgICBsZXQgaTIgPSBpbmRzW2krMl07XG5cbiAgICAgICAgICAgIHRoaXMuZmx1c2hCdWZmZXIoNCk7XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZiYi5hZGRUcmlhbmdsZUdlb20ocG9pbnRzWzIqaTBdLCBwb2ludHNbMippMCsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzWzIqaTFdLCBwb2ludHNbMippMSsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzWzIqaTJdLCBwb2ludHNbMippMisxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBDb2xvcihjb2xvcnMgPyBjb2xvcnNbaTBdIDogY29sb3IsIHRydWUpLCBkYklkLCBsYXllciwgdGhpcy5jdXJyZW50VnBJZCk7XG5cbiAgICAgICAgICAgIGlmIChhbnRpYWxpYXNFZGdlcykge1xuICAgICAgICAgICAgICAgIGFudGlhbGlhc09uZUVkZ2UoaTAsIGkxKTtcbiAgICAgICAgICAgICAgICBhbnRpYWxpYXNPbmVFZGdlKGkxLCBpMik7XG4gICAgICAgICAgICAgICAgYW50aWFsaWFzT25lRWRnZShpMiwgaTApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY291bnQgPSBwb2ludHMubGVuZ3RoIC8gMjsgLy8gbnVtYmVyIG9mIHZlcnRpY2VzXG5cbiAgICAgICAgdGhpcy5mbHVzaEJ1ZmZlcihjb3VudCk7XG4gICAgICAgIHZhciB2YmIgPSB0aGlzLmN1cnJlbnRWYmI7XG4gICAgICAgIHZhciB2YmFzZSA9IHZiYi52Y291bnQ7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHBvaW50c1syKmldO1xuICAgICAgICAgICAgdmFyIHkgPSBwb2ludHNbMippKzFdO1xuICAgICAgICAgICAgdmJiLmFkZFZlcnRleFBvbHl0cmlhbmdsZSh4LCB5LCB0aGlzLm1hcENvbG9yKGNvbG9ycyA/IGNvbG9yc1tpXSA6IGNvbG9yLCB0cnVlKSwgZGJJZCwgbGF5ZXIsIHRoaXMuY3VycmVudFZwSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmJiLmFkZEluZGljZXMoaW5kcywgdmJhc2UpO1xuXG4gICAgICAgIGlmIChhbnRpYWxpYXNFZGdlcykge1xuICAgICAgICAgICAgYWRkQWxsQW50aWFsaWFzRWRnZXMoKTtcbiAgICAgICAgfVxuXG4gICAgfVxufTtcblxuRjJELnByb3RvdHlwZS5hY3RPblBvbHlUcmlhbmdsZSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIHB0cmkgPSB0aGlzLnBhcnNlT2JqU3RhdGUucG9seVRyaWFuZ2xlO1xuICAgIHRoaXMucGFyc2VPYmpTdGF0ZS5wb2x5VHJpYW5nbGUgPSB7fTtcblxuICAgIHZhciBwb2ludHMgPSBwdHJpLnBvaW50cztcbiAgICB2YXIgaW5kcyA9IHB0cmkuaW5kaWNlcztcbiAgICB2YXIgY29sb3JzID0gcHRyaS5jb2xvcnM7XG5cbiAgICBpZiAoIXBvaW50cyB8fCAhaW5kcykge1xuICAgICAgICBsb2dnZXIud2FybihcIk1hbGZvcm1lZCBwb2x5dHJpYW5nbGUuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9Ta2lwIHBvbHl0cmlhbmdsZXMgdGhhdCBiZWxvbmcgdG8gdGV4dCBzdHJpbmdzIGZyb20gdGhlIGdlb21ldHJ5IHN0YXRzXG4gICAgLy9hcyB0aGV5IGFyZSBub3QgcmVsZXZhbnQgdG8gdGhlIHNoZWV0IHNpZ25hdHVyZSBjb21wdXRhdGlvblxuICAgIGlmICh0aGlzLm9iamVjdFN0YWNrW3RoaXMub2JqZWN0U3RhY2subGVuZ3RoLTFdID09IEYyZFNlbWFudGljVHlwZS5zdF90ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVUZXh0R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLnB0cmlzKys7XG4gICAgICAgIHRoaXMuY3VycmVudEdlb21NZXRyaWNzLnB0cmlfcG9pbnRzICs9IHBvaW50cy5sZW5ndGggLyAyO1xuICAgICAgICB0aGlzLmN1cnJlbnRHZW9tTWV0cmljcy5wdHJpX2luZGljZXMgKz0gaW5kcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5udW1Qb2x5dHJpYW5nbGVzKys7XG4gICAgdGhpcy5udW1UcmlhbmdsZXMgKz0gaW5kcy5sZW5ndGggLyAzO1xuXG4gICAgdGhpcy5hZGRQb2x5VHJpYW5nbGUocG9pbnRzLCBjb2xvcnMsIGluZHMsIHRoaXMuY29sb3IsIHRoaXMub2JqZWN0TnVtYmVyLCB0aGlzLmxheWVyLCB0cnVlKTtcbn07XG5cbkYyRC5wcm90b3R5cGUuYWN0T25WaWV3cG9ydCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIHYgPSB0aGlzLnBhcnNlT2JqU3RhdGUudmlld3BvcnQ7XG4gICAgdGhpcy5wYXJzZU9ialN0YXRlLnZpZXdwb3J0ID0ge307XG5cbiAgICB2Lmdlb21fbWV0cmljcyA9IHRoaXMuY3VycmVudEdlb21NZXRyaWNzID0gaW5pdEdlb21NZXRyaWNzKCk7XG5cbiAgICB0aGlzLnZpZXdwb3J0cy5wdXNoKHYpO1xuICAgIHRoaXMuY3VycmVudFZwSWQgPSB0aGlzLnZpZXdwb3J0cy5sZW5ndGggLSAxO1xufTtcblxuRjJELnByb3RvdHlwZS5jcmVhdGVMYXllckdyb3VwcyA9IGZ1bmN0aW9uKGxheWVycykge1xuXG4gICAgLy8gVGVtcG9yYXJ5OiBidWlsZCB0aGUgbGF5ZXJzIHRyZWUuIEV2ZW50dWFsbHkgdGhlIGV4dHJhY3RvclxuICAgIC8vIHNob3VsZCBiZSB0aGUgb25lIGRvaW5nIHRoaXM7IHdlJ3JlIGluY29tcGxldGVseSBmYWtpbmcgaXRcbiAgICAvLyBieSBsb29raW5nIGF0IHRoZSBsYXllciBuYW1lcy5cbiAgICAvL1xuICAgIHZhciBsYXllcnNSb290ID0gdGhpcy5sYXllcnNSb290ID0ge25hbWU6ICdyb290JywgaWQ6ICdyb290JywgY2hpbGRyZW5CeU5hbWU6IHt9LCBpc0xheWVyOiBmYWxzZX07XG4gICAgdmFyIGdyb3VwSWQgPSAwLCBsYXllcklkID0gMDtcblxuICAgIGZvciAodmFyIGwgaW4gbGF5ZXJzKSB7XG5cbiAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQobCk7XG4gICAgICAgIHZhciBsYXllckRlZiA9IGxheWVyc1tsXTtcblxuICAgICAgICB2YXIgbmFtZSA9ICh0eXBlb2YgbGF5ZXJEZWYgPT09IFwic3RyaW5nXCIpID8gbGF5ZXJEZWYgOiBsYXllckRlZi5uYW1lO1xuXG4gICAgICAgIGlmICghbmFtZSlcbiAgICAgICAgICAgIG5hbWUgPSBsOyAvL3dvbid0IGdldCBoZXJlLi4uXG5cbiAgICAgICAgdmFyIHBhdGggPSBuYW1lLnNwbGl0KCd8Jyk7XG4gICAgICAgIHZhciBwYXJlbnQgPSBsYXllcnNSb290O1xuXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGF0aENvbXBvbmVudCA9IHBhdGhbaV07XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBwYXJlbnQuY2hpbGRyZW5CeU5hbWVbcGF0aENvbXBvbmVudF07XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwYXRoQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdncm91cC0nICsgZ3JvdXBJZCsrLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5CeU5hbWU6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXllcjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuQnlOYW1lW3BhdGhDb21wb25lbnRdID0gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyZW50ID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudC5jaGlsZHJlbkJ5TmFtZVtuYW1lXSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBpZDogbGF5ZXJJZCsrLFxuICAgICAgICAgICAgY2hpbGRyZW5CeU5hbWU6IHt9LFxuICAgICAgICAgICAgaXNMYXllcjogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNvcnRMYXllcnMocGFyZW50KSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IE9iamVjdC5rZXlzKHBhcmVudC5jaGlsZHJlbkJ5TmFtZSkubWFwKGZ1bmN0aW9uKGspIHtyZXR1cm4gcGFyZW50LmNoaWxkcmVuQnlOYW1lW2tdO30pO1xuICAgICAgICBkZWxldGUgcGFyZW50LmNoaWxkcmVuQnlOYW1lO1xuXG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgICAgICAgICBwYXJlbnQuY2hpbGRDb3VudCA9IDA7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2hpbGRDb3VudCArPSBzb3J0TGF5ZXJzKGNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRyZW4uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIGlmIChhLmlzTGF5ZXIgJiYgIWIuaXNMYXllcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7IC8vIExheWVycyBiZWZvcmUgZ3JvdXBzXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYS5pc0xheWVyICYmIGIuaXNMYXllcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSwgdW5kZWZpbmVkLCB7c2Vuc2l0aXZpdHk6ICdiYXNlJywgbnVtZXJpYzogdHJ1ZX0pOyAvLyBTb3J0IGxheWVycyBhbmQgZ3JvdXBzIGJ5IG5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudC5pc0xheWVyID8gMSA6IHBhcmVudC5jaGlsZENvdW50O1xuICAgIH1cbiAgICBzb3J0TGF5ZXJzKHRoaXMubGF5ZXJzUm9vdCk7XG59O1xuIl0sIm5hbWVzIjpbIlZlcnRleEJ1ZmZlckJ1aWxkZXIiLCJMbXZCb3gzIiwiTG12VmVjdG9yMyIsIlZCVXRpbHMiLCJJbnB1dFN0cmVhbSIsImxvZ2dlciIsImVycm9yQ29kZVN0cmluZyIsIkVycm9yQ29kZXMiLCJNT0JJTEVfTUFYX1ZDT1VOVCIsIkYyZERhdGFUeXBlIiwiZHRfb2JqZWN0IiwiZHRfdm9pZCIsImR0X2J5dGUiLCJkdF9pbnQiLCJkdF9mbG9hdCIsImR0X2RvdWJsZSIsImR0X3ZhcmludCIsImR0X3BvaW50X3ZhcmludCIsImR0X2J5dGVfYXJyYXkiLCJkdF9pbnRfYXJyYXkiLCJkdF9mbG9hdF9hcnJheSIsImR0X2RvdWJsZV9hcnJheSIsImR0X3ZhcmludF9hcnJheSIsImR0X3BvaW50X3ZhcmludF9hcnJheSIsImR0X2FyYyIsImR0X2NpcmNsZSIsImR0X2NpcmN1bGFyX2FyYyIsImR0X3N0cmluZyIsImR0X2xhc3RfZGF0YV90eXBlIiwiRjJkU2VtYW50aWNUeXBlIiwic3Rfb2JqZWN0X21lbWJlciIsInN0X2ZpbGwiLCJzdF9maWxsX29mZiIsInN0X2NsaXBfb2ZmIiwic3RfbGF5ZXIiLCJzdF9saW5rIiwic3RfbGluZV93ZWlnaHQiLCJzdF9taXRlcl9hbmdsZSIsInN0X21pdGVyX2xlbmd0aCIsInN0X2xpbmVfcGF0dGVybl9yZWYiLCJzdF9iYWNrX2NvbG9yIiwic3RfY29sb3IiLCJzdF9tYXJrdXAiLCJzdF9vYmplY3RfaWQiLCJzdF9tYXJrdXBfaWQiLCJzdF9yZXNldF9yZWxfb2Zmc2V0Iiwic3RfZm9udF9yZWYiLCJzdF9iZWdpbl9vYmplY3QiLCJzdF9jbGlwIiwic3RfbGluZV9jYXBzIiwic3RfbGluZV9qb2luIiwic3RfbGluZV9wYXR0ZXJuX2RlZiIsInN0X2ZvbnRfZGVmIiwic3Rfdmlld3BvcnQiLCJzdF9zaGVldCIsInN0X2FyYyIsInN0X3BvbHlsaW5lIiwic3RfcmFzdGVyIiwic3RfdGV4dCIsInN0X3BvbHl0cmlhbmdsZSIsInN0X2RvdCIsInN0X2VuZF9vYmplY3QiLCJzdF9sYXN0X3NlbWFudGljX3R5cGUiLCJGMmRTaGFkb3dSYXRpbyIsImluaXRHZW9tTWV0cmljcyIsInJlc3RvcmVTaWduQml0RnJvbUxTQiIsImludGVnZXIiLCJGMkQiLCJtZXRhZGF0YSIsIm1hbmlmZXN0IiwiYmFzZVBhdGgiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwic2NhbGVYIiwic2NhbGVZIiwiYmJveCIsIm1pbiIsIngiLCJ5IiwieiIsIm1heCIsImlzMmQiLCJsYXllcnNNYXAiLCJmb250RGVmcyIsImZvbnRDb3VudCIsImZvbnRJZCIsIm1hbmlmZXN0QXZhaWxhYmxlIiwiZ2VvbU1ldHJpY3NTdW0iLCJvYmplY3RNZW1iZXJRdWV1ZSIsInByb3BlcnR5ZGIiLCJhdHRycyIsImF2cyIsImlkcyIsInZhbHVlcyIsIm9mZnNldHMiLCJ2aWV3YWJsZXMiLCJkaW1zIiwicGFnZV9kaW1lbnNpb25zIiwicGFwZXJXaWR0aCIsInBhZ2Vfd2lkdGgiLCJwYXBlckhlaWdodCIsInBhZ2VfaGVpZ2h0IiwicGxvdF93aWR0aCIsInBsb3RfaGVpZ2h0IiwiaGlkZVBhcGVyIiwiaGlkZV9wYXBlciIsInB3IiwicGgiLCJkaW0iLCJpc0Zpbml0ZSIsInBhcGVyX3JvdGF0aW9uIiwiYW5nbGUiLCJNYXRoIiwiUEkiLCJjb3MiLCJzaW4iLCJkd3giLCJkd3kiLCJkaHgiLCJkaHkiLCJwYXBlcl9vZmZzZXRfeCIsInBhcGVyX29mZnNldF95IiwiY291bnQiLCJsIiwibGF5ZXJzIiwiaW5kZXgiLCJwYXJzZUludCIsImxheWVyQ291bnQiLCJjcmVhdGVMYXllckdyb3VwcyIsImdlb21fbWV0cmljcyIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJyZWR1Y2UiLCJhY2MiLCJjdXIiLCJtb2RlbFNwYWNlIiwibm9TaGFkb3ciLCJoYXNQYWdlU2hhZG93Iiwib3BDb3VudCIsImV4Y2x1ZGVUZXh0R2VvbWV0cnkiLCJleHRlbmRTdHJpbmdzRmV0Y2hpbmciLCJmb250RmFjZXMiLCJmb250RmFtaWxpZXMiLCJ2aWV3cG9ydHMiLCJjdXJyZW50VnBJZCIsImN1cnJlbnRHZW9tTWV0cmljcyIsImNsaXBzIiwic3RyaW5ncyIsInN0cmluZ0RiSWRzIiwic3RyaW5nQm94ZXMiLCJzdHJpbmdDaGFyV2lkdGhzIiwic3RyaW5nQW5nbGVzIiwic3RyaW5nUG9zaXRpb25zIiwic3RyaW5nSGVpZ2h0cyIsImN1cnJlbnRTdHJpbmdOdW1iZXIiLCJjdXJyZW50U3RyaW5nQm94IiwibGlua0JveGVzIiwiY3VycmVudExpbmtCb3giLCJvYmplY3ROdW1iZXIiLCJjdXJyZW50RmFrZUlkIiwiaW1hZ2VOdW1iZXIiLCJsaW5rTnVtYmVyIiwibWF4T2JqZWN0TnVtYmVyIiwib2JqZWN0U3RhY2siLCJvYmplY3ROYW1lU3RhY2siLCJwYXJzZU9ialN0YXRlIiwicG9seVRyaWFuZ2xlIiwidmlld3BvcnQiLCJjbGlwIiwicmFzdGVyIiwidGV4dCIsImZvbnREZWYiLCJ1a25vd24iLCJsYXllciIsImJnQ29sb3IiLCJjb250cmFzdENvbG9yIiwiY29sb3IiLCJmaWxsQ29sb3IiLCJpc01vYmlsZSIsInVzZUluc3RhbmNpbmciLCJ1c2VDb21wYWN0QnVmZmVycyIsIm1heF92Y291bnQiLCJjdXJyZW50VmJiIiwibWVzaGVzIiwibnVtQ2lyY2xlcyIsIm51bUVsbGlwc2VzIiwibnVtUG9seWxpbmVzIiwibnVtTGluZVNlZ3MiLCJudW1Qb2x5dHJpYW5nbGVzIiwibnVtVHJpYW5nbGVzIiwiZXJyb3IiLCJvZmZzZXRYIiwib2Zmc2V0WSIsImltYWdlSWQyVVJJIiwiYXNzZXRzIiwiaSIsImUiLCJlbnRyeSIsIm1pbWUiLCJpbmRleE9mIiwiaWQiLCJzdWJzdHIiLCJVUkkiLCJ0eXBlIiwicHVzaCIsInBhdGgiLCJwcm90b3R5cGUiLCJsb2FkIiwibG9hZENvbnRleHQiLCJmeWRvUGFjayIsIlVpbnQ4QXJyYXkiLCJkYXRhIiwicGFyc2UiLCJmYnVmIiwiRmxvYXQzMkFycmF5Iiwic2V0IiwibG9hZERvbmVDQiIsImxvYWRGcmFtZXMiLCJmaW5hbEZyYW1lIiwicGFyc2VGcmFtZXMiLCJwdXNoTWVzaCIsIm1lc2giLCJtYXRlcmlhbCIsInNraXBFbGxpcHRpY2FscyIsIm51bUVsbGlwdGljYWxzIiwic2tpcENpcmNsZXMiLCJudW1DaXJjdWxhcnMiLCJza2lwVHJpYW5nbGVHZW9tcyIsIm51bVRyaWFuZ2xlR2VvbXMiLCJza2lwTWl0ZXJMaW5lcyIsIm51bU1pdGVyTGluZXMiLCJ1bnBhY2tQb3NpdGlvbnMiLCJ1bnBhY2tYZm9ybSIsImN1cnJlbnRJbWFnZSIsImltYWdlIiwibmFtZSIsImZsdXNoQnVmZmVyIiwiYWRkQ291bnQiLCJmaW5hbEZsdXNoIiwidmNvdW50IiwiZmx1c2giLCJpc0Z1bGwiLCJ0b01lc2giLCJiYm94VW5pb24iLCJib3VuZGluZ0JveCIsInJlc2V0IiwidHgiLCJzeCIsInR5Iiwic3kiLCJpbnZlcnRDb2xvciIsImMiLCJhIiwiYiIsImciLCJyIiwibWFwQ29sb3IiLCJpc0ZpbGwiLCJpc0dyZXkiLCJwYXJzZVBvaW50UG9zaXRpb25zIiwic3RyZWFtIiwiZ2V0VmFyaW50cyIsInBhcnNlckFzc2VydCIsImFjdHVhbFR5cGUiLCJleHBlY3RlZFR5cGUiLCJmdW5jdGlvbk5hbWUiLCJ3YXJuIiwidW5oYW5kbGVkVHlwZVdhcm5pbmciLCJpbkZ1bmN0aW9uIiwic2VtYW50aWNUeXBlIiwicGFyc2VPYmplY3QiLCJzZW1hbnRpY190eXBlIiwidW5zaGlmdCIsIm1ha2VFbXB0eSIsInBvcCIsIm9ialR5cGUiLCJhY3RPblBvbHlUcmlhbmdsZSIsImFjdE9uVmlld3BvcnQiLCJhY3RPbkNsaXAiLCJhY3RPblJhc3RlciIsImFjdE9uVGV4dCIsImFjdE9uRm9udERlZiIsInN0YXRlIiwicCIsImluaXRTaGVldCIsInBhcGVyQ29sb3IiLCJvIiwiZHciLCJkaCIsInZiYiIsInBvaW50cyIsImNvbG9ycyIsImluZGljZXMiLCJzcyIsInNzdyIsInNzaCIsInNzYiIsInNzciIsInNoYWRvd0NvbG9yIiwiY29uY2F0IiwicGFwZXJMYXllciIsInBhcGVyRGJJZCIsImFkZFBvbHlUcmlhbmdsZSIsImFkZFNlZ21lbnQiLCJzZXRPYmplY3RNZW1iZXIiLCJ2YWwiLCJwcm9wTmFtZSIsInNoaWZ0IiwiY3VyT2JqTmFtZSIsInBhcnNlU3RyaW5nIiwicyIsInNlbWEiLCJsZW4iLCJyZXQiLCJnZXRTdHJpbmciLCJpbmZvIiwicGFyc2VQb2ludCIsInBhcnNlUG9pbnRzQXJyYXkiLCJwb3NpdGlvbiIsImFjdE9uUG9seWxpbmVQb2ludHNBcnJheSIsImFjdE9uRG90IiwicGFyc2VJbnRBcnJheSIsInJldFZhbCIsImdldFVpbnQzMiIsInBhcnNlRG91YmxlQXJyYXkiLCJnZXRGbG9hdDY0IiwicGFyc2VCeXRlQXJyYXkiLCJnZXRVaW50OCIsInBhcnNlVmFyaW50QXJyYXkiLCJmaWxsIiwiZmlsbHMiLCJwYXJzZVZvaWQiLCJwYXJzZVZhcmludCIsImxpbmVXZWlnaHQiLCJsaW5lX3dlaWdodHMiLCJsaW5lX2NhcHMiLCJsaW5lX2pvaW5zIiwiZGJfaWRzIiwiY2xvbmUiLCJwYXJzZUZsb2F0IiwiZ2V0RmxvYXQzMiIsInBhcnNlQ2lyY3VsYXJBcmMiLCJwb2ludCIsIm1ham9yIiwic3RhcnQiLCJlbmQiLCJhY3RPbkNpcmN1bGFyQXJjIiwicGFyc2VDaXJjbGUiLCJhY3RPbkNvbXBsZXRlQ2lyY2xlIiwicGFyc2VBcmMiLCJtaW5vciIsInJvdGF0aW9uIiwiYWN0T25BcmMiLCJwYXJzZURhdGFUeXBlIiwiZGF0YV90eXBlIiwicmVhZEhlYWRlciIsImhlYWRlciIsIkJBRF9EQVRBIiwidmVyc2lvbk1ham9yIiwiZG90IiwidmVyc2lvbk1pbm9yIiwib2Zmc2V0IiwiYnl0ZUxlbmd0aCIsInRvdGFsTGVuIiwieDAiLCJ5MCIsIngxIiwieTEiLCJzcXJ0IiwicGxpbmVzIiwicGxpbmVfcG9pbnRzIiwiZG90cyIsImN4IiwiY3kiLCJyYWRpdXMiLCJza2lwQ291bnQiLCJjaXJjbGVzIiwiYWRkQXJjIiwiY2lyY19hcmNzIiwiYXJjcyIsInBzIiwiaW1hZ2VJZCIsImltYWdlVXJpIiwid2lkdGgiLCJoZWlnaHQiLCJjZW50ZXJYIiwiY2VudGVyWSIsImFkZFRleHR1cmVkUXVhZCIsImRhdGFVUkkiLCJyYXN0ZXJzIiwidiIsInN0cmluZyIsInRleHRzIiwiY2hhcldpZHRocyIsIl90bXBWZWN0b3IiLCJpbmRzIiwiZGJJZCIsImFudGlhbGlhc0VkZ2VzIiwibWUiLCJlZGdlTWFwIiwiYWFMaW5lV2VpZ2h0IiwicHJvY2Vzc0VkZ2UiLCJpRnJvbSIsImlUbyIsInRtcCIsImFkamFjZW50VmVydHMiLCJpZHgiLCJsYXN0SW5kZXhPZiIsImFkZEFsbEFudGlhbGlhc0VkZ2VzIiwiaUVuZCIsImoiLCJhbnRpYWxpYXNPbmVFZGdlIiwiQXJyYXkiLCJpMCIsImkxIiwiaTIiLCJleHBhbmRCeVBvaW50IiwiYWRkVHJpYW5nbGVHZW9tIiwidmJhc2UiLCJhZGRWZXJ0ZXhQb2x5dHJpYW5nbGUiLCJhZGRJbmRpY2VzIiwicHRyaSIsInB0cmlzIiwicHRyaV9wb2ludHMiLCJwdHJpX2luZGljZXMiLCJsYXllcnNSb290IiwiY2hpbGRyZW5CeU5hbWUiLCJpc0xheWVyIiwiZ3JvdXBJZCIsImxheWVySWQiLCJsYXllckRlZiIsInNwbGl0IiwicGFyZW50IiwicGF0aENvbXBvbmVudCIsIml0ZW0iLCJzb3J0TGF5ZXJzIiwiY2hpbGRyZW4iLCJrIiwiY2hpbGRDb3VudCIsInNvcnQiLCJsb2NhbGVDb21wYXJlIiwic2Vuc2l0aXZpdHkiLCJudW1lcmljIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/f2d/F2d.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/f2d/F2dGeometry.js": /*!***************************************************!*\ !*** ./src/file-loaders/lmvtk/f2d/F2dGeometry.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ F2DGeometry: () => (/* binding */ F2DGeometry)\n/* harmony export */ });\n/* harmony import */ var _GeometryBuilder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GeometryBuilder */ \"./src/file-loaders/lmvtk/f2d/GeometryBuilder.js\");\n/* harmony import */ var _common_InputStream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/InputStream */ \"./src/file-loaders/lmvtk/common/InputStream.js\");\n/* harmony import */ var _logger_Logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../logger/Logger */ \"./src/logger/Logger.js\");\n/* harmony import */ var _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../net/ErrorCodes */ \"./src/file-loaders/net/ErrorCodes.js\");\n/* harmony import */ var _F2d__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./F2d */ \"./src/file-loaders/lmvtk/f2d/F2d.js\");\n\n\n\n\n\n\nclass F2DGeometry {\n constructor(metadata, options) {\n this.metadata = metadata;\n this.scaleX = 1;\n this.scaleY = 1;\n this.bbox = { min: { x: 0, y: 0, z: 0 }, max: { x: 0, y: 0, z: 0 } };\n this.fillColor = null;\n if (metadata) {\n const dimensions = metadata.page_dimensions;\n this.setScale(dimensions);\n }\n\n this.excludeTextGeometry = options.excludeTextGeometry || true;\n\n this.dbId = 0;\n this.maxDbId = 0;\n\n this.geometry = new _GeometryBuilder__WEBPACK_IMPORTED_MODULE_0__.GeometryBuilder();\n\n // Newly added f2d pasing stuff.\n this.error = false;\n\n // Last absolute positions of point parsed so far.\n // Used to decode relative positions parsed from points array.\n this.offsetX = 0;\n this.offsetY = 0;\n }\n\n setScale(dims) {\n this.paperWidth = dims.page_width;\n this.paperHeight = dims.page_height;\n\n // TODO: scale parsing.\n this.scaleX = this.paperWidth / dims.plot_width;\n this.scaleY = this.paperHeight / dims.plot_height;\n }\n\n load(loadContext, fydoPack) {\n if (!(fydoPack instanceof Uint8Array)) fydoPack = new Uint8Array(fydoPack);\n this.data = fydoPack;\n this.parse();\n\n loadContext.loadDoneCB(true);\n }\n\n loadFrames(loadContext) {\n this.loadContext = loadContext;\n\n let data = loadContext.data;\n\n if (data) {\n if (!(data instanceof Uint8Array)) data = new Uint8Array(data);\n this.data = data;\n } else if (loadContext.finalFrame) {\n this.data = null;\n }\n\n this.probeFrames(loadContext.finalFrame);\n\n loadContext.loadDoneCB(true);\n }\n\n sx(x) {\n //TODO: The hardcoded scale is used to get the integer coords from FYDO\n //into something normal and close to page coordinates\n return x * this.scaleX;\n }\n\n sy(y) {\n //TODO: The hardcoded scale is used to get the integer coords from FYDO\n //into something normal and close to page coordinates\n return y * this.scaleY;\n }\n\n // ====================== F2D Parser ================================= //\n\n parserAssert(actualType, expectedType, functionName) {\n if (actualType != expectedType) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.warn(\n \"Expect \" +\n expectedType +\n \"; actual type is \" +\n actualType +\n \"; in function \" +\n functionName\n );\n this.error = true;\n return true;\n } else {\n return false;\n }\n }\n\n parseDataType() {\n const data_type = this.stream.getVarints();\n switch (data_type) {\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_void:\n this.parseVoid();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_int:\n this.parseInt();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_object:\n this.parseObject();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_varint:\n this.parseVarint();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_point_varint:\n this.parsePoint();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_float:\n this.parseFloat();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_point_varint_array:\n this.parsePointsArray();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_circular_arc:\n this.parseCircularArc();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_circle:\n this.parseCircle();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_arc:\n this.parseArc();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_int_array:\n this.parseIntArray();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_varint_array:\n this.parseVarintArray();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_byte_array:\n this.parseByteArray();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_string:\n this.parseString();\n break;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dDataType.dt_double_array:\n this.parseDoubleArray();\n break;\n default:\n this.error = true;\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.info(\"Data type not supported yet: \" + data_type);\n break;\n }\n }\n\n readHeader() {\n const stream = this.stream = new _common_InputStream__WEBPACK_IMPORTED_MODULE_1__.InputStream(this.data);\n\n // \"F2D\"\n const header = stream.getString(3);\n\n if (header !== \"F2D\") {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.error(\n \"Invalid F2D header : \" + header,\n (0,_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__.errorCodeString)(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__.ErrorCodes.BAD_DATA)\n );\n return false;\n }\n\n const versionMajor = stream.getString(2);\n if (versionMajor !== \"01\") {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.error(\n \"Only support f2d major version 1; actual version is : \" + versionMajor,\n (0,_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__.errorCodeString)(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__.ErrorCodes.BAD_DATA)\n );\n return false;\n }\n\n const dot = stream.getString(1);\n if (dot !== \".\") {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.error(\n \"Invalid version delimiter.\",\n (0,_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__.errorCodeString)(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__.ErrorCodes.BAD_DATA)\n );\n return false;\n }\n\n const versionMinor = stream.getString(2);\n return true;\n }\n\n probe() {\n const stream = this.stream;\n this.error = false;\n\n try {\n while (stream.offset < stream.byteLength) {\n this.parseDataType();\n if (this.error) {\n break;\n }\n }\n } catch (exc) {\n // Typically caused by out of bounds access of data.\n const message = exc.toString();\n const stack = exc.stack ? exc.stack.toString() : \"...\";\n\n // Don't panic with this - we are supposed to hit out of bounds a couple of times when probing.\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.error(\n \ "Error in F2DProbe.prototype.probe : \" +\n message +\n \ " with stack : \" +\n stack\n );\n }\n }\n\n parse() {\n // Read and check header\n if (!this.readHeader()) return;\n this.probe();\n }\n\n parseFrames() {\n if (this.data) {\n this.stream=n ew _common_InputStream__WEBPACK_IMPORTED_MODULE_1__.InputStream(this.data);\n this.probe();\n }\n\n this.stream=n ull;\n this.data=n ull;\n }\n\n //===P arse Geometry===/ /\n\n parsePointPositions() {\n let x=t his.stream.getVarints();\n let y=t his.stream.getVarints();\n\n x=( 0,_F2d__WEBPACK_IMPORTED_MODULE_4__.restoreSignBitFromLSB)(x);\n y=( 0,_F2d__WEBPACK_IMPORTED_MODULE_4__.restoreSignBitFromLSB)(y);\n\n x +=t his.offsetX;\n y +=t his.offsetY;\n\n this.offsetX=x ;\n this.offsetY=y ;\n\n return [this.sx(x), this.sy(y)];\n }\n\n parseObject() {\n this.stream.getVarints();\n }\n\n parseString() {\n const s=t his.stream;\n s.getVarints(); //skip past the semantics\n\n const len=s .getVarints();\n return s.getString(len);\n }\n\n parsePoint() {\n const s=t his.stream;\n s.getVarints(); //skip past the semantics\n this.parsePointPositions();\n }\n\n parsePointsArray() {\n const s=t his.stream;\n const sema=s .getVarints();\n\n let count=s .getVarints(); // number of coordinates * 2\n if (!count) return;\n count=c ount / 2;\n\n const ret=[ ];\n let position;\n\n for (let i=0 ; i < count; ++i) {\n position=t his.parsePointPositions();\n ret.push(position[0]);\n ret.push(position[1]);\n }\n\n switch (sema) {\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_polyline:\n this.actOnPolylinePointsArray(ret);\n return;\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_dot:\n this.actOnDot(ret[0], ret[1]);\n return;\n default:\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.info(\ "Unexpected opcode semantic type for points array.\");\n break;\n }\n }\n\n parseArray(getFunction) {\n const s=t his.stream;\n s.getVarints();\n const count=s .getVarints(); // total number of elements in integer array.\n\n for (let i=0 ; i < count; ++i) {\n getFunction();\n }\n }\n\n parseIntArray() {\n const s=t his.stream;\n this.parseArray(s.getUint32.bind(s));\n }\n\n parseDoubleArray() {\n const s=t his.stream;\n this.parseArray(s.getFloat64.bind(s));\n }\n\n parseByteArray() {\n const s=t his.stream;\n this.parseArray(s.getUint8.bind(s));\n }\n\n parseVarintArray() {\n const s=t his.stream;\n this.parseArray(s.getVarints.bind(s));\n }\n\n parseInt() {\n const sema=t his.stream.getVarints();\n const val=t his.stream.getUint32();\n switch (sema) {\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_fill:\n this.fillColor=v al;\n break;\n }\n\n return val;\n }\n\n parseFloat() {\n this.stream.getVarints();\n this.stream.getFloat32();\n }\n\n parseVoid() {\n var sema=t his.stream.getVarints();\n switch (sema) {\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_fill_off:\n this.fillColor=n ull;\n break;\n }\n }\n\n parseVarint() {\n const s=t his.stream;\n const semantic_type=s .getVarints();\n const val=s .getVarints();\n\n switch (semantic_type) {\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_object_id:\n case _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_markup_id:\n this.dbId=v al;\n this.maxDbId=M ath.max(this.maxDbId, val);\n break;\n default:\n break;\n }\n }\n\n parseCircularArc() {\n const s=t his.stream;\n const sema=s .getVarints();\n if (this.parserAssert(sema, _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_arc, \ "parseCircularArc\"))\n return;\n\n const point=t his.parsePointPositions();\n const major=s .getVarints();\n const start=s .getFloat32();\n const end=s .getFloat32();\n\n this.actOnCircularArc(point[0], point[1], start, end, this.sx(major));\n }\n\n parseCircle() {\n const s=t his.stream;\n const sema=s .getVarints();\n if (this.parserAssert(sema, _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_arc, \ "parseCircle\")) return;\n\n const point=t his.parsePointPositions();\n const major=s .getVarints();\n\n this.actOnCompleteCircle(point[0], point[1], this.sx(major));\n }\n\n parseArc() {\n const s=t his.stream;\n const sema=s .getVarints();\n if (this.parserAssert(sema, _F2d__WEBPACK_IMPORTED_MODULE_4__.F2dSemanticType.st_arc, \ "parseArc\")) return;\n\n // Relative positions.\n const point=t his.parsePointPositions();\n\n const major=s .getVarints();\n const minor=s .getVarints();\n\n const rotation=s .getFloat32();\n const start=s .getFloat32();\n const end=s .getFloat32();\n\n this.actOnArc(\n point[0],\n point[1],\n start,\n end,\n this.sx(major),\n this.sy(minor),\n rotation\n );\n }\n\n //=================S emantic Analysis Pass======================//\n actOnPolylinePointsArray(points) {\n this.geometry.addPolyLine(points, this.fillColor, this.dbId);\n }\n\n actOnDot(x, y) {\n this.actOnCompleteCircle(x, y, this.sx(1));\n }\n\n actOnCompleteCircle(cx, cy, radius) {\n // Relative positions.\n this.geometry.addCircularArc(\n cx,\n cy,\n /*major*/radius,\n 0,\n 2 * Math.PI,\n this.dbId\n );\n }\n\n actOnCircularArc(cx, cy, start, end, radius) {\n this.geometry.addCircularArc(\n cx,\n cy,\n /*major*/radius,\n start,\n end,\n this.dbId\n );\n }\n\n actOnArc(cx, cy, start, end, major, minor) {\n this.geometry.addEllipticalArc(cx, cy, start, end, major, minor, this.dbId);\n }\n\n actOnPolyTriangle() {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.warn(\ "Polytriangles not currently supported.\");\n return;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2YyZC9GMmRHZW9tZXRyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBb0Q7QUFDQTtBQUNKO0FBQ21CO0FBQ1M7O0FBRXJFLE1BQU1RLFdBQVcsQ0FBQztFQUN2QkMsV0FBV0EsQ0FBQ0MsUUFBUSxFQUFFQyxPQUFPLEVBQUU7SUFDN0IsSUFBSSxDQUFDRCxRQUFRLEdBQUdBLFFBQVE7SUFDeEIsSUFBSSxDQUFDRSxNQUFNLEdBQUcsQ0FBQztJQUNmLElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUM7SUFDZixJQUFJLENBQUNDLElBQUksR0FBRyxFQUFFQyxHQUFHLEVBQUUsRUFBRUMsQ0FBQyxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVDLEdBQUcsRUFBRSxFQUFFSCxDQUFDLEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLElBQUksQ0FBQ0UsU0FBUyxHQUFHLElBQUk7SUFDckIsSUFBSVYsUUFBUSxFQUFFO01BQ1osTUFBTVcsVUFBVSxHQUFHWCxRQUFRLENBQUNZLGVBQWU7TUFDM0MsSUFBSSxDQUFDQyxRQUFRLENBQUNGLFVBQVUsQ0FBQztJQUMzQjs7SUFFQSxJQUFJLENBQUNHLG1CQUFtQixHQUFHYixPQUFPLENBQUNhLG1CQUFtQixJQUFJLElBQUk7O0lBRTlELElBQUksQ0FBQ0MsSUFBSSxHQUFHLENBQUM7SUFDYixJQUFJLENBQUNDLE9BQU8sR0FBRyxDQUFDOztJQUVoQixJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJM0IsNkRBQWUsQ0FBQyxDQUFDOztJQUVyQztJQUNBLElBQUksQ0FBQzRCLEtBQUssR0FBRyxLQUFLOztJQUVsQjtJQUNBO0lBQ0EsSUFBSSxDQUFDQyxPQUFPLEdBQUcsQ0FBQztJQUNoQixJQUFJLENBQUNDLE9BQU8s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QUMsR0FBR2YsSUFBSSxDQUFDaUIsRUFBRTtNQUNYLElBQUksQ0FBQzNIO0lBQ1AsQ0FBQztFQUNIOztFQUVBZ0gsZ0JBQWdCQSxDQUFDTyxFQUFFLEVBQUVDLEVBQUUsRUFBRVYsS0FBSyxFQUFFQyxHQUFHLEVBQUVVLE1BQU0sRUFBRTtJQUMzQyxJQUFJLENBQUN2SCxRQUFRLENBQUN3SCxjQUFjO01BQzFCSCxFQUFFO01BQ0ZDLEVBQUU7TUFDRixTQUFVQyxNQUFNO01BQ2hCWCxLQUFLO01BQ0xDLEdBQUc7TUFDSCxJQUFJLENBQUMvRztJQUNQLENBQUM7RUFDSDs7RUFFQW9ILFFBQVFBLENBQUNHLEVBQUUsRUFBRUMsRUFBRSxFQUFFVixLQUFLLEVBQUVDLEdBQUcsRUFBRUYsS0FBSyxFQUFFSyxLQUFLLEVBQUU7SUFDekMsSUFBSSxDQUFDaEgsUUFBUSxDQUFDMEgsZ0JBQWdCLENBQUNMLEVBQUUsRUFBRUMsRUFBRSxFQUFFVixLQUFLLEVBQUVDLEdBQUcsRUFBRUYsS0FBSyxFQUFFSyxLQUFLLEVBQUUsSUFBSSxDQUFDbEgsSUFBSSxDQUFDO0VBQzdFOztFQUVBNkgsaUJBQWlCQSxDQUFBLEVBQUc7SUFDbEJwSixrREFBTSxDQUFDb0QsSUFBSSxDQUFDLHdDQUF3QyxDQUFDO0lBQ3JEO0VBQ0Y7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvZjJkL0YyZEdlb21ldHJ5LmpzP2UxZjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VvbWV0cnlCdWlsZGVyIH0gZnJvbSBcIi4vR2VvbWV0cnlCdWlsZGVyXCI7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbSB9IGZyb20gXCIuLi9jb21tb24vSW5wdXRTdHJlYW1cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi9sb2dnZXIvTG9nZ2VyXCI7XG5pbXBvcnQgeyBlcnJvckNvZGVTdHJpbmcsIEVycm9yQ29kZXMgfSBmcm9tIFwiLi4vLi4vbmV0L0Vycm9yQ29kZXNcIjtcbmltcG9ydCB7IEYyZERhdGFUeXBlLCBGMmRTZW1hbnRpY1R5cGUsIHJlc3RvcmVTaWduQml0RnJvbUxTQiB9IGZyb20gXCIuL0YyZFwiO1xuXG5leHBvcnQgY2xhc3MgRjJER2VvbWV0cnkge1xuICBjb25zdHJ1Y3RvcihtZXRhZGF0YSwgb3B0aW9ucykge1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0aGlzLnNjYWxlWCA9IDE7XG4gICAgdGhpcy5zY2FsZVkgPSAxO1xuICAgIHRoaXMuYmJveCA9IHsgbWluOiB7IHg6IDAsIHk6IDAsIHo6IDAgfSwgbWF4OiB7IHg6IDAsIHk6IDAsIHo6IDAgfSB9O1xuICAgIHRoaXMuZmlsbENvbG9yID0gbnVsbDtcbiAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBtZXRhZGF0YS5wYWdlX2RpbWVuc2lvbnM7XG4gICAgICB0aGlzLnNldFNjYWxlKGRpbWVuc2lvbnMpO1xuICAgIH1cblxuICAgIHRoaXMuZXhjbHVkZVRleHRHZW9tZXRyeSA9IG9wdGlvbnMuZXhjbHVkZVRleHRHZW9tZXRyeSB8fCB0cnVlO1xuXG4gICAgdGhpcy5kYklkID0gMDtcbiAgICB0aGlzLm1heERiSWQgPSAwO1xuXG4gICAgdGhpcy5nZW9tZXRyeSA9IG5ldyBHZW9tZXRyeUJ1aWxkZXIoKTtcblxuICAgIC8vIE5ld2x5IGFkZGVkIGYyZCBwYXNpbmcgc3R1ZmYuXG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuXG4gICAgLy8gTGFzdCBhYnNvbHV0ZSBwb3NpdGlvbnMgb2YgcG9pbnQgcGFyc2VkIHNvIGZhci5cbiAgICAvLyBVc2VkIHRvIGRlY29kZSByZWxhdGl2ZSBwb3NpdGlvbnMgcGFyc2VkIGZyb20gcG9pbnRzIGFycmF5LlxuICAgIHRoaXMub2Zmc2V0WCA9IDA7XG4gICAgdGhpcy5vZmZzZXRZID0gMDtcbiAgfVxuXG4gIHNldFNjYWxlKGRpbXMpIHtcbiAgICB0aGlzLnBhcGVyV2lkdGggPSBkaW1zLnBhZ2Vfd2lkdGg7XG4gICAgdGhpcy5wYXBlckhlaWdodCA9IGRpbXMucGFnZV9oZWlnaHQ7XG5cbiAgICAvLyBUT0RPOiBzY2FsZSBwYXJzaW5nLlxuICAgIHRoaXMuc2NhbGVYID0gdGhpcy5wYXBlcldpZHRoIC8gZGltcy5wbG90X3dpZHRoO1xuICAgIHRoaXMuc2NhbGVZID0gdGhpcy5wYXBlckhlaWdodCAvIGRpbXMucGxvdF9oZWlnaHQ7XG4gIH1cblxuICBsb2FkKGxvYWRDb250ZXh0LCBmeWRvUGFjaykge1xuICAgIGlmICghKGZ5ZG9QYWNrIGluc3RhbmNlb2YgVWludDhBcnJheSkpIGZ5ZG9QYWNrID0gbmV3IFVpbnQ4QXJyYXkoZnlkb1BhY2spO1xuICAgIHRoaXMuZGF0YSA9IGZ5ZG9QYWNrO1xuICAgIHRoaXMucGFyc2UoKTtcblxuICAgIGxvYWRDb250ZXh0LmxvYWREb25lQ0IodHJ1ZSk7XG4gIH1cblxuICBsb2FkRnJhbWVzKGxvYWRDb250ZXh0KSB7XG4gICAgdGhpcy5sb2FkQ29udGV4dCA9IGxvYWRDb250ZXh0O1xuXG4gICAgbGV0IGRhdGEgPSBsb2FkQ29udGV4dC5kYXRhO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICghKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkgZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGxvYWRDb250ZXh0LmZpbmFsRnJhbWUpIHtcbiAgICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9iZUZyYW1lcyhsb2FkQ29udGV4dC5maW5hbEZyYW1lKTtcblxuICAgIGxvYWRDb250ZXh0LmxvYWREb25lQ0IodHJ1ZSk7XG4gIH1cblxuICBzeCh4KSB7XG4gICAgLy9UT0RPOiBUaGUgaGFyZGNvZGVkIHNjYWxlIGlzIHVzZWQgdG8gZ2V0IHRoZSBpbnRlZ2VyIGNvb3JkcyBmcm9tIEZZRE9cbiAgICAvL2ludG8gc29tZXRoaW5nIG5vcm1hbCBhbmQgY2xvc2UgdG8gcGFnZSBjb29yZGluYXRlc1xuICAgIHJldHVybiB4ICogdGhpcy5zY2FsZVg7XG4gIH1cblxuICBzeSh5KSB7XG4gICAgLy9UT0RPOiBUaGUgaGFyZGNvZGVkIHNjYWxlIGlzIHVzZWQgdG8gZ2V0IHRoZSBpbnRlZ2VyIGNvb3JkcyBmcm9tIEZZRE9cbiAgICAvL2ludG8gc29tZXRoaW5nIG5vcm1hbCBhbmQgY2xvc2UgdG8gcGFnZSBjb29yZGluYXRlc1xuICAgIHJldHVybiB5ICogdGhpcy5zY2FsZVk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09IEYyRCBQYXJzZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC8vXG5cbiAgcGFyc2VyQXNzZXJ0KGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSwgZnVuY3Rpb25OYW1lKSB7XG4gICAgaWYgKGFjdHVhbFR5cGUgIT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgXCJFeHBlY3QgXCIgK1xuICAgICAgICAgIGV4cGVjdGVkVHlwZSArXG4gICAgICAgICAgXCI7IGFjdHVhbCB0eXBlIGlzIFwiICtcbiAgICAgICAgICBhY3R1YWxUeXBlICtcbiAgICAgICAgICBcIjsgaW4gZnVuY3Rpb24gXCIgK1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICAgKTtcbiAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwYXJzZURhdGFUeXBlKCkge1xuICAgIGNvbnN0IGRhdGFfdHlwZSA9IHRoaXMuc3RyZWFtLmdldFZhcmludHMoKTtcbiAgICBzd2l0Y2ggKGRhdGFfdHlwZSkge1xuICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF92b2lkOlxuICAgICAgICB0aGlzLnBhcnNlVm9pZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfaW50OlxuICAgICAgICB0aGlzLnBhcnNlSW50KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF9vYmplY3Q6XG4gICAgICAgIHRoaXMucGFyc2VPYmplY3QoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X3ZhcmludDpcbiAgICAgICAgdGhpcy5wYXJzZVZhcmludCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfcG9pbnRfdmFyaW50OlxuICAgICAgICB0aGlzLnBhcnNlUG9pbnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X2Zsb2F0OlxuICAgICAgICB0aGlzLnBhcnNlRmxvYXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X3BvaW50X3ZhcmludF9hcnJheTpcbiAgICAgICAgdGhpcy5wYXJzZVBvaW50c0FycmF5KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF9jaXJjdWxhcl9hcmM6XG4gICAgICAgIHRoaXMucGFyc2VDaXJjdWxhckFyYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfY2lyY2xlOlxuICAgICAgICB0aGlzLnBhcnNlQ2lyY2xlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF9hcmM6XG4gICAgICAgIHRoaXMucGFyc2VBcmMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEYyZERhdGFUeXBlLmR0X2ludF9hcnJheTpcbiAgICAgICAgdGhpcy5wYXJzZUludEFycmF5KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF92YXJpbnRfYXJyYXk6XG4gICAgICAgIHRoaXMucGFyc2VWYXJpbnRBcnJheSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfYnl0ZV9hcnJheTpcbiAgICAgICAgdGhpcy5wYXJzZUJ5dGVBcnJheSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRjJkRGF0YVR5cGUuZHRfc3RyaW5nOlxuICAgICAgICB0aGlzLnBhcnNlU3RyaW5nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGMmREYXRhVHlwZS5kdF9kb3VibGVfYXJyYXk6XG4gICAgICAgIHRoaXMucGFyc2VEb3VibGVBcnJheSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICBsb2dnZXIuaW5mbyhcIkRhdGEgdHlwZSBub3Qgc3VwcG9ydGVkIHlldDogXCIgKyBkYXRhX3R5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZWFkSGVhZGVyKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9ICh0aGlzLnN0cmVhbSA9IG5ldyBJbnB1dFN0cmVhbSh0aGlzLmRhdGEpKTtcblxuICAgIC8vIFwiRjJEXCJcbiAgICBjb25zdCBoZWFkZXIgPSBzdHJlYW0uZ2V0U3RyaW5nKDMpO1xuXG4gICAgaWYgKGhlYWRlciAhPT0gXCJGMkRcIikge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBcIkludmFsaWQgRjJEIGhlYWRlciA6IFwiICsgaGVhZGVyLFxuICAgICAgICBlcnJvckNvZGVTdHJpbmcoRXJyb3JDb2Rlcy5CQURfREFUQSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyc2lvbk1ham9yID0gc3RyZWFtLmdldFN0cmluZygyKTtcbiAgICBpZiAodmVyc2lvbk1ham9yICE9PSBcIjAxXCIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgXCJPbmx5IHN1cHBvcnQgZjJkIG1ham9yIHZlcnNpb24gMTsgYWN0dWFsIHZlcnNpb24gaXMgOiBcIiArIHZlcnNpb25NYWpvcixcbiAgICAgICAgZXJyb3JDb2RlU3RyaW5nKEVycm9yQ29kZXMuQkFEX0RBVEEpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRvdCA9IHN0cmVhbS5nZXRTdHJpbmcoMSk7XG4gICAgaWYgKGRvdCAhPT0gXCIuXCIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIHZlcnNpb24gZGVsaW1pdGVyLlwiLFxuICAgICAgICBlcnJvckNvZGVTdHJpbmcoRXJyb3JDb2Rlcy5CQURfREFUQSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyc2lvbk1pbm9yID0gc3RyZWFtLmdldFN0cmluZygyKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb2JlKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAoc3RyZWFtLm9mZnNldCA8IHN0cmVhbS5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucGFyc2VEYXRhVHlwZSgpO1xuICAgICAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXhjKSB7XG4gICAgICAvLyBUeXBpY2FsbHkgY2F1c2VkIGJ5IG91dCBvZiBib3VuZHMgYWNjZXNzIG9mIGRhdGEuXG4gICAgICBjb25zdCBtZXNzYWdlID0gZXhjLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBzdGFjayA9IGV4Yy5zdGFjayA/IGV4Yy5zdGFjay50b1N0cmluZygpIDogXCIuLi5cIjtcblxuICAgICAgLy8gRG9uJ3QgcGFuaWMgd2l0aCB0aGlzIC0gd2UgYXJlIHN1cHBvc2VkIHRvIGhpdCBvdXQgb2YgYm91bmRzIGEgY291cGxlIG9mIHRpbWVzIHdoZW4gcHJvYmluZy5cbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgXCJFcnJvciBpbiBGMkRQcm9iZS5wcm90b3R5cGUucHJvYmUgOiBcIiArXG4gICAgICAgICAgbWVzc2FnZSArXG4gICAgICAgICAgXCIgd2l0aCBzdGFjayA6IFwiICtcbiAgICAgICAgICBzdGFja1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZSgpIHtcbiAgICAvLyBSZWFkIGFuZCBjaGVjayBoZWFkZXJcbiAgICBpZiAoIXRoaXMucmVhZEhlYWRlcigpKSByZXR1cm47XG4gICAgdGhpcy5wcm9iZSgpO1xuICB9XG5cbiAgcGFyc2VGcmFtZXMoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5zdHJlYW0gPSBuZXcgSW5wdXRTdHJlYW0odGhpcy5kYXRhKTtcbiAgICAgIHRoaXMucHJvYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0cmVhbSA9IG51bGw7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgfVxuXG4gIC8vID09PSBQYXJzZSBHZW9tZXRyeSA9PT0gLy9cblxuICBwYXJzZVBvaW50UG9zaXRpb25zKCkge1xuICAgIGxldCB4ID0gdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuICAgIGxldCB5ID0gdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuXG4gICAgeCA9IHJlc3RvcmVTaWduQml0RnJvbUxTQih4KTtcbiAgICB5ID0gcmVzdG9yZVNpZ25CaXRGcm9tTFNCKHkpO1xuXG4gICAgeCArPSB0aGlzLm9mZnNldFg7XG4gICAgeSArPSB0aGlzLm9mZnNldFk7XG5cbiAgICB0aGlzLm9mZnNldFggPSB4O1xuICAgIHRoaXMub2Zmc2V0WSA9IHk7XG5cbiAgICByZXR1cm4gW3RoaXMuc3goeCksIHRoaXMuc3koeSldO1xuICB9XG5cbiAgcGFyc2VPYmplY3QoKSB7XG4gICAgdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuICB9XG5cbiAgcGFyc2VTdHJpbmcoKSB7XG4gICAgY29uc3QgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHMuZ2V0VmFyaW50cygpOyAvL3NraXAgcGFzdCB0aGUgc2VtYW50aWNzXG5cbiAgICBjb25zdCBsZW4gPSBzLmdldFZhcmludHMoKTtcbiAgICByZXR1cm4gcy5nZXRTdHJpbmcobGVuKTtcbiAgfVxuXG4gIHBhcnNlUG9pbnQoKSB7XG4gICAgY29uc3QgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHMuZ2V0VmFyaW50cygpOyAvL3NraXAgcGFzdCB0aGUgc2VtYW50aWNzXG4gICAgdGhpcy5wYXJzZVBvaW50UG9zaXRpb25zKCk7XG4gIH1cblxuICBwYXJzZVBvaW50c0FycmF5KCkge1xuICAgIGNvbnN0IHMgPSB0aGlzLnN0cmVhbTtcbiAgICBjb25zdCBzZW1hID0gcy5nZXRWYXJpbnRzKCk7XG5cbiAgICBsZXQgY291bnQgPSBzLmdldFZhcmludHMoKTsgLy8gbnVtYmVyIG9mIGNvb3JkaW5hdGVzICogMlxuICAgIGlmICghY291bnQpIHJldHVybjtcbiAgICBjb3VudCA9IGNvdW50IC8gMjtcblxuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGxldCBwb3NpdGlvbjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgcG9zaXRpb24gPSB0aGlzLnBhcnNlUG9pbnRQb3NpdGlvbnMoKTtcbiAgICAgIHJldC5wdXNoKHBvc2l0aW9uWzBdKTtcbiAgICAgIHJldC5wdXNoKHBvc2l0aW9uWzFdKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHNlbWEpIHtcbiAgICAgIGNhc2UgRjJkU2VtYW50aWNUeXBlLnN0X3BvbHlsaW5lOlxuICAgICAgICB0aGlzLmFjdE9uUG9seWxpbmVQb2ludHNBcnJheShyZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9kb3Q6XG4gICAgICAgIHRoaXMuYWN0T25Eb3QocmV0WzBdLCByZXRbMV0pO1xuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsb2dnZXIuaW5mbyhcIlVuZXhwZWN0ZWQgb3Bjb2RlIHNlbWFudGljIHR5cGUgZm9yIHBvaW50cyBhcnJheS5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlQXJyYXkoZ2V0RnVuY3Rpb24pIHtcbiAgICBjb25zdCBzID0gdGhpcy5zdHJlYW07XG4gICAgcy5nZXRWYXJpbnRzKCk7XG4gICAgY29uc3QgY291bnQgPSBzLmdldFZhcmludHMoKTsgLy8gdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGludGVnZXIgYXJyYXkuXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGdldEZ1bmN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VJbnRBcnJheSgpIHtcbiAgICBjb25zdCBzID0gdGhpcy5zdHJlYW07XG4gICAgdGhpcy5wYXJzZUFycmF5KHMuZ2V0VWludDMyLmJpbmQocykpO1xuICB9XG5cbiAgcGFyc2VEb3VibGVBcnJheSgpIHtcbiAgICBjb25zdCBzID0gdGhpcy5zdHJlYW07XG4gICAgdGhpcy5wYXJzZUFycmF5KHMuZ2V0RmxvYXQ2NC5iaW5kKHMpKTtcbiAgfVxuXG4gIHBhcnNlQnl0ZUFycmF5KCkge1xuICAgIGNvbnN0IHMgPSB0aGlzLnN0cmVhbTtcbiAgICB0aGlzLnBhcnNlQXJyYXkocy5nZXRVaW50OC5iaW5kKHMpKTtcbiAgfVxuXG4gIHBhcnNlVmFyaW50QXJyYXkoKSB7XG4gICAgY29uc3QgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHRoaXMucGFyc2VBcnJheShzLmdldFZhcmludHMuYmluZChzKSk7XG4gIH1cblxuICBwYXJzZUludCgpIHtcbiAgICBjb25zdCBzZW1hID0gdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuc3RyZWFtLmdldFVpbnQzMigpO1xuICAgIHN3aXRjaCAoc2VtYSkge1xuICAgICAgY2FzZSBGMmRTZW1hbnRpY1R5cGUuc3RfZmlsbDpcbiAgICAgICAgdGhpcy5maWxsQ29sb3IgPSB2YWw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBwYXJzZUZsb2F0KCkge1xuICAgIHRoaXMuc3RyZWFtLmdldFZhcmludHMoKTtcbiAgICB0aGlzLnN0cmVhbS5nZXRGbG9hdDMyKCk7XG4gIH1cblxuICBwYXJzZVZvaWQoKSB7XG4gICAgdmFyIHNlbWEgPSB0aGlzLnN0cmVhbS5nZXRWYXJpbnRzKCk7XG4gICAgc3dpdGNoIChzZW1hKSB7XG4gICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9maWxsX29mZjpcbiAgICAgICAgdGhpcy5maWxsQ29sb3IgPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwYXJzZVZhcmludCgpIHtcbiAgICBjb25zdCBzID0gdGhpcy5zdHJlYW07XG4gICAgY29uc3Qgc2VtYW50aWNfdHlwZSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIGNvbnN0IHZhbCA9IHMuZ2V0VmFyaW50cygpO1xuXG4gICAgc3dpdGNoIChzZW1hbnRpY190eXBlKSB7XG4gICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9vYmplY3RfaWQ6XG4gICAgICBjYXNlIEYyZFNlbWFudGljVHlwZS5zdF9tYXJrdXBfaWQ6XG4gICAgICAgIHRoaXMuZGJJZCA9IHZhbDtcbiAgICAgICAgdGhpcy5tYXhEYklkID0gTWF0aC5tYXgodGhpcy5tYXhEYklkLCB2YWwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlQ2lyY3VsYXJBcmMoKSB7XG4gICAgY29uc3QgcyA9IHRoaXMuc3RyZWFtO1xuICAgIGNvbnN0IHNlbWEgPSBzLmdldFZhcmludHMoKTtcbiAgICBpZiAodGhpcy5wYXJzZXJBc3NlcnQoc2VtYSwgRjJkU2VtYW50aWNUeXBlLnN0X2FyYywgXCJwYXJzZUNpcmN1bGFyQXJjXCIpKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLnBhcnNlUG9pbnRQb3NpdGlvbnMoKTtcbiAgICBjb25zdCBtYWpvciA9IHMuZ2V0VmFyaW50cygpO1xuICAgIGNvbnN0IHN0YXJ0ID0gcy5nZXRGbG9hdDMyKCk7XG4gICAgY29uc3QgZW5kID0gcy5nZXRGbG9hdDMyKCk7XG5cbiAgICB0aGlzLmFjdE9uQ2lyY3VsYXJBcmMocG9pbnRbMF0sIHBvaW50WzFdLCBzdGFydCwgZW5kLCB0aGlzLnN4KG1ham9yKSk7XG4gIH1cblxuICBwYXJzZUNpcmNsZSgpIHtcbiAgICBjb25zdCBzID0gdGhpcy5zdHJlYW07XG4gICAgY29uc3Qgc2VtYSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIGlmICh0aGlzLnBhcnNlckFzc2VydChzZW1hLCBGMmRTZW1hbnRpY1R5cGUuc3RfYXJjLCBcInBhcnNlQ2lyY2xlXCIpKSByZXR1cm47XG5cbiAgICBjb25zdCBwb2ludCA9IHRoaXMucGFyc2VQb2ludFBvc2l0aW9ucygpO1xuICAgIGNvbnN0IG1ham9yID0gcy5nZXRWYXJpbnRzKCk7XG5cbiAgICB0aGlzLmFjdE9uQ29tcGxldGVDaXJjbGUocG9pbnRbMF0sIHBvaW50WzFdLCB0aGlzLnN4KG1ham9yKSk7XG4gIH1cblxuICBwYXJzZUFyYygpIHtcbiAgICBjb25zdCBzID0gdGhpcy5zdHJlYW07XG4gICAgY29uc3Qgc2VtYSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIGlmICh0aGlzLnBhcnNlckFzc2VydChzZW1hLCBGMmRTZW1hbnRpY1R5cGUuc3RfYXJjLCBcInBhcnNlQXJjXCIpKSByZXR1cm47XG5cbiAgICAvLyBSZWxhdGl2ZSBwb3NpdGlvbnMuXG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLnBhcnNlUG9pbnRQb3NpdGlvbnMoKTtcblxuICAgIGNvbnN0IG1ham9yID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgY29uc3QgbWlub3IgPSBzLmdldFZhcmludHMoKTtcblxuICAgIGNvbnN0IHJvdGF0aW9uID0gcy5nZXRGbG9hdDMyKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBzLmdldEZsb2F0MzIoKTtcbiAgICBjb25zdCBlbmQgPSBzLmdldEZsb2F0MzIoKTtcblxuICAgIHRoaXMuYWN0T25BcmMoXG4gICAgICBwb2ludFswXSxcbiAgICAgIHBvaW50WzFdLFxuICAgICAgc3RhcnQsXG4gICAgICBlbmQsXG4gICAgICB0aGlzLnN4KG1ham9yKSxcbiAgICAgIHRoaXMuc3kobWlub3IpLFxuICAgICAgcm90YXRpb25cbiAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT0gU2VtYW50aWMgQW5hbHlzaXMgUGFzcyA9PT09PT09PT09PT09PT09PT09PT09Ly9cbiAgYWN0T25Qb2x5bGluZVBvaW50c0FycmF5KHBvaW50cykge1xuICAgIHRoaXMuZ2VvbWV0cnkuYWRkUG9seUxpbmUocG9pbnRzLCB0aGlzLmZpbGxDb2xvciwgdGhpcy5kYklkKTtcbiAgfVxuXG4gIGFjdE9uRG90KHgsIHkpIHtcbiAgICB0aGlzLmFjdE9uQ29tcGxldGVDaXJjbGUoeCwgeSwgdGhpcy5zeCgxKSk7XG4gIH1cblxuICBhY3RPbkNvbXBsZXRlQ2lyY2xlKGN4LCBjeSwgcmFkaXVzKSB7XG4gICAgLy8gUmVsYXRpdmUgcG9zaXRpb25zLlxuICAgIHRoaXMuZ2VvbWV0cnkuYWRkQ2lyY3VsYXJBcmMoXG4gICAgICBjeCxcbiAgICAgIGN5LFxuICAgICAgLyptYWpvciovIHJhZGl1cyxcbiAgICAgIDAsXG4gICAgICAyICogTWF0aC5QSSxcbiAgICAgIHRoaXMuZGJJZFxuICAgICk7XG4gIH1cblxuICBhY3RPbkNpcmN1bGFyQXJjKGN4LCBjeSwgc3RhcnQsIGVuZCwgcmFkaXVzKSB7XG4gICAgdGhpcy5nZW9tZXRyeS5hZGRDaXJjdWxhckFyYyhcbiAgICAgIGN4LFxuICAgICAgY3ksXG4gICAgICAvKm1ham9yKi8gcmFkaXVzLFxuICAgICAgc3RhcnQsXG4gICAgICBlbmQsXG4gICAgICB0aGlzLmRiSWRcbiAgICApO1xuICB9XG5cbiAgYWN0T25BcmMoY3gsIGN5LCBzdGFydCwgZW5kLCBtYWpvciwgbWlub3IpIHtcbiAgICB0aGlzLmdlb21ldHJ5LmFkZEVsbGlwdGljYWxBcmMoY3gsIGN5LCBzdGFydCwgZW5kLCBtYWpvciwgbWlub3IsIHRoaXMuZGJJZCk7XG4gIH1cblxuICBhY3RPblBvbHlUcmlhbmdsZSgpIHtcbiAgICBsb2dnZXIud2FybihcIlBvbHl0cmlhbmdsZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuXCIpO1xuICAgIHJldHVybjtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkdlb21ldHJ5QnVpbGRlciIsIklucHV0U3RyZWFtIiwibG9nZ2VyIiwiZXJyb3JDb2RlU3RyaW5nIiwiRXJyb3JDb2RlcyIsIkYyZERhdGFUeXBlIiwiRjJkU2VtYW50aWNUeXBlIiwicmVzdG9yZVNpZ25CaXRGcm9tTFNCIiwiRjJER2VvbWV0cnkiLCJjb25zdHJ1Y3RvciIsIm1ldGFkYXRhIiwib3B0aW9ucyIsInNjYWxlWCIsInNjYWxlWSIsImJib3giLCJtaW4iLCJ4IiwieSIsInoiLCJtYXgiLCJmaWxsQ29sb3IiLCJkaW1lbnNpb25zIiwicGFnZV9kaW1lbnNpb25zIiwic2V0U2NhbGUiLCJleGNsdWRlVGV4dEdlb21ldHJ5IiwiZGJJZCIsIm1heERiSWQiLCJnZW9tZXRyeSIsImVycm9yIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJkaW1zIiwicGFwZXJXaWR0aCIsInBhZ2Vfd2lkdGgiLCJwYXBlckhlaWdodCIsInBhZ2VfaGVpZ2h0IiwicGxvdF93aWR0aCIsInBsb3RfaGVpZ2h0IiwibG9hZCIsImxvYWRDb250ZXh0IiwiZnlkb1BhY2siLCJVaW50OEFycmF5IiwiZGF0YSIsInBhcnNlIiwibG9hZERvbmVDQiIsImxvYWRGcmFtZXMiLCJmaW5hbEZyYW1lIiwicHJvYmVGcmFtZXMiLCJzeCIsInN5IiwicGFyc2VyQXNzZXJ0IiwiYWN0dWFsVHlwZSIsImV4cGVjdGVkVHlwZSIsImZ1bmN0aW9uTmFtZSIsIndhcm4iLCJwYXJzZURhdGFUeXBlIiwiZGF0YV90eXBlIiwic3RyZWFtIiwiZ2V0VmFyaW50cyIsImR0X3ZvaWQiLCJwYXJzZVZvaWQiLCJkdF9pbnQiLCJwYXJzZUludCIsImR0X29iamVjdCIsInBhcnNlT2JqZWN0IiwiZHRfdmFyaW50IiwicGFyc2VWYXJpbnQiLCJkdF9wb2ludF92YXJpbnQiLCJwYXJzZVBvaW50IiwiZHRfZmxvYXQiLCJwYXJzZUZsb2F0IiwiZHRfcG9pbnRfdmFyaW50X2FycmF5IiwicGFyc2VQb2ludHNBcnJheSIsImR0X2NpcmN1bGFyX2FyYyIsInBhcnNlQ2lyY3VsYXJBcmMiLCJkdF9jaXJjbGUiLCJwYXJzZUNpcmNsZSIsImR0X2FyYyIsInBhcnNlQXJjIiwiZHRfaW50X2FycmF5IiwicGFyc2VJbnRBcnJheSIsImR0X3ZhcmludF9hcnJheSIsInBhcnNlVmFyaW50QXJyYXkiLCJkdF9ieXRlX2FycmF5IiwicGFyc2VCeXRlQXJyYXkiLCJkdF9zdHJpbmciLCJwYXJzZVN0cmluZyIsImR0X2RvdWJsZV9hcnJheSIsInBhcnNlRG91YmxlQXJyYXkiLCJpbmZvIiwicmVhZEhlYWRlciIsImhlYWRlciIsImdldFN0cmluZyIsIkJBRF9EQVRBIiwidmVyc2lvbk1ham9yIiwiZG90IiwidmVyc2lvbk1pbm9yIiwicHJvYmUiLCJvZmZzZXQiLCJieXRlTGVuZ3RoIiwiZXhjIiwibWVzc2FnZSIsInRvU3RyaW5nIiwic3RhY2siLCJwYXJzZUZyYW1lcyIsInBhcnNlUG9pbnRQb3NpdGlvbnMiLCJzIiwibGVuIiwic2VtYSIsImNvdW50IiwicmV0IiwicG9zaXRpb24iLCJpIiwicHVzaCIsInN0X3BvbHlsaW5lIiwiYWN0T25Qb2x5bGluZVBvaW50c0FycmF5Iiwic3RfZG90IiwiYWN0T25Eb3QiLCJwYXJzZUFycmF5IiwiZ2V0RnVuY3Rpb24iLCJnZXRVaW50MzIiLCJiaW5kIiwiZ2V0RmxvYXQ2NCIsImdldFVpbnQ4IiwidmFsIiwic3RfZmlsbCIsImdldEZsb2F0MzIiLCJzdF9maWxsX29mZiIsInNlbWFudGljX3R5cGUiLCJzdF9vYmplY3RfaWQiLCJzdF9tYXJrdXBfaWQiLCJNYXRoIiwic3RfYXJjIiwicG9pbnQiLCJtYWpvciIsInN0YXJ0IiwiZW5kIiwiYWN0T25DaXJjdWxhckFyYyIsImFjdE9uQ29tcGxldGVDaXJjbGUiLCJtaW5vciIsInJvdGF0aW9uIiwiYWN0T25BcmMiLCJwb2ludHMiLCJhZGRQb2x5TGluZSIsImN4IiwiY3kiLCJyYWRpdXMiLCJhZGRDaXJjdWxhckFyYyIsIlBJIiwiYWRkRWxsaXB0aWNhbEFyYyIsImFjdE9uUG9seVRyaWFuZ2xlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/f2d/F2dGeometry.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/f2d/F2dProbe.js ": /*!************************************************!*\ !*** ./src/file-loaders/lmvtk/f2d/F2dProbe.js ***! \************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ F2DProbe: ()=> (/* binding */ F2DProbe)\n/* harmony export */ });\n/* harmony import */ var _CheckedInputStream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CheckedInputStream */ \"./src/file-loaders/lmvtk/f2d/CheckedInputStream.js\");\n/* harmony import */ var _F2d__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./F2d */ \"./src/file-loaders/lmvtk/f2d/F2d.js\");\n/* harmony import */ var _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../net/ErrorCodes */ \"./src/file-loaders/net/ErrorCodes.js\");\n/* harmony import */ var _logger_Logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../logger/Logger */ \"./src/logger/Logger.js\");\n\n\n\n\n\n\n\n\nfunction F2DProbe() {\n this.data = null;\n this.frameStart = 0;\n this.frameEnd = 0;\n this.stream = null;\n this.opCount = 0;\n this.marker = { frameStart: this.frameStart,\n frameEnd: this.frameEnd };\n}\n\nF2DProbe.prototype.load = function (data) {\n this.data = data;\n this.frameStart = 0;\n\n if (!this.stream) {\n this.stream = new _CheckedInputStream__WEBPACK_IMPORTED_MODULE_0__.CheckedInputStream(this.data);\n // Skip headers.\n this.stream.seek(8);\n this.frameStart = 8;\n this.frameEnd = 8;\n } else\n {\n this.stream.reset(this.data);\n this.stream.seek(0);\n this.frameEnd = 0;\n }\n\n this.probe();\n this.marker.frameStart = this.frameStart;\n this.marker.frameEnd = this.frameEnd;\n return this.marker;\n};\n\nvar F2dProbeDataType = _F2d__WEBPACK_IMPORTED_MODULE_1__.F2dDataType;\nvar F2dProbeSemanticType = _F2d__WEBPACK_IMPORTED_MODULE_1__.F2dSemanticType;\n\nF2DProbe.prototype.readColor = function () {\n var s = this.stream;\n s.getVarints(); // data type : dt_int 3\n s.getVarints(); // semantic type : st_object_member 0\n s.skipUint32(); // color\n};\n\nF2DProbe.prototype.parsePointPositions = function () {\n this.stream.getVarints();\n this.stream.getVarints();\n};\n\nF2DProbe.prototype.unhandledTypeWarning = function (inFunction, semanticType) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_3__.logger.warn(\"Unhandled semantic type when probing F2d : \" + semanticType + \" in function \" + inFunction);\n};\n\nF2DProbe.prototype.parseObject = function () {\n /*var semantic_type =*/this.stream.getVarints();\n //debug(\"object parsing : type\" + semantic_type);\n};\n\n\nF2DProbe.prototype.parseString = function () {\n var s = this.stream;\n s.getVarints();\n var len = s.getVarints();\n s.skipBytes(len);\n};\n\nF2DProbe.prototype.parsePoint = function () {\n this.stream.getVarints();\n this.parsePointPositions();\n};\n\nF2DProbe.prototype.parseVarintArray = function () {\n var s = this.stream;\n s.getVarints();\n\n var count = s.getVarints();\n for (var i = 0; i < count; ++i)\n s.getVarints();\n};\n\nF2DProbe.prototype.parseByteArray=f unction () {\n var s=t his.stream;\n s.getVarints();\n var count=s .getVarints();\n s.skipBytes(count);\n};\n\nF2DProbe.prototype.parseEndOfObject=f unction () {\n var s=t his.stream;\n s.getVarints();\n s.getVarints();\n};\n\nF2DProbe.prototype.parsePointsArray=f unction (context) {\n var s=t his.stream;\n var sema=s .getVarints();\n var count=s .getVarints(); // number of coordinates * 2\n if (!count) return;\n count=c ount / 2;\n for (var i=0 ; i < count; ++i)\n this.parsePointPositions();\n};\n\nF2DProbe.prototype.parsePoint=f unction (context) {\n var s=t his.stream;\n var sema=s .getVarints();\n this.parsePointPositions();\n};\n\nF2DProbe.prototype.parseInt=f unction () {\n var s=t his.stream;\n var sema=s .getVarints();\n\n switch (sema) {\n case F2dProbeSemanticType.st_color:\n s.skipUint32();\n break;\n case F2dProbeSemanticType.st_fill:{\n s.skipUint32();\n break;\n }\n default:\n s.skipUint32();\n this.unhandledTypeWarning( 'parseInt', sema);\n break;\n }\n};\n\nF2DProbe.prototype.parseVoid=f unction () {\n var sema=t his.stream.getVarints();\n switch (sema) {\n case F2dProbeSemanticType.st_fill_off:\n break;\n default:\n this.unhandledTypeWarning( 'parseVoid', sema);\n break;\n }\n};\n\nF2DProbe.prototype.parseVarint=f unction () {\n this.stream.getVarints();\n this.stream.getVarints();\n};\n\nF2DProbe.prototype.parseIntArray=f unction () {\n var s=t his.stream;\n s.getVarints();\n var count=s .getVarints();\n for (var i=0 ; i < count; ++i)\n s.skipUint32();\n};\n\nF2DProbe.prototype.parseFloat=f unction () {\n var s=t his.stream;\n s.getVarints();\n s.getFloat32();\n};\n\nF2DProbe.prototype.parseDoubleArray=f unction () {\n var s=t his.stream;\n s.getVarints();\n var count=s .getVarints();\n for (var i=0 ; i < count; ++i)\n s.skipFloat64();\n};\n\nF2DProbe.prototype.parseCircularArc=f unction () {\n var s=t his.stream;\n s.getVarints();\n this.parsePointPositions();\n s.getVarints();\n s.getFloat32();\n s.getFloat32();\n};\n\nF2DProbe.prototype.parseCircle=f unction () {\n var s=t his.stream;\n s.getVarints();\n this.parsePointPositions();\n s.getVarints();\n};\n\nF2DProbe.prototype.parseArc=f unction () {\n var s=t his.stream;\n s.getVarints();\n this.parsePointPositions();\n s.getVarints();\n s.getVarints();\n s.getFloat32();\n s.getFloat32();\n s.getFloat32();\n};\n\nF2DProbe.prototype.parseDataType=f unction () {\n var data_type=t his.stream.getVarints();\n\n switch (data_type) {\n case F2dProbeDataType.dt_void:\n this.parseVoid();\n break;\n case F2dProbeDataType.dt_int:\n this.parseInt();\n break;\n case F2dProbeDataType.dt_object:\n this.parseObject();\n break;\n case F2dProbeDataType.dt_varint:\n this.parseVarint();\n break;\n case F2dProbeDataType.dt_float:\n this.parseFloat();\n break;\n case F2dProbeDataType.dt_point_varint:\n this.parsePoint();\n break;\n case F2dProbeDataType.dt_point_varint_array:\n this.parsePointsArray();\n break;\n case F2dProbeDataType.dt_circular_arc:\n this.parseCircularArc();\n break;\n case F2dProbeDataType.dt_circle:\n this.parseCircle();\n break;\n case F2dProbeDataType.dt_arc:\n this.parseArc();\n break;\n case F2dProbeDataType.dt_varint_array:\n this.parseVarintArray();\n break;\n case F2dProbeDataType.dt_int_array:\n this.parseIntArray();\n break;\n case F2dProbeDataType.dt_byte_array:\n this.parseByteArray();\n break;\n case F2dProbeDataType.dt_string:\n this.parseString();\n break;\n case F2dProbeDataType.dt_double_array:\n this.parseDoubleArray();\n break;\n default:\n this.error=t rue;\n _logger_Logger__WEBPACK_IMPORTED_MODULE_3__.logger.error(\ "Bad op code encountered : \" + data_type + \ " , bail out.\", (0,_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__.errorCodeString)(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__.ErrorCodes.BAD_DATA));\n break;\n }\n\n if (!this.error)\n this.frameEnd=t his.stream.offset;\n};\n\nF2DProbe.prototype.probe=f unction () {\n var stream=t his.stream;\n var error=f alse;\n\n try {\n while (stream.offset < stream.byteLength) {\n this.parseDataType();\n if (this.error) {\n break;\n }\n this.opCount++;\n }\n } catch (exc) {\n // Typically caused by out of bounds access of data.\n var message=e xc.toString();\n var stack=e xc.stack ? exc.stack.toString() : \ "...\";\n\n // Don 't panic with this - we are supposed to hit out of bounds a couple of times when probing.\n //debug(\"Error in F2DProbe.prototype.probe : \" + message + \" with stack : \" + stack);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2YyZC9GMmRQcm9iZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDYTs7QUFFNEM7QUFDSjtBQUNjO0FBQ3BCOztBQUV4QyxTQUFTTSxRQUFRQSxDQUFBLEVBQUc7RUFDdkIsSUFBSSxDQUFDQyxJQUFJLEdBQUcsSUFBSTtFQUNoQixJQUFJLENBQUNDLFVBQVUsR0FBRyxDQUFDO0VBQ25CLElBQUksQ0FBQ0MsUUFBUSxHQUFHLENBQUM7RUFDakIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsSUFBSTtFQUNsQixJQUFJLENBQUNDLE9BQU8sR0FBRyxDQUFDO0VBQ2hCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLEVBQUNKLFVBQVUsRUFBRyxJQUFJLENBQUNBLFVBQVU7SUFDNUJDLFFBQVEsRUFBRyxJQUFJLENBQUNBLFFBQVEsRUFBQztBQUM1Qzs7QUFFQUgsUUFBUSxDQUFDTyxTQUFTLENBQUNDLElBQUksR0FBRyxVQUFTUCxJQUFJLEVBQUU7RUFDckMsSUFBSSxDQUFDQSxJQUFJLEdBQUdBLElBQUk7RUFDaEIsSUFBSSxDQUFDQyxVQUFVLEdBQUcsQ0FBQzs7RUFFbkIsSUFBSSxDQUFDLElBQUksQ0FBQ0UsTUFBTSxFQUFFO0lBQ2QsSUFBSSxDQUFDQSxNQUFNLEdBQUcsSUFBSVYsbUVBQWtCLENBQUMsSUFBSSxDQUFDTyxJQUFJLENBQUM7SUFDL0M7SUFDQSxJQUFJLENBQUNHLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLENBQUNQLFVBQVUsR0FBRyxDQUFDO0lBQ25CLElBQUksQ0FBQ0MsUUFBUSxHQUFHLENBQUM7RUFDckIsQ0FBQztFQUNJO0lBQ0QsSUFBSSxDQUFDQyxNQUFNLENBQUNNLEtBQUssQ0FBQyxJQUFJLENBQUNULElBQUksQ0FBQztJQUM1QixJQUFJLENBQUNHLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLENBQUNOLFFBQVEsR0FBRyxDQUFDO0VB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S0FBSzs7RUFFakIsSUFBSTtJQUNBLE9BQU8vRCxNQUFNLENBQUNpRSxNQUFNLEdBQUdqRSxNQUFNLENBQUNrRSxVQUFVLEVBQUU7TUFDdEMsSUFBSSxDQUFDcEIsYUFBYSxDQUFDLENBQUM7TUFDcEIsSUFBSSxJQUFJLENBQUNpQixLQUFLLEVBQUU7UUFDWjtNQUNKO01BQ0EsSUFBSSxDQUFDOUQsT0FBTyxFQUFFO0lBQ2xCO0VBQ0osQ0FBQyxDQUFDLE9BQU9rRSxHQUFHLEVBQUU7SUFDVjtJQUNBLElBQUlDLE9BQU8sR0FBR0QsR0FBRyxDQUFDRSxRQUFRLENBQUMsQ0FBQztJQUM1QixJQUFJQyxLQUFLLEdBQUdILEdBQUcsQ0FBQ0csS0FBSyxHQUFHSCxHQUFHLENBQUNHLEtBQUssQ0FBQ0QsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLOztJQUVwRDtJQUNBO0VBQ0o7QUFDSixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9mMmQvRjJkUHJvYmUuanM/YWFmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcblwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDaGVja2VkSW5wdXRTdHJlYW19IGZyb20gXCIuL0NoZWNrZWRJbnB1dFN0cmVhbVwiO1xuaW1wb3J0IHsgRjJkRGF0YVR5cGUsIEYyZFNlbWFudGljVHlwZSB9IGZyb20gXCIuL0YyZFwiO1xuaW1wb3J0IHsgZXJyb3JDb2RlU3RyaW5nLCBFcnJvckNvZGVzIH0gZnJvbSBcIi4uLy4uL25ldC9FcnJvckNvZGVzXCI7XG5pbXBvcnQgeyBsb2dnZXJ9IGZyb20gXCIuLi8uLi8uLi9sb2dnZXIvTG9nZ2VyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBGMkRQcm9iZSgpIHtcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIHRoaXMuZnJhbWVTdGFydCA9IDA7XG4gICAgdGhpcy5mcmFtZUVuZCA9IDA7XG4gICAgdGhpcy5zdHJlYW0gPSBudWxsO1xuICAgIHRoaXMub3BDb3VudCA9IDA7XG4gICAgdGhpcy5tYXJrZXIgPSB7ZnJhbWVTdGFydCA6IHRoaXMuZnJhbWVTdGFydCxcbiAgICAgICAgICAgICAgICAgICBmcmFtZUVuZCA6IHRoaXMuZnJhbWVFbmR9O1xufVxuXG5GMkRQcm9iZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuZnJhbWVTdGFydCA9IDA7XG5cbiAgICBpZiAoIXRoaXMuc3RyZWFtKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtID0gbmV3IENoZWNrZWRJbnB1dFN0cmVhbSh0aGlzLmRhdGEpO1xuICAgICAgICAvLyBTa2lwIGhlYWRlcnMuXG4gICAgICAgIHRoaXMuc3RyZWFtLnNlZWsoOCk7XG4gICAgICAgIHRoaXMuZnJhbWVTdGFydCA9IDg7XG4gICAgICAgIHRoaXMuZnJhbWVFbmQgPSA4O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ucmVzZXQodGhpcy5kYXRhKTtcbiAgICAgICAgdGhpcy5zdHJlYW0uc2VlaygwKTtcbiAgICAgICAgdGhpcy5mcmFtZUVuZCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9iZSgpO1xuICAgIHRoaXMubWFya2VyLmZyYW1lU3RhcnQgPSB0aGlzLmZyYW1lU3RhcnQ7XG4gICAgdGhpcy5tYXJrZXIuZnJhbWVFbmQgPSB0aGlzLmZyYW1lRW5kO1xuICAgIHJldHVybiB0aGlzLm1hcmtlcjtcbn07XG5cbnZhciBGMmRQcm9iZURhdGFUeXBlID0gRjJkRGF0YVR5cGU7XG52YXIgRjJkUHJvYmVTZW1hbnRpY1R5cGUgPSBGMmRTZW1hbnRpY1R5cGU7XG5cbkYyRFByb2JlLnByb3RvdHlwZS5yZWFkQ29sb3IgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHMuZ2V0VmFyaW50cygpOy8vIGRhdGEgdHlwZSA6IGR0X2ludCAzXG4gICAgcy5nZXRWYXJpbnRzKCk7IC8vIHNlbWFudGljIHR5cGUgOiBzdF9vYmplY3RfbWVtYmVyIDBcbiAgICBzLnNraXBVaW50MzIoKTsgLy8gY29sb3Jcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZVBvaW50UG9zaXRpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuICAgIHRoaXMuc3RyZWFtLmdldFZhcmludHMoKTtcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS51bmhhbmRsZWRUeXBlV2FybmluZyA9IGZ1bmN0aW9uKGluRnVuY3Rpb24sIHNlbWFudGljVHlwZSkge1xuICAgIGxvZ2dlci53YXJuKFwiVW5oYW5kbGVkIHNlbWFudGljIHR5cGUgd2hlbiBwcm9iaW5nIEYyZCA6IFwiICsgc2VtYW50aWNUeXBlICsgXCIgaW4gZnVuY3Rpb24gXCIgKyBpbkZ1bmN0aW9uKTtcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgIC8qdmFyIHNlbWFudGljX3R5cGUgPSovIHRoaXMuc3RyZWFtLmdldFZhcmludHMoKTtcbiAgICAvL2RlYnVnKFwib2JqZWN0IHBhcnNpbmcgOiB0eXBlXCIgKyBzZW1hbnRpY190eXBlKTtcbn07XG5cblxuRjJEUHJvYmUucHJvdG90eXBlLnBhcnNlU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICBzLmdldFZhcmludHMoKTtcbiAgICB2YXIgbGVuID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgcy5za2lwQnl0ZXMobGVuKTtcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZVBvaW50ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuICAgIHRoaXMucGFyc2VQb2ludFBvc2l0aW9ucygpO1xufTtcblxuRjJEUHJvYmUucHJvdG90eXBlLnBhcnNlVmFyaW50QXJyYXkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHMuZ2V0VmFyaW50cygpO1xuXG4gICAgdmFyIGNvdW50ID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKVxuICAgICAgICBzLmdldFZhcmludHMoKTtcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZUJ5dGVBcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzID0gdGhpcy5zdHJlYW07XG4gICAgcy5nZXRWYXJpbnRzKCk7XG4gICAgdmFyIGNvdW50ID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgcy5za2lwQnl0ZXMoY291bnQpO1xufTtcblxuRjJEUHJvYmUucHJvdG90eXBlLnBhcnNlRW5kT2ZPYmplY3QgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHMuZ2V0VmFyaW50cygpO1xuICAgIHMuZ2V0VmFyaW50cygpO1xufTtcblxuRjJEUHJvYmUucHJvdG90eXBlLnBhcnNlUG9pbnRzQXJyYXkgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICB2YXIgc2VtYSA9IHMuZ2V0VmFyaW50cygpO1xuICAgIHZhciBjb3VudCA9IHMuZ2V0VmFyaW50cygpOyAvLyBudW1iZXIgb2YgY29vcmRpbmF0ZXMgKiAyXG4gICAgaWYgKCFjb3VudCkgcmV0dXJuO1xuICAgIGNvdW50ID0gY291bnQgLyAyO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSlcbiAgICAgICAgdGhpcy5wYXJzZVBvaW50UG9zaXRpb25zKCk7XG59O1xuXG5GMkRQcm9iZS5wcm90b3R5cGUucGFyc2VQb2ludCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHZhciBzZW1hID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgdGhpcy5wYXJzZVBvaW50UG9zaXRpb25zKCk7XG59O1xuXG5GMkRQcm9iZS5wcm90b3R5cGUucGFyc2VJbnQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHZhciBzZW1hID0gcy5nZXRWYXJpbnRzKCk7XG5cbiAgICBzd2l0Y2ggKHNlbWEpIHtcbiAgICAgICAgY2FzZSBGMmRQcm9iZVNlbWFudGljVHlwZS5zdF9jb2xvcjpcbiAgICAgICAgICAgIHMuc2tpcFVpbnQzMigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkUHJvYmVTZW1hbnRpY1R5cGUuc3RfZmlsbDoge1xuICAgICAgICAgICAgcy5za2lwVWludDMyKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcy5za2lwVWludDMyKCk7XG4gICAgICAgICAgICB0aGlzLnVuaGFuZGxlZFR5cGVXYXJuaW5nKCdwYXJzZUludCcsIHNlbWEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufTtcblxuRjJEUHJvYmUucHJvdG90eXBlLnBhcnNlVm9pZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzZW1hID0gdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuICAgIHN3aXRjaCAoc2VtYSkge1xuICAgICAgICBjYXNlIEYyZFByb2JlU2VtYW50aWNUeXBlLnN0X2ZpbGxfb2ZmOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLnVuaGFuZGxlZFR5cGVXYXJuaW5nKCdwYXJzZVZvaWQnLCBzZW1hKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZVZhcmludCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3RyZWFtLmdldFZhcmludHMoKTtcbiAgICB0aGlzLnN0cmVhbS5nZXRWYXJpbnRzKCk7XG59O1xuXG5GMkRQcm9iZS5wcm90b3R5cGUucGFyc2VJbnRBcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzID0gdGhpcy5zdHJlYW07XG4gICAgcy5nZXRWYXJpbnRzKCk7XG4gICAgdmFyIGNvdW50ID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKVxuICAgICAgICBzLnNraXBVaW50MzIoKTtcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZUZsb2F0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICBzLmdldFZhcmludHMoKTtcbiAgICBzLmdldEZsb2F0MzIoKTtcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZURvdWJsZUFycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICBzLmdldFZhcmludHMoKTtcbiAgICB2YXIgY291bnQgPSBzLmdldFZhcmludHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpXG4gICAgICAgIHMuc2tpcEZsb2F0NjQoKTtcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZUNpcmN1bGFyQXJjID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSB0aGlzLnN0cmVhbTtcbiAgICBzLmdldFZhcmludHMoKTtcbiAgICB0aGlzLnBhcnNlUG9pbnRQb3NpdGlvbnMoKTtcbiAgICBzLmdldFZhcmludHMoKTtcbiAgICBzLmdldEZsb2F0MzIoKTtcbiAgICBzLmdldEZsb2F0MzIoKTtcbn07XG5cbkYyRFByb2JlLnByb3RvdHlwZS5wYXJzZUNpcmNsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzID0gdGhpcy5zdHJlYW07XG4gICAgcy5nZXRWYXJpbnRzKCk7XG4gICAgdGhpcy5wYXJzZVBvaW50UG9zaXRpb25zKCk7XG4gICAgcy5nZXRWYXJpbnRzKCk7XG59O1xuXG5GMkRQcm9iZS5wcm90b3R5cGUucGFyc2VBcmMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IHRoaXMuc3RyZWFtO1xuICAgIHMuZ2V0VmFyaW50cygpO1xuICAgIHRoaXMucGFyc2VQb2ludFBvc2l0aW9ucygpO1xuICAgIHMuZ2V0VmFyaW50cygpO1xuICAgIHMuZ2V0VmFyaW50cygpO1xuICAgIHMuZ2V0RmxvYXQzMigpO1xuICAgIHMuZ2V0RmxvYXQzMigpO1xuICAgIHMuZ2V0RmxvYXQzMigpO1xufTtcblxuRjJEUHJvYmUucHJvdG90eXBlLnBhcnNlRGF0YVR5cGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YV90eXBlID0gdGhpcy5zdHJlYW0uZ2V0VmFyaW50cygpO1xuXG4gICAgc3dpdGNoIChkYXRhX3R5cGUpIHtcbiAgICAgICAgY2FzZSBGMmRQcm9iZURhdGFUeXBlLmR0X3ZvaWQ6XG4gICAgICAgICAgICB0aGlzLnBhcnNlVm9pZCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkUHJvYmVEYXRhVHlwZS5kdF9pbnQgOlxuICAgICAgICAgICAgdGhpcy5wYXJzZUludCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkUHJvYmVEYXRhVHlwZS5kdF9vYmplY3QgOlxuICAgICAgICAgICAgdGhpcy5wYXJzZU9iamVjdCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkUHJvYmVEYXRhVHlwZS5kdF92YXJpbnQgOlxuICAgICAgICAgICAgdGhpcy5wYXJzZVZhcmludCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkUHJvYmVEYXRhVHlwZS5kdF9mbG9hdCA6XG4gICAgICAgICAgICB0aGlzLnBhcnNlRmxvYXQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFByb2JlRGF0YVR5cGUuZHRfcG9pbnRfdmFyaW50IDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VQb2ludCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkUHJvYmVEYXRhVHlwZS5kdF9wb2ludF92YXJpbnRfYXJyYXkgOlxuICAgICAgICAgICAgdGhpcy5wYXJzZVBvaW50c0FycmF5KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGMmRQcm9iZURhdGFUeXBlLmR0X2NpcmN1bGFyX2FyYyA6XG4gICAgICAgICAgICB0aGlzLnBhcnNlQ2lyY3VsYXJBcmMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFByb2JlRGF0YVR5cGUuZHRfY2lyY2xlIDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VDaXJjbGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFByb2JlRGF0YVR5cGUuZHRfYXJjIDpcbiAgICAgICAgICAgIHRoaXMucGFyc2VBcmMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEYyZFByb2JlRGF0YVR5cGUuZHRfdmFyaW50X2FycmF5OlxuICAgICAgICAgICAgdGhpcy5wYXJzZVZhcmludEFycmF5KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGMmRQcm9iZURhdGFUeXBlLmR0X2ludF9hcnJheTpcbiAgICAgICAgICAgIHRoaXMucGFyc2VJbnRBcnJheSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkUHJvYmVEYXRhVHlwZS5kdF9ieXRlX2FycmF5OlxuICAgICAgICAgICAgdGhpcy5wYXJzZUJ5dGVBcnJheSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRjJkUHJvYmVEYXRhVHlwZS5kdF9zdHJpbmc6XG4gICAgICAgICAgICB0aGlzLnBhcnNlU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBGMmRQcm9iZURhdGFUeXBlLmR0X2RvdWJsZV9hcnJheTpcbiAgICAgICAgICAgIHRoaXMucGFyc2VEb3VibGVBcnJheSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkJhZCBvcCBjb2RlIGVuY291bnRlcmVkIDogXCIgKyBkYXRhX3R5cGUgKyBcIiAsIGJhaWwgb3V0LlwiLCBlcnJvckNvZGVTdHJpbmcoRXJyb3JDb2Rlcy5CQURfREFUQSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmVycm9yKVxuICAgICAgICB0aGlzLmZyYW1lRW5kID0gdGhpcy5zdHJlYW0ub2Zmc2V0O1xufTtcblxuRjJEUHJvYmUucHJvdG90eXBlLnByb2JlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIHZhciBlcnJvciA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKHN0cmVhbS5vZmZzZXQgPCBzdHJlYW0uYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wYXJzZURhdGFUeXBlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcENvdW50Kys7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChleGMpIHtcbiAgICAgICAgLy8gVHlwaWNhbGx5IGNhdXNlZCBieSBvdXQgb2YgYm91bmRzIGFjY2VzcyBvZiBkYXRhLlxuICAgICAgICB2YXIgbWVzc2FnZSA9IGV4Yy50b1N0cmluZygpO1xuICAgICAgICB2YXIgc3RhY2sgPSBleGMuc3RhY2sgPyBleGMuc3RhY2sudG9TdHJpbmcoKSA6IFwiLi4uXCI7XG5cbiAgICAgICAgLy8gRG9uJ3QgcGFuaWMgd2l0aCB0aGlzIC0gd2UgYXJlIHN1cHBvc2VkIHRvIGhpdCBvdXQgb2YgYm91bmRzIGEgY291cGxlIG9mIHRpbWVzIHdoZW4gcHJvYmluZy5cbiAgICAgICAgLy9kZWJ1ZyhcIkVycm9yIGluIEYyRFByb2JlLnByb3RvdHlwZS5wcm9iZSA6IFwiICsgbWVzc2FnZSArIFwiIHdpdGggc3RhY2sgOiBcIiArIHN0YWNrKTtcbiAgICB9XG59O1xuXG4iXSwibmFtZXMiOlsiQ2hlY2tlZElucHV0U3RyZWFtIiwiRjJkRGF0YVR5cGUiLCJGMmRTZW1hbnRpY1R5cGUiLCJlcnJvckNvZGVTdHJpbmciLCJFcnJvckNvZGVzIiwibG9nZ2VyIiwiRjJEUHJvYmUiLCJkYXRhIiwiZnJhbWVTdGFydCIsImZyYW1lRW5kIiwic3RyZWFtIiwib3BDb3VudCIsIm1hcmtlciIsInByb3RvdHlwZSIsImxvYWQiLCJzZWVrIiwicmVzZXQiLCJwcm9iZSIsIkYyZFByb2JlRGF0YVR5cGUiLCJGMmRQcm9iZVNlbWFudGljVHlwZSIsInJlYWRDb2xvciIsInMiLCJnZXRWYXJpbnRzIiwic2tpcFVpbnQzMiIsInBhcnNlUG9pbnRQb3NpdGlvbnMiLCJ1bmhhbmRsZWRUeXBlV2FybmluZyIsImluRnVuY3Rpb24iLCJzZW1hbnRpY1R5cGUiLCJ3YXJuIiwicGFyc2VPYmplY3QiLCJwYXJzZVN0cmluZyIsImxlbiIsInNraXBCeXRlcyIsInBhcnNlUG9pbnQiLCJwYXJzZVZhcmludEFycmF5IiwiY291bnQiLCJpIiwicGFyc2VCeXRlQXJyYXkiLCJwYXJzZUVuZE9mT2JqZWN0IiwicGFyc2VQb2ludHNBcnJheSIsImNvbnRleHQiLCJzZW1hIiwicGFyc2VJbnQiLCJzdF9jb2xvciIsInN0X2ZpbGwiLCJwYXJzZVZvaWQiLCJzdF9maWxsX29mZiIsInBhcnNlVmFyaW50IiwicGFyc2VJbnRBcnJheSIsInBhcnNlRmxvYXQiLCJnZXRGbG9hdDMyIiwicGFyc2VEb3VibGVBcnJheSIsInNraXBGbG9hdDY0IiwicGFyc2VDaXJjdWxhckFyYyIsInBhcnNlQ2lyY2xlIiwicGFyc2VBcmMiLCJwYXJzZURhdGFUeXBlIiwiZGF0YV90eXBlIiwiZHRfdm9pZCIsImR0X2ludCIsImR0X29iamVjdCIsImR0X3ZhcmludCIsImR0X2Zsb2F0IiwiZHRfcG9pbnRfdmFyaW50IiwiZHRfcG9pbnRfdmFyaW50X2FycmF5IiwiZHRfY2lyY3VsYXJfYXJjIiwiZHRfY2lyY2xlIiwiZHRfYXJjIiwiZHRfdmFyaW50X2FycmF5IiwiZHRfaW50X2FycmF5IiwiZHRfYnl0ZV9hcnJheSIsImR0X3N0cmluZyIsImR0X2RvdWJsZV9hcnJheSIsImVycm9yIiwiQkFEX0RBVEEiLCJvZmZzZXQiLCJieXRlTGVuZ3RoIiwiZXhjIiwibWVzc2FnZSIsInRvU3RyaW5nIiwic3RhY2siXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/f2d/F2dProbe.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/f2d/GeometryBuilder.js": /*!*******************************************************!*\ !*** ./src/file-loaders/lmvtk/f2d/GeometryBuilder.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GeometryBuilder: () => (/* binding */ GeometryBuilder)\n/* harmony export */ });\nconst createEllipticalCurveData = (\ncenter,\nmajorAxis,\nminorAxis,\ntiltInRadians,\nstartInRadians,\nendInRadians,\ndbId) => (\n{\n ellipse: {\n center,\n majorAxis,\n minorAxis,\n tiltInRadians\n },\n startInRadians,\n endInRadians,\n dbId\n});\n\nconst createCircularCurveData = (\ncenter,\nradius,\nstartInRadians,\nendInRadians,\ndbId) => (\n{\n type: \"circularCurve\",\n circle: {\n center,\n radius\n },\n startInRadians,\n endInRadians,\n dbId\n});\n\nconst createPolyLineData = (vertices, fillColor, dbId) => ({\n type: \"polyLine\",\n vertices,\n fillColor,\n dbId\n});\n\nconst createTriangleData = (_ref, dbId) => {let [point1, point2, point3] = _ref;return {\n type: \"triangle\",\n point1,\n point2,\n point3,\n dbId\n };};\n\nconst createLineSegmentData = (from, to, dbId) => ({\n type: \"lineSegment\",\n from,\n to,\n dbId\n});\n\nclass GeometryBuilder {\n constructor() {\n this.numPolyLine = 0;\n this.numEllipticals = 0;\n this.numCirculars = 0;\n this.numSegments = 0;\n this.geometries = [];\n }\n\n addPolyLine(flatPoints, fillColor, dbId) {\n\n this.numPolyLine++;\n const count = flatPoints.length / 2;\n const points = [];\n for (let i = 0; i < count; i++) {\n points.push({ x: flatPoints[2 * i], y: flatPoints[2 * i + 1] });\n }\n const polyLine = createPolyLineData(points, fillColor, dbId);\n this.geometries.push(polyLine);\n }\n\n addSegment(to, from, dbId) {\n this.numSegments++;\n const lineSegment = createLineSegmentData(to, from, dbId);\n this.geometries.push(lineSegment);\n }\n\n addCircularArc(cx, cy, radius, start, end, dbId) {\n this.numCirculars++;\n\n const circularArc = createCircularCurveData(\n [cx, cy],\n radius,\n start,\n end,\n dbId\n );\n this.geometries.push(circularArc);\n }\n\n addEllipticalArc(cx, cy, start, end, majorRadius, minorRadius, dbId) {\n this.numEllipticals++;\n const circularArc = createEllipticalCurveData(\n [cx, cy],\n majorRadius,\n minorRadius,\n start,\n end,\n dbId\n );\n this.geometries.push(circularArc);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL2YyZC9HZW9tZXRyeUJ1aWxkZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE1BQU1BLHlCQUF5QixHQUFHQTtBQUNoQ0MsTUFBTTtBQUNOQyxTQUFTO0FBQ1RDLFNBQVM7QUFDVEMsYUFBYTtBQUNiQyxjQUFjO0FBQ2RDLFlBQVk7QUFDWkMsSUFBSTtBQUNBO0VBQ0pDLE9BQU8sRUFBRTtJQUNQUCxNQUFNO0lBQ05DLFNBQVM7SUFDVEMsU0FBUztJQUNUQztFQUNGLENBQUM7RUFDREMsY0FBYztFQUNkQyxZQUFZO0VBQ1pDO0FBQ0YsQ0FBQyxDQUFDOztBQUVGLE1BQU1FLHVCQUF1QixHQUFHQTtBQUM5QlIsTUFBTTtBQUNOUyxNQUFNO0FBQ05MLGNBQWM7QUFDZEMsWUFBWTtBQUNaQyxJQUFJO0FBQ0E7RUFDSkksSUFBSSxFQUFFLGVBQWU7RUFDckJDLE1BQU0sRUFBRTtJQUNOWCxNQUFNO0lBQ05TO0VBQ0YsQ0FBQztFQUNETCxjQUFjO0VBQ2RDLFlBQVk7RUFDWkM7QUFDRixDQUFDLENBQUM7O0FBRUYsTUFBTU0sa0JBQWtCLEdBQUdBLENBQUNDLFFBQVEsRUFBRUMsU0FBUyxFQUFFUixJQUFJLE1BQU07RUFDekRJLElBQUksRUFBRSxVQUFVO0VBQ2hCRyxRQUFRO0VBQ1JDLFNBQVM7RUFDVFI7QUFDRixDQUFDLENBQUM7O0FBRUYsTUFBTVMsa0JBQWtCLEdBQUdBLENBQUFDLElBQUEsRUFBMkJWLElBQUksVUFBOUIsQ0FBQ1csTUFBTSxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sQ0FBQyxHQUFBSCxJQUFBLFFBQVk7SUFDOUROLElBQUksRUFBRSxVQUFVO0lBQ2hCTyxNQUFNO0lBQ05DLE1BQU07SUFDTkMsTUFBTTtJQUNOYjtFQUNGLENBQUMsRUFBQzs7QUFFRixNQUFNYyxxQkFBcUIsR0FBR0EsQ0FBQ0MsSUFBSSxFQUFFQyxFQUFFLEVBQUVoQixJQUFJLE1BQU07RUFDakRJLElBQUksRUFBRSxhQUFhO0VBQ25CVyxJQUFJO0VBQ0pDLEVBQUU7RUFDRmhCO0FBQ0YsQ0FBQyxDQUFDOztBQUVLLE1BQU1pQixlQUFlLENBQUM7RUFDM0JDLFdBQVdBLENBQUEsRUFBRztJQUNaLElBQUksQ0FBQ0MsV0FBVyxHQUFHLENBQUM7SUFDcEIsSUFBSSxDQUFDQyxjQUFjLEdBQUcsQ0FBQztJQUN2QixJQUFJLENBQUNDLFlBQVksR0FBRyxDQUFDO0lBQ3JCLElBQUksQ0FBQ0MsV0FBVyxHQUFHLENBQUM7SUFDcEIsSUFBSSxDQUFDQyxVQUFVLEdBQUcsRUFBRTtFQUN0Qjs7RUFFQUMsV0FBV0EsQ0FBQ0MsVUFBVSxFQUFFakIsU0FBUyxFQUFFUixJQUFJLEVBQUU7O0lBRXZDLElBQUksQ0FBQ21CLFdBQVcsRUFBRTtJQUNsQixNQUFNTyxLQUFLLEdBQUdELFVBQVUsQ0FBQ0UsTUFBTSxHQUFHLENBQUM7SUFDbkMsTUFBTUMsTUFBTSxHQUFHLEVBQUU7SUFDakIsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdILEtBQUssRUFBRUcsQ0FBQyxFQUFFLEVBQUU7TUFDOUJELE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLEVBQUVDLENBQUMsRUFBRU4sVUFBVSxDQUFDLENBQUMsR0FBR0ksQ0FBQyxDQUFDLEVBQUVHLENBQUMsRUFBRVAsVUFBVSxDQUFDLENBQUMsR0FBR0ksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRTtJQUNBLE1BQU1JLFFBQVEsR0FBRzNCLGtCQUFrQixDQUFDc0IsTUFBTSxFQUFFcEIsU0FBUyxFQUFFUixJQUFJLENBQUM7SUFDNUQsSUFBSSxDQUFDdUIsVUFBVSxDQUFDTyxJQUFJLENBQUNHLFFBQVEsQ0FBQztFQUNoQzs7RUFFQUMsVUFBVUEsQ0FBQ2xCLEVBQUUsRUFBRUQsSUFBSSxFQUFFZixJQUFJLEVBQUU7SUFDekIsSUFBSSxDQUFDc0IsV0FBVyxFQUFFO0lBQ2xCLE1BQU1hLFdBQVcsR0FBR3JCLHFCQUFxQixDQUFDRSxFQUFFLEVBQUVELElBQUksRUFBRWYsSUFBSSxDQUFDO0lBQ3pELElBQUksQ0FBQ3VCLFVBQVUsQ0FBQ08sSUFBSSxDQUFDSyxXQUFXLENBQUM7RUFDbkM7O0VBRUFDLGNBQWNBLENBQUNDLEVBQUUsRUFBRUMsRUFBRSxFQUFFbkMsTUFBTSxFQUFFb0MsS0FBSyxFQUFFQyxHQUFHLEVBQUV4QyxJQUFJLEVBQUU7SUFDL0MsSUFBSSxDQUFDcUIsWUFBWSxFQUFFOztJQUVuQixNQUFNb0IsV0FBVyxHQUFHdkMsdUJBQXVCO01BQ3pDLENBQUNtQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQztNQUNSbkMsTUFBTTtNQUNOb0MsS0FBSztNQUNMQyxHQUFHO01BQ0h4QztJQUNGLENBQUM7SUFDRCxJQUFJLENBQUN1QixVQUFVLENBQUNPLElBQUksQ0FBQ1csV0FBVyxDQUFDO0VBQ25DOztFQUVBQyxnQkFBZ0JBLENBQUNMLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxLQUFLLEVBQUVDLEdBQUcsRUFBRUcsV0FBVyxFQUFFQyxXQUFXLEVBQUU1QyxJQUFJLEVBQUU7SUFDbkUsSUFBSSxDQUFDb0IsY0FBYyxFQUFFO0lBQ3JCLE1BQU1xQixXQUFXLEdBQUdoRCx5QkFBeUI7TUFDM0MsQ0FBQzRDLEVBQUUsRUFBRUMsRUFBRSxDQUFDO01BQ1JLLFdBQVc7TUFDWEMsV0FBVztNQUNYTCxLQUFLO01BQ0xDLEdBQUc7TUFDSHhDO0lBQ0YsQ0FBQztJQUNELElBQUksQ0FBQ3VCLFVBQVUsQ0FBQ08sSUFBSSxDQUFDVyxXQUFXLENBQUM7RUFDbkM7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvZjJkL0dlb21ldHJ5QnVpbGRlci5qcz9iZTM1Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNyZWF0ZUVsbGlwdGljYWxDdXJ2ZURhdGEgPSAoXG4gIGNlbnRlcixcbiAgbWFqb3JBeGlzLFxuICBtaW5vckF4aXMsXG4gIHRpbHRJblJhZGlhbnMsXG4gIHN0YXJ0SW5SYWRpYW5zLFxuICBlbmRJblJhZGlhbnMsXG4gIGRiSWRcbikgPT4gKHtcbiAgZWxsaXBzZToge1xuICAgIGNlbnRlcixcbiAgICBtYWpvckF4aXMsXG4gICAgbWlub3JBeGlzLFxuICAgIHRpbHRJblJhZGlhbnNcbiAgfSxcbiAgc3RhcnRJblJhZGlhbnMsXG4gIGVuZEluUmFkaWFucyxcbiAgZGJJZFxufSk7XG5cbmNvbnN0IGNyZWF0ZUNpcmN1bGFyQ3VydmVEYXRhID0gKFxuICBjZW50ZXIsXG4gIHJhZGl1cyxcbiAgc3RhcnRJblJhZGlhbnMsXG4gIGVuZEluUmFkaWFucyxcbiAgZGJJZFxuKSA9PiAoe1xuICB0eXBlOiBcImNpcmN1bGFyQ3VydmVcIixcbiAgY2lyY2xlOiB7XG4gICAgY2VudGVyLFxuICAgIHJhZGl1c1xuICB9LFxuICBzdGFydEluUmFkaWFucyxcbiAgZW5kSW5SYWRpYW5zLFxuICBkYklkXG59KTtcblxuY29uc3QgY3JlYXRlUG9seUxpbmVEYXRhID0gKHZlcnRpY2VzLCBmaWxsQ29sb3IsIGRiSWQpID0+ICh7XG4gIHR5cGU6IFwicG9seUxpbmVcIixcbiAgdmVydGljZXMsXG4gIGZpbGxDb2xvcixcbiAgZGJJZFxufSk7XG5cbmNvbnN0IGNyZWF0ZVRyaWFuZ2xlRGF0YSA9IChbcG9pbnQxLCBwb2ludDIsIHBvaW50M10sIGRiSWQpID0+ICh7XG4gIHR5cGU6IFwidHJpYW5nbGVcIixcbiAgcG9pbnQxLFxuICBwb2ludDIsXG4gIHBvaW50MyxcbiAgZGJJZFxufSk7XG5cbmNvbnN0IGNyZWF0ZUxpbmVTZWdtZW50RGF0YSA9IChmcm9tLCB0bywgZGJJZCkgPT4gKHtcbiAgdHlwZTogXCJsaW5lU2VnbWVudFwiLFxuICBmcm9tLFxuICB0byxcbiAgZGJJZFxufSk7XG5cbmV4cG9ydCBjbGFzcyBHZW9tZXRyeUJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm51bVBvbHlMaW5lID0gMDtcbiAgICB0aGlzLm51bUVsbGlwdGljYWxzID0gMDtcbiAgICB0aGlzLm51bUNpcmN1bGFycyA9IDA7XG4gICAgdGhpcy5udW1TZWdtZW50cyA9IDA7XG4gICAgdGhpcy5nZW9tZXRyaWVzID0gW107XG4gIH1cblxuICBhZGRQb2x5TGluZShmbGF0UG9pbnRzLCBmaWxsQ29sb3IsIGRiSWQpIHtcbiAgICBcbiAgICB0aGlzLm51bVBvbHlMaW5lKys7XG4gICAgY29uc3QgY291bnQgPSBmbGF0UG9pbnRzLmxlbmd0aCAvIDI7XG4gICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICBwb2ludHMucHVzaCh7IHg6IGZsYXRQb2ludHNbMiAqIGldLCB5OiBmbGF0UG9pbnRzWzIgKiBpICsgMV0gfSk7XG4gICAgfVxuICAgIGNvbnN0IHBvbHlMaW5lID0gY3JlYXRlUG9seUxpbmVEYXRhKHBvaW50cywgZmlsbENvbG9yLCBkYklkKTtcbiAgICB0aGlzLmdlb21ldHJpZXMucHVzaChwb2x5TGluZSk7XG4gIH1cblxuICBhZGRTZWdtZW50KHRvLCBmcm9tLCBkYklkKSB7XG4gICAgdGhpcy5udW1TZWdtZW50cysrO1xuICAgIGNvbnN0IGxpbmVTZWdtZW50ID0gY3JlYXRlTGluZVNlZ21lbnREYXRhKHRvLCBmcm9tLCBkYklkKTtcbiAgICB0aGlzLmdlb21ldHJpZXMucHVzaChsaW5lU2VnbWVudCk7XG4gIH1cblxuICBhZGRDaXJjdWxhckFyYyhjeCwgY3ksIHJhZGl1cywgc3RhcnQsIGVuZCwgZGJJZCkge1xuICAgIHRoaXMubnVtQ2lyY3VsYXJzKys7XG5cbiAgICBjb25zdCBjaXJjdWxhckFyYyA9IGNyZWF0ZUNpcmN1bGFyQ3VydmVEYXRhKFxuICAgICAgW2N4LCBjeV0sXG4gICAgICByYWRpdXMsXG4gICAgICBzdGFydCxcbiAgICAgIGVuZCxcbiAgICAgIGRiSWRcbiAgICApO1xuICAgIHRoaXMuZ2VvbWV0cmllcy5wdXNoKGNpcmN1bGFyQXJjKTtcbiAgfVxuXG4gIGFkZEVsbGlwdGljYWxBcmMoY3gsIGN5LCBzdGFydCwgZW5kLCBtYWpvclJhZGl1cywgbWlub3JSYWRpdXMsIGRiSWQpIHtcbiAgICB0aGlzLm51bUVsbGlwdGljYWxzKys7XG4gICAgY29uc3QgY2lyY3VsYXJBcmMgPSBjcmVhdGVFbGxpcHRpY2FsQ3VydmVEYXRhKFxuICAgICAgW2N4LCBjeV0sXG4gICAgICBtYWpvclJhZGl1cyxcbiAgICAgIG1pbm9yUmFkaXVzLFxuICAgICAgc3RhcnQsXG4gICAgICBlbmQsXG4gICAgICBkYklkXG4gICAgKTtcbiAgICB0aGlzLmdlb21ldHJpZXMucHVzaChjaXJjdWxhckFyYyk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVFbGxpcHRpY2FsQ3VydmVEYXRhIiwiY2VudGVyIiwibWFqb3JBeGlzIiwibWlub3JBeGlzIiwidGlsdEluUmFkaWFucyIsInN0YXJ0SW5SYWRpYW5zIiwiZW5kSW5SYWRpYW5zIiwiZGJJZCIsImVsbGlwc2UiLCJjcmVhdGVDaXJjdWxhckN1cnZlRGF0YSIsInJhZGl1cyIsInR5cGUiLCJjaXJjbGUiLCJjcmVhdGVQb2x5TGluZURhdGEiLCJ2ZXJ0aWNlcyIsImZpbGxDb2xvciIsImNyZWF0ZVRyaWFuZ2xlRGF0YSIsIl9yZWYiLCJwb2ludDEiLCJwb2ludDIiLCJwb2ludDMiLCJjcmVhdGVMaW5lU2VnbWVudERhdGEiLCJmcm9tIiwidG8iLCJHZW9tZXRyeUJ1aWxkZXIiLCJjb25zdHJ1Y3RvciIsIm51bVBvbHlMaW5lIiwibnVtRWxsaXB0aWNhbHMiLCJudW1DaXJjdWxhcnMiLCJudW1TZWdtZW50cyIsImdlb21ldHJpZXMiLCJhZGRQb2x5TGluZSIsImZsYXRQb2ludHMiLCJjb3VudCIsImxlbmd0aCIsInBvaW50cyIsImkiLCJwdXNoIiwieCIsInkiLCJwb2x5TGluZSIsImFkZFNlZ21lbnQiLCJsaW5lU2VnbWVudCIsImFkZENpcmN1bGFyQXJjIiwiY3giLCJjeSIsInN0YXJ0IiwiZW5kIiwiY2lyY3VsYXJBcmMiLCJhZGRFbGxpcHRpY2FsQXJjIiwibWFqb3JSYWRpdXMiLCJtaW5vclJhZGl1cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/f2d/GeometryBuilder.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/otg/HashStrings.js": /*!***************************************************!*\ !*** ./src/file-loaders/lmvtk/otg/HashStrings.js ***! \***************************************************/ /***/ ((module) => { eval("const TO_HEX = new Array(256);\nfor (let i = 0; i < 256; i++) {\n let s = i.toString(16);\n if (s.length === 1)\n s = \"0\" + s;\n TO_HEX[i] = s;\n}\n\n//Most common case is for SHA1 hashes, which are 20 bytes\nvar tmpArr20 = new Array(20);\n\nvar tmpArr10 = new Array(10);\n\n//Converts the input byte array into a string of half the length\n//by packing two bytes into each string character (JS strings are two bytes per char)\nfunction binToPackedString(buffer, offset, length) {\n var res = length === 20 ? tmpArr10 : [];\n\n for (var i = 0; i < length; i += 2) {\n var b0 = buffer[offset + i];\n var b1 = buffer[offset + i + 1];\n res[i / 2] = b1 << 8 | b0;\n }\n\n return String.fromCharCode.apply(null, res);\n}\n\n//Converts from UCS16 packed string (two bytes per character) to\n//regular ASCII string of 4x the length\nfunction unpackHexString(s) {\n var res = s.length === 10 ? tmpArr20 : [];\n\n for (var i = 0; i < s.length; i++) {\n var bytes = s.charCodeAt(i);\n res[2 * i] = TO_HEX[bytes & 0xff];\n res[2 * i + 1] = TO_HEX[bytes >> 8 & 0xff];\n }\n\n return res.join(\"\");\n}\n\nfunction packedToBin(str, buf, offset) {\n for (let i = 0; i < str.length; i++) {\n let bytes = str.charCodeAt(i);\n buf[offset + 2 * i] = bytes & 0xff;\n buf[offset + 2 * i + 1] = bytes >> 8 & 0xff;\n }\n}\n\nmodule.exports = {\n binToPackedString,\n unpackHexString,\n packedToBin\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL290Zy9IYXNoU3RyaW5ncy5qcyIsIm5hbWVzIjpbIlRPX0hFWCIsIkFycmF5IiwiaSIsInMiLCJ0b1N0cmluZyIsImxlbmd0aCIsInRtcEFycjIwIiwidG1wQXJyMTAiLCJiaW5Ub1BhY2tlZFN0cmluZyIsImJ1ZmZlciIsIm9mZnNldCIsInJlcyIsImIwIiwiYjEiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJhcHBseSIsInVucGFja0hleFN0cmluZyIsImJ5dGVzIiwiY2hhckNvZGVBdCIsImpvaW4iLCJwYWNrZWRUb0JpbiIsInN0ciIsImJ1ZiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvb3RnL0hhc2hTdHJpbmdzLmpzPzg2NzQiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgVE9fSEVYID0gbmV3IEFycmF5KDI1Nik7XG5mb3IgKGxldCBpPTA7IGk8MjU2OyBpKyspIHtcbiAgICBsZXQgcyA9IGkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChzLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgcyA9IFwiMFwiICsgcztcbiAgICBUT19IRVhbaV0gPSBzO1xufVxuXG4vL01vc3QgY29tbW9uIGNhc2UgaXMgZm9yIFNIQTEgaGFzaGVzLCB3aGljaCBhcmUgMjAgYnl0ZXNcbnZhciB0bXBBcnIyMCA9IG5ldyBBcnJheSgyMCk7XG5cbnZhciB0bXBBcnIxMCA9IG5ldyBBcnJheSgxMCk7XG5cbi8vQ29udmVydHMgdGhlIGlucHV0IGJ5dGUgYXJyYXkgaW50byBhIHN0cmluZyBvZiBoYWxmIHRoZSBsZW5ndGhcbi8vYnkgcGFja2luZyB0d28gYnl0ZXMgaW50byBlYWNoIHN0cmluZyBjaGFyYWN0ZXIgKEpTIHN0cmluZ3MgYXJlIHR3byBieXRlcyBwZXIgY2hhcilcbmZ1bmN0aW9uIGJpblRvUGFja2VkU3RyaW5nKGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICB2YXIgcmVzID0gKGxlbmd0aCA9PT0gMjApID8gdG1wQXJyMTAgOiBbXTtcblxuICAgIGZvciAodmFyIGk9MDsgaTxsZW5ndGg7IGkrPTIpIHtcbiAgICAgICAgdmFyIGIwID0gYnVmZmVyW29mZnNldCtpXTtcbiAgICAgICAgdmFyIGIxID0gYnVmZmVyW29mZnNldCtpKzFdO1xuICAgICAgICByZXNbaS8yXSA9IGIxIDw8IDggfCBiMDtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCByZXMpO1xufVxuXG4vL0NvbnZlcnRzIGZyb20gVUNTMTYgcGFja2VkIHN0cmluZyAodHdvIGJ5dGVzIHBlciBjaGFyYWN0ZXIpIHRvXG4vL3JlZ3VsYXIgQVNDSUkgc3RyaW5nIG9mIDR4IHRoZSBsZW5ndGhcbmZ1bmN0aW9uIHVucGFja0hleFN0cmluZyhzKSB7XG4gICAgdmFyIHJlcyA9IChzLmxlbmd0aCA9PT0gMTApID8gdG1wQXJyMjAgOiBbXTtcblxuICAgIGZvciAodmFyIGk9MDsgaTxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBieXRlcyA9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgcmVzWzIqaV0gPSBUT19IRVhbYnl0ZXMgJiAweGZmXTtcbiAgICAgICAgcmVzWzIqaSsxXSA9IFRPX0hFWFsoYnl0ZXMgPj4gOCkgJiAweGZmXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHBhY2tlZFRvQmluKHN0ciwgYnVmLCBvZmZzZXQpIHtcbiAgICBmb3IgKGxldCBpPTA7IGk8c3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBieXRlcyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBidWZbb2Zmc2V0KzIqaV0gPSBieXRlcyAmIDB4ZmY7XG4gICAgICAgIGJ1ZltvZmZzZXQrMippKzFdID0gKGJ5dGVzID4+IDgpICYgMHhmZjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGJpblRvUGFja2VkU3RyaW5nLFxuICAgIHVucGFja0hleFN0cmluZyxcbiAgICBwYWNrZWRUb0JpblxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTUEsTUFBTSxHQUFHLElBQUlDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDN0IsS0FBSyxJQUFJQyxDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUMsR0FBRyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtFQUN0QixJQUFJQyxDQUFDLEdBQUdELENBQUMsQ0FBQ0UsUUFBUSxDQUFDLEVBQUUsQ0FBQztFQUN0QixJQUFJRCxDQUFDLENBQUNFLE1BQU0sS0FBSyxDQUFDO0VBQ2RGLENBQUMsR0FBRyxHQUFHLEdBQUdBLENBQUM7RUFDZkgsTUFBTSxDQUFDRSxDQUFDLENBQUMsR0FBR0MsQ0FBQztBQUNqQjs7QUFFQTtBQUNBLElBQUlHLFFBQVEsR0FBRyxJQUFJTCxLQUFLLENBQUMsRUFBRSxDQUFDOztBQUU1QixJQUFJTSxRQUFRLEdBQUcsSUFBSU4sS0FBSyxDQUFDLEVBQUUsQ0FBQzs7QUFFNUI7QUFDQTtBQUNBLFNBQVNPLGlCQUFpQkEsQ0FBQ0MsTUFBTSxFQUFFQyxNQUFNLEVBQUVMLE1BQU0sRUFBRTtFQUMvQyxJQUFJTSxHQUFHLEdBQUlOLE1BQU0sS0FBSyxFQUFFLEdBQUlFLFFBQVEsR0FBRyxFQUFFOztFQUV6QyxLQUFLLElBQUlMLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ0csTUFBTSxFQUFFSCxDQUFDLElBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUlVLEVBQUUsR0FBR0gsTUFBTSxDQUFDQyxNQUFNLEdBQUNSLENBQUMsQ0FBQztJQUN6QixJQUFJVyxFQUFFLEdBQUdKLE1BQU0sQ0FBQ0MsTUFBTSxHQUFDUixDQUFDLEdBQUMsQ0FBQyxDQUFDO0lBQzNCUyxHQUFHLENBQUNULENBQUMsR0FBQyxDQUFDLENBQUMsR0FBR1csRUFBRSxJQUFJLENBQUMsR0FBR0QsRUFBRTtFQUMzQjs7RUFFQSxPQUFPRSxNQUFNLENBQUNDLFlBQVksQ0FBQ0MsS0FBSyxDQUFDLElBQUksRUFBRUwsR0FBRyxDQUFDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQSxTQUFTTSxlQUFlQSxDQUFDZCxDQUFDLEVBQUU7RUFDeEIsSUFBSVEsR0FBRyxHQUFJUixDQUFDLENBQUNFLE1BQU0sS0FBSyxFQUFFLEdBQUlDLFFBQVEsR0FBRyxFQUFFOztFQUUzQyxLQUFLLElBQUlKLENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ0MsQ0FBQyxDQUFDRSxNQUFNLEVBQUVILENBQUMsRUFBRSxFQUFFO0lBQzNCLElBQUlnQixLQUFLLEdBQUdmLENBQUMsQ0FBQ2dCLFVBQVUsQ0FBQ2pCLENBQUMsQ0FBQztJQUMzQlMsR0FBRyxDQUFDLENBQUMsR0FBQ1QsQ0FBQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ2tCLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDL0JQLEdBQUcsQ0FBQyxDQUFDLEdBQUNULENBQUMsR0FBQyxDQUFDLENBQUMsR0FBR0YsTUFBTSxDQUFFa0IsS0FBSyxJQUFJLENBQUMsR0FBSSxJQUFJLENBQUM7RUFDNUM7O0VBRUEsT0FBT1AsR0FBRyxDQUFDUyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3ZCOztBQUVBLFNBQVNDLFdBQVdBLENBQUNDLEdBQUcsRUFBRUMsR0FBRyxFQUFFYixNQUFNLEVBQUU7RUFDbkMsS0FBSyxJQUFJUixDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUNvQixHQUFHLENBQUNqQixNQUFNLEVBQUVILENBQUMsRUFBRSxFQUFFO0lBQzdCLElBQUlnQixLQUFLLEdBQUdJLEdBQUcsQ0FBQ0gsVUFBVSxDQUFDakIsQ0FBQyxDQUFDO0lBQzdCcUIsR0FBRyxDQUFDYixNQUFNLEdBQUMsQ0FBQyxHQUFDUixDQUFDLENBQUMsR0FBR2dCLEtBQUssR0FBRyxJQUFJO0lBQzlCSyxHQUFHLENBQUNiLE1BQU0sR0FBQyxDQUFDLEdBQUNSLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBSWdCLEtBQUssSUFBSSxDQUFDLEdBQUksSUFBSTtFQUMzQztBQUNKOztBQUVBTSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNiakIsaUJBQWlCO0VBQ2pCUyxlQUFlO0VBQ2ZJO0FBQ0osQ0FBQyJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/otg/HashStrings.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/otg/LocalDbCache.js": /*!****************************************************!*\ !*** ./src/file-loaders/lmvtk/otg/LocalDbCache.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LocalDbCache: () => (/* binding */ LocalDbCache),\n/* harmony export */ clearIndexedDbIfItsLarge: () => (/* binding */ clearIndexedDbIfItsLarge)\n/* harmony export */ });\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../compat */ \"./src/compat.js\");\n\n\n\n//All object stores go into this database\nconst DB_NAME = \"otg\";\n\nconst CONTENT_STORE = \"otg-content\";\nconst CONTENT_STORE_LRU = \"otg-lru\";\n\n// VIZX-245: Remove IndexedDb when it's large and OPFS is enabled to prevent users from running out of storage quota.\n// Since customers might use OPFS and IndexedDB interchangeably during the transition, we should only remove the IndexedDB\n// if we 're getting rid of a significant amount of wasted space. This would avoid scenarios of repeated fill/removal scenarios.\n// We can't query the IndexedDb size in MB (storage.estimate() is unreliable and not supported in all browsers), so we use a count of entries as a proxy.\n// Assuming an average of 4KB per geom, this is one GB.\nconst CLEANUP_THRESHOLD=2 50000;\n\n\nasync function clearIndexedDbIfItsLarge() {\n // wait a bit so this doesn 't slow down early model loading process (getting the count takes multiple seconds on large caches)\n await new Promise((resolve) => setTimeout(resolve, 20000));\n\n // check whether db exists (otherwise `open` it would create it)\n let dbs = await indexedDB.databases();\n if (!dbs.find((_ref) => {let { name } = _ref;return name === DB_NAME;})) {\n return;\n }\n\n // open db\n let request = indexedDB.open(DB_NAME, 1);\n request.onerror = (event) => {\n console.error(\"Failed to open cache database for cleanup.\", event);\n };\n request.onsuccess = (event) => {\n // get count\n const db = event.target.result;\n const transaction = db.transaction(CONTENT_STORE);\n const req = transaction.objectStore(CONTENT_STORE).count();\n req.onsuccess = (event) => {\n const count = event.target.result;\n if (count > CLEANUP_THRESHOLD) {\n // delete db\n console.log(\"OPFS cache is enabled and the old IndexedDb cache is taking up storage space. Deleting IndexedDb cache.\");\n db.close();\n const req = indexedDB.deleteDatabase(DB_NAME);\n req.onsuccess = () => {\n console.log('IndexedDb cache deleted ');\n };\n req.onerror = (event) => {\n console.error('Failed to delete IndexedDb cache ', event);\n };\n }\n };\n\n req.onerror = (event) => {\n console.error(\"Failed to get count from IndexedDb\", event);\n };\n };\n}\n\n\nclass LocalDbCache {\n\n constructor(forceDisabled) {\n this.db = null;\n this.readTransaction = null;\n this.loaded = false;\n this.opening = false;\n\n this.dbDisabled = this._isDbDisabled(forceDisabled);\n\n if (!(0,_compat__WEBPACK_IMPORTED_MODULE_0__.isNodeJS)() && this.dbDisabled) {\n console.log(\"IndexedDb disabled\");\n }\n\n this.storeName = CONTENT_STORE;\n this.storeNameTimestamp = CONTENT_STORE_LRU;\n this.bothStoreNames = [this.storeName, this.storeNameTimestamp];\n\n this.pendingTimestampUpdates = {};\n this.pendingTimestampCount = 0;\n\n this.pendingStores = [];\n\n this._pendingCallbacks = [];\n }\n\n // Disable on Safari until we figure out why performance is terrible.\n // Disable on Node.js because we don't need to cache locally on the server side\n // Disable on Mobile until we decide if we want the performance hit there.\n _isDbDisabled(forceDisabled) {\n return (\n forceDisabled ||\n (0,_compat__WEBPACK_IMPORTED_MODULE_0__.isNodeJS)() ||\n (0,_compat__WEBPACK_IMPORTED_MODULE_0__.isSafari)() ||\n (0,_compat__WEBPACK_IMPORTED_MODULE_0__.isMobileDevice)() ||\n typeof indexedDB===\ "undefined\");\n\n }\n\n notifyPendingCallbacks(error) {\n this._pendingCallbacks.forEach((cb)=> cb(error, this.db));\n this._pendingCallbacks = [];\n }\n\n open(cb) {\n\n if (this.dbDisabled) {\n cb && cb();\n return;\n }\n\n //Call back immediately if we are already open\n if (this.loaded) {\n cb && cb(null, this.db);\n return;\n }\n\n cb && this._pendingCallbacks.push(cb);\n\n if (this.opening) {\n return;\n }\n\n this.opening = true;\n\n //Open the IndexedDb database connection\n let request = indexedDB.open(DB_NAME, 1);\n\n request.onerror = (event) => {\n console.error(\"Failed to open or create cache database.\");\n this.dbDisabled = true;\n this.notifyPendingCallbacks(event);\n };\n request.onsuccess = (event) => {\n\n this.opening = false;\n this.db = event.target.result;\n\n this.db.onerror = function (event) {\n console.error(\"Database error\", event);\n };\n\n this.loaded = true;\n this.notifyPendingCallbacks();\n\n /*\r\n this.size((err, data) => {\r\n console.log(data);\r\n });\r\n */\n };\n\n request.onupgradeneeded = (event) => {\n\n console.log(\"Db upgrade\", this.storeName);\n\n // Save the IDBDatabase interface\n let db = event.target.result;\n\n // Create the database schema\n db.createObjectStore(CONTENT_STORE);\n let os = db.createObjectStore(CONTENT_STORE_LRU);\n os.createIndex(CONTENT_STORE_LRU + \"-index\", \"t\", { unique: false });\n };\n }\n\n\n deleteOld(callback) {\n\n if (!this.db) {\n callback();\n return;\n }\n\n if (this.deleteInProgress)\n return;\n\n this.deleteInProgress = true;\n\n let howMany = 200;\n\n //Avoid deleting stuff that was last used a short while ago, by using a range query\n let upperBoundOpenKeyRange = IDBKeyRange.upperBound(Date.now() - 300 * 1000, true);\n\n let hashes = [];\n\n let objectStore = this.db.transaction([this.storeNameTimestamp] /*, \"readwrite\"*/).objectStore(this.storeNameTimestamp);\n\n let index = objectStore.index(this.storeNameTimestamp + \"-index\");\n\n index.openCursor(upperBoundOpenKeyRange).onsuccess = (event) => {\n let cursor = event.target.result;\n if (cursor && hashes.length < howMany) {\n hashes.push(cursor.primaryKey);\n cursor.continue();\n return;\n }\n\n if (hashes.length) {\n\n console.log(\ "Deleting old objects.\", hashes.length);\n\n let transaction=t his.db.transaction(this.bothStoreNames, \ "readwrite\");\n\n transaction.oncomplete=( event)=> {\n this.deleteInProgress = false;\n console.log(\"Delete done\");\n callback && callback();\n };\n\n transaction.onerror = (event) => {\n this.deleteInProgress = false;\n console.error(\"Transaction error.\", event);\n };\n\n transaction.onabort = (event) => {\n this.deleteInProgress = false;\n let error = event.target.error; // DOMError\n console.log(\"Failed to delete cached objects\", error);\n };\n\n let objectStoreMain = transaction.objectStore(this.storeName);\n let objectStoreTimestamp = transaction.objectStore(this.storeNameTimestamp);\n\n for (let i = 0; i < hashes.length; i++) {\n objectStoreMain.delete(hashes[i]);\n objectStoreTimestamp.delete(hashes[i]);\n }\n\n }\n };\n\n\n\n }\n\n\n flush(cb) {\n\n if (!this.pendingStores.length) {\n cb && cb();\n return;\n }\n\n if (!this.writeTransaction) {\n\n let transaction=t his.db.transaction(this.bothStoreNames, \ "readwrite\");\n\n if (cb) {\n transaction.oncomplete=( event)=> {\n //console.log(\"Transaction complete\");\n cb();\n };\n }\n\n transaction.onerror = (event) => {\n console.error(\"Transaction error.\", event);\n cb && cb(event.target.error);\n };\n\n transaction.onabort = (event) => {\n let error = event.target.error; // DOMError\n if (error.name === 'QuotaExceededError') {\n //console.log(\"Quota exceeded\");\n this.deleteOld(() => {});\n\n }\n cb && cb(event.target.error);\n };\n\n this.writeTransaction = transaction;\n }\n\n for (var i = 0; i < this.pendingStores.length; i +=2 ) {\n\n var hash=t his.pendingStores[i];\n var data=t his.pendingStores[i + 1];\n\n let objectStore=t his.writeTransaction.objectStore(this.storeName);\n\n let storeBlob=o bjectStore.put(data, hash);\n\n storeBlob.onerror=( event)=> {\n console.error(\"Object store error.\", event);\n };\n\n let timestampStore = this.writeTransaction.objectStore(this.storeNameTimestamp);\n timestampStore.put({ t: Date.now() }, hash);\n\n }\n\n this.pendingStores = [];\n\n //TODO: reuse this transaction for longer\n this.writeTransaction = null;\n }\n\n\n store(hash, data, cb) {\n\n if (!this.db) {\n cb && cb();\n return;\n }\n\n // Most of the time (i.e. always) we're given a TypedArray that's a view on a larger ArrayBuffer:\n // The geoms/materials came through a websocket and the ArrayBuffer contains the whole message.\n // Even geoms that did not arrive in a batch contain a header that's not geometry data.\n // To prevent the entire ArrayBuffer being serialized into the cache, create a copy with just the part we're interested in.\n // This also keeps the data alive while the original ArrayBuffer might become unusable (see transferList in OtgLoadWorker)\n data = data.slice();\n\n this.pendingStores.push(hash);\n this.pendingStores.push(data);\n\n if (this.pendingStores.length < 200 || this.deleteInProgress) {\n cb && cb();\n return;\n }\n\n this.flush(cb);\n }\n\n\n flushTimestamps(cb) {\n\n let transaction=t his.db.transaction([this.storeNameTimestamp], \ "readwrite\");\n\n if (cb) {\n transaction.oncomplete=( event)=> {\n //console.log(\"Transaction complete\");\n cb();\n };\n }\n\n transaction.onerror = (event) => {\n console.error(\"Transaction error.\", event);\n cb && cb(event.target.error);\n };\n\n transaction.onabort = (event) => {\n let error = event.target.error; // DOMError\n if (error.name === 'QuotaExceededError') {\n console.log(\"Quota exceeded\");\n this.deleteOld(() => {});\n }\n cb && cb(event.target.error);\n };\n\n\n let timestampStore = transaction.objectStore(this.storeNameTimestamp);\n\n for (let hash in this.pendingTimestampUpdates) {\n timestampStore.put({ t: this.pendingTimestampUpdates[hash] }, hash);\n }\n\n this.pendingTimestampUpdates = {};\n this.pendingTimestampCount = 0;\n }\n\n _createReadTransaction() {\n //We try to keep the read transaction alive by reusing it\n //for all new requests. If they come fast enough, the transaction\n //will stay alive. If it completes, we will create a new one.\n let transaction = this.readTransaction = this.db.transaction(this.storeName);\n\n transaction.oncomplete = (event) => {\n this.readTransaction = null;\n };\n transaction.onerror = (event) => {\n console.error(\"Transaction error.\", event);\n this.readTransaction = null;\n };\n transaction.onabort = (event) => {\n console.warn(\"Transaction abort\", event);\n this.readTransaction = null;\n };\n }\n\n get(hash, cb) {\n\n if (this.opening) {\n console.error(\"Tried to get IndexedDb resource while database was still opening\");\n cb(-1, null);\n return;\n }\n\n if (!this.db) {\n cb(-1, null);\n return;\n }\n\n //We try to reuse the same read transaction for as long as it will let us\n if (!this.readTransaction) {\n this._createReadTransaction();\n }\n\n let req;\n //This can fail if the transaction has gone inactive\n try {\n req = this.readTransaction.objectStore(this.storeName).get(hash);\n } catch (e) {\n this._createReadTransaction();\n req = this.readTransaction.objectStore(this.storeName).get(hash);\n }\n\n req.onsuccess = (event) => {\n\n //Somehow we sometimes end up getting null for an existing key\n //so we force reload\n if (!event.target.result) {\n cb(-1, null);\n return;\n }\n\n\n let data = event.target.result;\n\n cb(null, data);\n\n //Remember the new timestamp for this hash, but don't update\n //it in the mru table immediately, to avoid slowing down model load\n //with a write transaction.\n this.pendingTimestampUpdates[hash] = Date.now();\n this.pendingTimestampCount++;\n };\n\n req.onerror = (event) => {\n cb(event.target.errorCode);\n };\n\n }\n\n\n flushStoresAndTimestamps() {\n\n if (!this.db)\n return;\n\n this.flush((err) => {\n //console.log(\"Updating all timestamps\");\n\n if (err) {\n return;\n }\n\n this.flushTimestamps();\n\n });\n\n }\n\n size(callback) {\n if (!this.db) {\n callback();\n return;\n }\n\n let size = 0;\n let items = 0;\n\n let transaction = this.db.transaction([this.storeName]).\n objectStore(this.storeName).\n openCursor();\n\n transaction.onsuccess = (event) => {\n let cursor = event.target.result;\n if (cursor) {\n let storedObject = cursor.value;\n size += storedObject.length;\n items++;\n cursor.continue();\n } else\n {\n callback(null, { size: size, items: items });\n }\n };\n\n transaction.onerror = function (err) {\n callback(err);\n };\n }\n\n estimateCachedHashCount(cb) {\n if (this.opening) {\n console.error(\"Tried to get IndexedDb resource while database was still opening\");\n cb(undefined);\n return;\n }\n\n if (!this.db) {\n cb(undefined);\n return;\n }\n\n let transaction = this.db.transaction(this.storeNameTimestamp);\n let req;\n try {\n req = transaction.objectStore(this.storeNameTimestamp).openKeyCursor();\n } catch (e) {\n cb(undefined);\n return;\n }\n\n let count = 2;\n const probePosition = 1000;\n req.onsuccess = (event) => {\n const cursor = event.target.result;\n if (cursor) {\n if (--count > 0) {\n // first call: advance to a specific position in the sorted order of hashes\n cursor.advance(probePosition - 1);\n } else {\n // second call: check key and estimate total hash count\n // the estimation assumes uniform hash distribution (md5() is used to calculate the hash from some block of data)\n // and sorted access through IndexDb\n // it takes the first two bytes of the hash at position `probePosition` and extrapolates the position for 65536 as the first two bytes \n const firstWord = cursor.key.charCodeAt(0);\n const estimatedCount = probePosition * 65536 / firstWord;\n cb(estimatedCount);\n\n // no need to do anything else\n transaction.abort();\n }\n } else {\n // an immediately undefined cursor means an empty cache\n // an undefined cursor after advancing to `probePosition` means less than probePosition entries\n cb(count == 2 ? 0 : count == 1 ? probePosition : undefined);\n }\n };\n\n req.onerror = (event) => {\n cb(undefined);\n };\n }\n\n readAllCachedHashes(cb) {\n if (this.opening) {\n console.error(\"Tried to get IndexedDb resource while database was still opening\");\n cb([]);\n return;\n }\n\n if (!this.db) {\n cb([]);\n return;\n }\n\n // reading all hashes from the timestamp store is faster than from the content store\n let transaction = this.db.transaction(this.storeNameTimestamp);\n let req;\n try {\n req = transaction.objectStore(this.storeNameTimestamp).getAllKeys();\n } catch (e) {\n cb([]);\n return;\n }\n\n req.onsuccess = (event) => {\n cb(event.target.result);\n };\n\n req.onerror = (event) => {\n cb([]);\n };\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL290Zy9Mb2NhbERiQ2FjaGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXFFOzs7QUFHckU7QUFDQSxNQUFNRyxPQUFPLEdBQUcsS0FBSzs7QUFFckIsTUFBTUMsYUFBYSxHQUFHLGFBQWE7QUFDbkMsTUFBTUMsaUJBQWlCLEdBQUcsU0FBUzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLE1BQU07OztBQUd6QixlQUFlQyx3QkFBd0JBLENBQUEsRUFBRztFQUM3QztFQUNBLE1BQU0sSUFBSUMsT0FBTyxDQUFDLENBQUFDLE9BQU8sS0FBSUMsVUFBVSxDQUFDRCxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7O0VBRXhEO0VBQ0EsSUFBSUUsR0FBRyxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDLENBQUM7RUFDckMsSUFBSSxDQUFDRixHQUFHLENBQUNHLElBQUksQ0FBQyxDQUFBQyxJQUFBLFVBQUMsRUFBRUMsSUFBSSxDQUFDLENBQUMsR0FBQUQsSUFBQSxRQUFLQyxJQUFJLEtBQUtiLE9BQU8sR0FBQyxFQUFFO0lBQzNDO0VBQ0o7O0VBRUE7RUFDQSxJQUFJYyxPQUFPLEdBQUdMLFNBQVMsQ0FBQ00sSUFBSSxDQUFDZixPQUFPLEVBQUUsQ0FBQyxDQUFDO0VBQ3hDYyxPQUFPLENBQUNFLE9BQU8sR0FBRyxDQUFDQyxLQUFLLEtBQUs7SUFDekJDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLDRDQUE0QyxFQUFFRixLQUFLLENBQUM7RUFDdEUsQ0FBQztFQUNESCxPQUFPLENBQUNNLFNBQVMsR0FBRyxDQUFDSCxLQUFLLEtBQUs7SUFDM0I7SUFDQSxNQUFNSSxFQUFFLEdBQUdKLEtBQUssQ0FBQ0ssTUFBTSxDQUFDQyxNQUFNO0lBQzlCLE1BQU1DLFdBQVcsR0FBR0gsRUFBRSxDQUFDRyxXQUFXLENBQUN2QixhQUFhLENBQUM7SUFDakQsTUFBTXdCLEdBQUcsR0FBR0QsV0FB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QztNQUNqRTtJQUNKLENBQUM7O0lBRUQzRSxHQUFHLENBQUNULE9BQU8sR0FBRyxDQUFDQyxLQUFLLEtBQUs7TUFDckIrQixFQUFFLENBQUNvRCxTQUFTLENBQUM7SUFDakIsQ0FBQztFQUNMOztFQUVBUyxtQkFBbUJBLENBQUM3RCxFQUFFLEVBQUU7SUFDcEIsSUFBSSxJQUFJLENBQUNaLE9BQU8sRUFBRTtNQUNkbEIsT0FBTyxDQUFDQyxLQUFLLENBQUMsa0VBQWtFLENBQUM7TUFDakY2QixFQUFFLENBQUMsRUFBRSxDQUFDO01BQ047SUFDSjs7SUFFQSxJQUFJLENBQUMsSUFBSSxDQUFDM0IsRUFBRSxFQUFFO01BQ1YyQixFQUFFLENBQUMsRUFBRSxDQUFDO01BQ047SUFDSjs7SUFFQTtJQUNBLElBQUl4QixXQUFXLEdBQUcsSUFBSSxDQUFDSCxFQUFFLENBQUNHLFdBQVcsQ0FBQyxJQUFJLENBQUNnQixrQkFBa0IsQ0FBQztJQUM5RCxJQUFJZixHQUFHO0lBQ1AsSUFBSTtNQUNBQSxHQUFHLEdBQUdELFdBQVcsQ0FBQ0UsV0FBVyxDQUFDLElBQUksQ0FBQ2Msa0JBQWtCLENBQUMsQ0FBQ3NFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxPQUFPbkIsQ0FBQyxFQUFFO01BQ1IzQyxFQUFFLENBQUMsRUFBRSxDQUFDO01BQ047SUFDSjs7SUFFQXZCLEdBQUcsQ0FBQ0wsU0FBUyxHQUFHLENBQUNILEtBQUssS0FBSztNQUN2QitCLEVBQUUsQ0FBQy9CLEtBQUssQ0FBQ0ssTUFBTSxDQUFDQyxNQUFNLENBQUM7SUFDM0IsQ0FBQzs7SUFFREUsR0FBRyxDQUFDVCxPQUFPLEdBQUcsQ0FBQ0MsS0FBSyxLQUFLO01BQ3JCK0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNWLENBQUM7RUFDTDtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9vdGcvTG9jYWxEYkNhY2hlLmpzPzliZWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOb2RlSlMsIGlzTW9iaWxlRGV2aWNlLCBpc1NhZmFyaSB9IGZyb20gXCIuLi8uLi8uLi9jb21wYXRcIjtcclxuXHJcblxyXG4vL0FsbCBvYmplY3Qgc3RvcmVzIGdvIGludG8gdGhpcyBkYXRhYmFzZVxyXG5jb25zdCBEQl9OQU1FID0gXCJvdGdcIjtcclxuXHJcbmNvbnN0IENPTlRFTlRfU1RPUkUgPSBcIm90Zy1jb250ZW50XCI7XHJcbmNvbnN0IENPTlRFTlRfU1RPUkVfTFJVID0gXCJvdGctbHJ1XCI7XHJcblxyXG4vLyBWSVpYLTI0NTogUmVtb3ZlIEluZGV4ZWREYiB3aGVuIGl0J3MgbGFyZ2UgYW5kIE9QRlMgaXMgZW5hYmxlZCB0byBwcmV2ZW50IHVzZXJzIGZyb20gcnVubmluZyBvdXQgb2Ygc3RvcmFnZSBxdW90YS5cclxuLy8gU2luY2UgY3VzdG9tZXJzIG1pZ2h0IHVzZSBPUEZTIGFuZCBJbmRleGVkREIgaW50ZXJjaGFuZ2VhYmx5IGR1cmluZyB0aGUgdHJhbnNpdGlvbiwgd2Ugc2hvdWxkIG9ubHkgcmVtb3ZlIHRoZSBJbmRleGVkREJcclxuLy8gaWYgd2UncmUgZ2V0dGluZyByaWQgb2YgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd2FzdGVkIHNwYWNlLiBUaGlzIHdvdWxkIGF2b2lkIHNjZW5hcmlvcyBvZiByZXBlYXRlZCBmaWxsL3JlbW92YWwgc2NlbmFyaW9zLlxyXG4vLyBXZSBjYW4ndCBxdWVyeSB0aGUgSW5kZXhlZERiIHNpemUgaW4gTUIgKHN0b3JhZ2UuZXN0aW1hdGUoKSBpcyB1bnJlbGlhYmxlIGFuZCBub3Qgc3VwcG9ydGVkIGluIGFsbCBicm93c2VycyksIHNvIHdlIHVzZSBhIGNvdW50IG9mIGVudHJpZXMgYXMgYSBwcm94eS5cclxuLy8gQXNzdW1pbmcgYW4gYXZlcmFnZSBvZiA0S0IgcGVyIGdlb20sIHRoaXMgaXMgb25lIEdCLlxyXG5jb25zdCBDTEVBTlVQX1RIUkVTSE9MRCA9IDI1MDAwMDtcclxuXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJJbmRleGVkRGJJZkl0c0xhcmdlKCkge1xyXG4gICAgLy8gd2FpdCBhIGJpdCBzbyB0aGlzIGRvZXNuJ3Qgc2xvdyBkb3duIGVhcmx5IG1vZGVsIGxvYWRpbmcgcHJvY2VzcyAoZ2V0dGluZyB0aGUgY291bnQgdGFrZXMgbXVsdGlwbGUgc2Vjb25kcyBvbiBsYXJnZSBjYWNoZXMpXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwMDApKTtcclxuXHJcbiAgICAvLyBjaGVjayB3aGV0aGVyIGRiIGV4aXN0cyAob3RoZXJ3aXNlIGBvcGVuYCBpdCB3b3VsZCBjcmVhdGUgaXQpXHJcbiAgICBsZXQgZGJzID0gYXdhaXQgaW5kZXhlZERCLmRhdGFiYXNlcygpO1xyXG4gICAgaWYgKCFkYnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IERCX05BTUUpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG9wZW4gZGJcclxuICAgIGxldCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oREJfTkFNRSwgMSk7XHJcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIG9wZW4gY2FjaGUgZGF0YWJhc2UgZm9yIGNsZWFudXAuXCIsIGV2ZW50KTtcclxuICAgIH07XHJcbiAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xyXG4gICAgICAgIC8vIGdldCBjb3VudFxyXG4gICAgICAgIGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKENPTlRFTlRfU1RPUkUpO1xyXG4gICAgICAgIGNvbnN0IHJlcSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKENPTlRFTlRfU1RPUkUpLmNvdW50KCk7XHJcbiAgICAgICAgcmVxLm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IENMRUFOVVBfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGUgZGJcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT1BGUyBjYWNoZSBpcyBlbmFibGVkIGFuZCB0aGUgb2xkIEluZGV4ZWREYiBjYWNoZSBpcyB0YWtpbmcgdXAgc3RvcmFnZSBzcGFjZS4gRGVsZXRpbmcgSW5kZXhlZERiIGNhY2hlLlwiKTtcclxuICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXEgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoREJfTkFNRSk7XHJcbiAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbmRleGVkRGIgY2FjaGUgZGVsZXRlZCcpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBJbmRleGVkRGIgY2FjaGUnLCBldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVxLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBnZXQgY291bnQgZnJvbSBJbmRleGVkRGJcIiwgZXZlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsRGJDYWNoZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoZm9yY2VEaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMuZGIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVhZFRyYW5zYWN0aW9uID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub3BlbmluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmRiRGlzYWJsZWQgPSB0aGlzLl9pc0RiRGlzYWJsZWQoZm9yY2VEaXNhYmxlZCk7XHJcblxyXG4gICAgICAgIGlmICghaXNOb2RlSlMoKSAmJiB0aGlzLmRiRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJJbmRleGVkRGIgZGlzYWJsZWRcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0b3JlTmFtZSA9IENPTlRFTlRfU1RPUkU7XHJcbiAgICAgICAgdGhpcy5zdG9yZU5hbWVUaW1lc3RhbXAgPSBDT05URU5UX1NUT1JFX0xSVTtcclxuICAgICAgICB0aGlzLmJvdGhTdG9yZU5hbWVzID0gW3RoaXMuc3RvcmVOYW1lLCB0aGlzLnN0b3JlTmFtZVRpbWVzdGFtcF07XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ1RpbWVzdGFtcFVwZGF0ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnBlbmRpbmdUaW1lc3RhbXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ1N0b3JlcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGlzYWJsZSBvbiBTYWZhcmkgdW50aWwgd2UgZmlndXJlIG91dCB3aHkgcGVyZm9ybWFuY2UgaXMgdGVycmlibGUuXHJcbiAgICAvLyBEaXNhYmxlIG9uIE5vZGUuanMgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGNhY2hlIGxvY2FsbHkgb24gdGhlIHNlcnZlciBzaWRlXHJcbiAgICAvLyBEaXNhYmxlIG9uIE1vYmlsZSB1bnRpbCB3ZSBkZWNpZGUgaWYgd2Ugd2FudCB0aGUgcGVyZm9ybWFuY2UgaGl0IHRoZXJlLlxyXG4gICAgX2lzRGJEaXNhYmxlZChmb3JjZURpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZm9yY2VEaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICBpc05vZGVKUygpIHx8XHJcbiAgICAgICAgICAgIGlzU2FmYXJpKCkgfHxcclxuICAgICAgICAgICAgaXNNb2JpbGVEZXZpY2UoKSB8fFxyXG4gICAgICAgICAgICB0eXBlb2YgaW5kZXhlZERCID09PSBcInVuZGVmaW5lZFwiXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBub3RpZnlQZW5kaW5nQ2FsbGJhY2tzKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrcy5mb3JFYWNoKGNiID0+IGNiKGVycm9yLCB0aGlzLmRiKSk7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW4oY2IpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGJEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBjYiAmJiBjYigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0NhbGwgYmFjayBpbW1lZGlhdGVseSBpZiB3ZSBhcmUgYWxyZWFkeSBvcGVuXHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XHJcbiAgICAgICAgICAgIGNiICYmIGNiKG51bGwsIHRoaXMuZGIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYiAmJiB0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2goY2IpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcGVuaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub3BlbmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vT3BlbiB0aGUgSW5kZXhlZERiIGRhdGFiYXNlIGNvbm5lY3Rpb25cclxuICAgICAgICBsZXQgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKERCX05BTUUsIDEpO1xyXG5cclxuICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBvcGVuIG9yIGNyZWF0ZSBjYWNoZSBkYXRhYmFzZS5cIik7XHJcbiAgICAgICAgICAgIHRoaXMuZGJEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZ5UGVuZGluZ0NhbGxiYWNrcyhldmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vcGVuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kYi5vbmVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRGF0YWJhc2UgZXJyb3JcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmeVBlbmRpbmdDYWxsYmFja3MoKTtcclxuXHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgIHRoaXMuc2l6ZSgoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGIgdXBncmFkZVwiLCB0aGlzLnN0b3JlTmFtZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBJREJEYXRhYmFzZSBpbnRlcmZhY2VcclxuICAgICAgICAgICAgbGV0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGF0YWJhc2Ugc2NoZW1hXHJcbiAgICAgICAgICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKENPTlRFTlRfU1RPUkUpO1xyXG4gICAgICAgICAgICBsZXQgb3MgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShDT05URU5UX1NUT1JFX0xSVSk7XHJcbiAgICAgICAgICAgIG9zLmNyZWF0ZUluZGV4KENPTlRFTlRfU1RPUkVfTFJVK1wiLWluZGV4XCIsIFwidFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZGVsZXRlT2xkKGNhbGxiYWNrKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kYikge1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kZWxldGVJblByb2dyZXNzKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZGVsZXRlSW5Qcm9ncmVzcyA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBob3dNYW55ID0gMjAwO1xyXG5cclxuICAgICAgICAvL0F2b2lkIGRlbGV0aW5nIHN0dWZmIHRoYXQgd2FzIGxhc3QgdXNlZCBhIHNob3J0IHdoaWxlIGFnbywgYnkgdXNpbmcgYSByYW5nZSBxdWVyeVxyXG4gICAgICAgIGxldCB1cHBlckJvdW5kT3BlbktleVJhbmdlID0gSURCS2V5UmFuZ2UudXBwZXJCb3VuZChEYXRlLm5vdygpIC0gMzAwICogMTAwMCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGxldCBoYXNoZXMgPSBbXTtcclxuXHJcbiAgICAgICAgbGV0IG9iamVjdFN0b3JlID0gdGhpcy5kYi50cmFuc2FjdGlvbihbdGhpcy5zdG9yZU5hbWVUaW1lc3RhbXBdLyosIFwicmVhZHdyaXRlXCIqLykub2JqZWN0U3RvcmUodGhpcy5zdG9yZU5hbWVUaW1lc3RhbXApO1xyXG5cclxuICAgICAgICBsZXQgaW5kZXggPSBvYmplY3RTdG9yZS5pbmRleCh0aGlzLnN0b3JlTmFtZVRpbWVzdGFtcCArIFwiLWluZGV4XCIpO1xyXG5cclxuICAgICAgICBpbmRleC5vcGVuQ3Vyc29yKHVwcGVyQm91bmRPcGVuS2V5UmFuZ2UpLm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICAgICAgaWYgKGN1cnNvciAmJiBoYXNoZXMubGVuZ3RoIDwgaG93TWFueSkge1xyXG4gICAgICAgICAgICAgICAgaGFzaGVzLnB1c2goY3Vyc29yLnByaW1hcnlLZXkpO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChoYXNoZXMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEZWxldGluZyBvbGQgb2JqZWN0cy5cIiwgaGFzaGVzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uID0gdGhpcy5kYi50cmFuc2FjdGlvbih0aGlzLmJvdGhTdG9yZU5hbWVzLCBcInJlYWR3cml0ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEZWxldGUgZG9uZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmVycm9yID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRyYW5zYWN0aW9uIGVycm9yLlwiLCBldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBldmVudC50YXJnZXQuZXJyb3I7IC8vIERPTUVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGYWlsZWQgdG8gZGVsZXRlIGNhY2hlZCBvYmplY3RzXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG9iamVjdFN0b3JlTWFpbiA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuc3RvcmVOYW1lKTtcclxuICAgICAgICAgICAgICAgIGxldCBvYmplY3RTdG9yZVRpbWVzdGFtcCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuc3RvcmVOYW1lVGltZXN0YW1wKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8aGFzaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmVNYWluLmRlbGV0ZShoYXNoZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlVGltZXN0YW1wLmRlbGV0ZShoYXNoZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG5cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZsdXNoKGNiKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nU3RvcmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYiAmJiBjYigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMud3JpdGVUcmFuc2FjdGlvbikge1xyXG5cclxuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uID0gdGhpcy5kYi50cmFuc2FjdGlvbih0aGlzLmJvdGhTdG9yZU5hbWVzLCBcInJlYWR3cml0ZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYikge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbiBjb21wbGV0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjYigpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRyYW5zYWN0aW9uIGVycm9yLlwiLCBldmVudCk7XHJcbiAgICAgICAgICAgICAgICBjYiAmJiBjYihldmVudC50YXJnZXQuZXJyb3IpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gZXZlbnQudGFyZ2V0LmVycm9yOyAvLyBET01FcnJvclxyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdRdW90YUV4Y2VlZGVkRXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlF1b3RhIGV4Y2VlZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlT2xkKCgpID0+IHt9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYiAmJiBjYihldmVudC50YXJnZXQuZXJyb3IpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy53cml0ZVRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5wZW5kaW5nU3RvcmVzLmxlbmd0aDsgaSs9Mikge1xyXG5cclxuICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLnBlbmRpbmdTdG9yZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5wZW5kaW5nU3RvcmVzW2krMV07XHJcblxyXG4gICAgICAgICAgICBsZXQgb2JqZWN0U3RvcmUgPSB0aGlzLndyaXRlVHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5zdG9yZU5hbWUpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHN0b3JlQmxvYiA9IG9iamVjdFN0b3JlLnB1dChkYXRhLCBoYXNoKTtcclxuXHJcbiAgICAgICAgICAgIHN0b3JlQmxvYi5vbmVycm9yID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiT2JqZWN0IHN0b3JlIGVycm9yLlwiLCBldmVudCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wU3RvcmUgPSB0aGlzLndyaXRlVHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5zdG9yZU5hbWVUaW1lc3RhbXApO1xyXG4gICAgICAgICAgICB0aW1lc3RhbXBTdG9yZS5wdXQoe3Q6RGF0ZS5ub3coKX0sIGhhc2gpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ1N0b3JlcyA9IFtdO1xyXG5cclxuICAgICAgICAvL1RPRE86IHJldXNlIHRoaXMgdHJhbnNhY3Rpb24gZm9yIGxvbmdlclxyXG4gICAgICAgIHRoaXMud3JpdGVUcmFuc2FjdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHN0b3JlKGhhc2gsIGRhdGEsIGNiKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kYikge1xyXG4gICAgICAgICAgICBjYiAmJiBjYigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNb3N0IG9mIHRoZSB0aW1lIChpLmUuIGFsd2F5cykgd2UncmUgZ2l2ZW4gYSBUeXBlZEFycmF5IHRoYXQncyBhIHZpZXcgb24gYSBsYXJnZXIgQXJyYXlCdWZmZXI6XHJcbiAgICAgICAgLy8gVGhlIGdlb21zL21hdGVyaWFscyBjYW1lIHRocm91Z2ggYSB3ZWJzb2NrZXQgYW5kIHRoZSBBcnJheUJ1ZmZlciBjb250YWlucyB0aGUgd2hvbGUgbWVzc2FnZS5cclxuICAgICAgICAvLyBFdmVuIGdlb21zIHRoYXQgZGlkIG5vdCBhcnJpdmUgaW4gYSBiYXRjaCBjb250YWluIGEgaGVhZGVyIHRoYXQncyBub3QgZ2VvbWV0cnkgZGF0YS5cclxuICAgICAgICAvLyBUbyBwcmV2ZW50IHRoZSBlbnRpcmUgQXJyYXlCdWZmZXIgYmVpbmcgc2VyaWFsaXplZCBpbnRvIHRoZSBjYWNoZSwgY3JlYXRlIGEgY29weSB3aXRoIGp1c3QgdGhlIHBhcnQgd2UncmUgaW50ZXJlc3RlZCBpbi5cclxuICAgICAgICAvLyBUaGlzIGFsc28ga2VlcHMgdGhlIGRhdGEgYWxpdmUgd2hpbGUgdGhlIG9yaWdpbmFsIEFycmF5QnVmZmVyIG1pZ2h0IGJlY29tZSB1bnVzYWJsZSAoc2VlIHRyYW5zZmVyTGlzdCBpbiBPdGdMb2FkV29ya2VyKVxyXG4gICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKCk7XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ1N0b3Jlcy5wdXNoKGhhc2gpO1xyXG4gICAgICAgIHRoaXMucGVuZGluZ1N0b3Jlcy5wdXNoKGRhdGEpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nU3RvcmVzLmxlbmd0aCA8IDIwMCB8fCB0aGlzLmRlbGV0ZUluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgY2IgJiYgY2IoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mbHVzaChjYik7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZsdXNoVGltZXN0YW1wcyhjYikge1xyXG5cclxuICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPSB0aGlzLmRiLnRyYW5zYWN0aW9uKFt0aGlzLnN0b3JlTmFtZVRpbWVzdGFtcF0sIFwicmVhZHdyaXRlXCIpO1xyXG5cclxuICAgICAgICBpZiAoY2IpIHtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uIGNvbXBsZXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgY2IoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRyYW5zYWN0aW9uIGVycm9yLlwiLCBldmVudCk7XHJcbiAgICAgICAgICAgIGNiICYmIGNiKGV2ZW50LnRhcmdldC5lcnJvcik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBldmVudC50YXJnZXQuZXJyb3I7IC8vIERPTUVycm9yXHJcbiAgICAgICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnUXVvdGFFeGNlZWRlZEVycm9yJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJRdW90YSBleGNlZWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlT2xkKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYiAmJiBjYihldmVudC50YXJnZXQuZXJyb3IpO1xyXG4gICAgICAgIH07XHJcblxyXG5cclxuICAgICAgICBsZXQgdGltZXN0YW1wU3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLnN0b3JlTmFtZVRpbWVzdGFtcCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGhhc2ggaW4gdGhpcy5wZW5kaW5nVGltZXN0YW1wVXBkYXRlcykge1xyXG4gICAgICAgICAgICB0aW1lc3RhbXBTdG9yZS5wdXQoe3Q6IHRoaXMucGVuZGluZ1RpbWVzdGFtcFVwZGF0ZXNbaGFzaF19LCBoYXNoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ1RpbWVzdGFtcFVwZGF0ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnBlbmRpbmdUaW1lc3RhbXBDb3VudCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgX2NyZWF0ZVJlYWRUcmFuc2FjdGlvbigpIHtcclxuICAgICAgICAvL1dlIHRyeSB0byBrZWVwIHRoZSByZWFkIHRyYW5zYWN0aW9uIGFsaXZlIGJ5IHJldXNpbmcgaXRcclxuICAgICAgICAvL2ZvciBhbGwgbmV3IHJlcXVlc3RzLiBJZiB0aGV5IGNvbWUgZmFzdCBlbm91Z2gsIHRoZSB0cmFuc2FjdGlvblxyXG4gICAgICAgIC8vd2lsbCBzdGF5IGFsaXZlLiBJZiBpdCBjb21wbGV0ZXMsIHdlIHdpbGwgY3JlYXRlIGEgbmV3IG9uZS5cclxuICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPSB0aGlzLnJlYWRUcmFuc2FjdGlvbiA9IHRoaXMuZGIudHJhbnNhY3Rpb24odGhpcy5zdG9yZU5hbWUpO1xyXG5cclxuICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVhZFRyYW5zYWN0aW9uID0gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRyYW5zYWN0aW9uIGVycm9yLlwiLCBldmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVhZFRyYW5zYWN0aW9uID0gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVHJhbnNhY3Rpb24gYWJvcnRcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlYWRUcmFuc2FjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoaGFzaCwgY2IpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3BlbmluZykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVHJpZWQgdG8gZ2V0IEluZGV4ZWREYiByZXNvdXJjZSB3aGlsZSBkYXRhYmFzZSB3YXMgc3RpbGwgb3BlbmluZ1wiKTtcclxuICAgICAgICAgICAgY2IoLTEsIG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGIpIHtcclxuICAgICAgICAgICAgY2IoLTEsIG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1dlIHRyeSB0byByZXVzZSB0aGUgc2FtZSByZWFkIHRyYW5zYWN0aW9uIGZvciBhcyBsb25nIGFzIGl0IHdpbGwgbGV0IHVzXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRUcmFuc2FjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVSZWFkVHJhbnNhY3Rpb24oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXE7XHJcbiAgICAgICAgLy9UaGlzIGNhbiBmYWlsIGlmIHRoZSB0cmFuc2FjdGlvbiBoYXMgZ29uZSBpbmFjdGl2ZVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlcSA9IHRoaXMucmVhZFRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuc3RvcmVOYW1lKS5nZXQoaGFzaCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVSZWFkVHJhbnNhY3Rpb24oKTtcclxuICAgICAgICAgICAgcmVxID0gdGhpcy5yZWFkVHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5zdG9yZU5hbWUpLmdldChoYXNoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vU29tZWhvdyB3ZSBzb21ldGltZXMgZW5kIHVwIGdldHRpbmcgbnVsbCBmb3IgYW4gZXhpc3Rpbmcga2V5XHJcbiAgICAgICAgICAgIC8vc28gd2UgZm9yY2UgcmVsb2FkXHJcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0LnJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgY2IoLTEsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBldmVudC50YXJnZXQucmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgY2IobnVsbCwgZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAvL1JlbWVtYmVyIHRoZSBuZXcgdGltZXN0YW1wIGZvciB0aGlzIGhhc2gsIGJ1dCBkb24ndCB1cGRhdGVcclxuICAgICAgICAgICAgLy9pdCBpbiB0aGUgbXJ1IHRhYmxlIGltbWVkaWF0ZWx5LCB0byBhdm9pZCBzbG93aW5nIGRvd24gbW9kZWwgbG9hZFxyXG4gICAgICAgICAgICAvL3dpdGggYSB3cml0ZSB0cmFuc2FjdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGltZXN0YW1wVXBkYXRlc1toYXNoXSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ1RpbWVzdGFtcENvdW50Kys7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVxLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY2IoZXZlbnQudGFyZ2V0LmVycm9yQ29kZSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZsdXNoU3RvcmVzQW5kVGltZXN0YW1wcygpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRiKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZmx1c2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVXBkYXRpbmcgYWxsIHRpbWVzdGFtcHNcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmx1c2hUaW1lc3RhbXBzKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzaXplKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRiKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzaXplID0gMDtcclxuICAgICAgICBsZXQgaXRlbXMgPSAwO1xyXG5cclxuICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPSB0aGlzLmRiLnRyYW5zYWN0aW9uKFt0aGlzLnN0b3JlTmFtZV0pXHJcbiAgICAgICAgICAgIC5vYmplY3RTdG9yZSh0aGlzLnN0b3JlTmFtZSlcclxuICAgICAgICAgICAgLm9wZW5DdXJzb3IoKTtcclxuXHJcbiAgICAgICAgdHJhbnNhY3Rpb24ub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAoY3Vyc29yKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RvcmVkT2JqZWN0ID0gY3Vyc29yLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc2l6ZSArPSBzdG9yZWRPYmplY3QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgaXRlbXMrKztcclxuICAgICAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge3NpemU6IHNpemUsIGl0ZW1zOiBpdGVtc30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGVzdGltYXRlQ2FjaGVkSGFzaENvdW50KGNiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3BlbmluZykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVHJpZWQgdG8gZ2V0IEluZGV4ZWREYiByZXNvdXJjZSB3aGlsZSBkYXRhYmFzZSB3YXMgc3RpbGwgb3BlbmluZ1wiKTtcclxuICAgICAgICAgICAgY2IodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRiKSB7XHJcbiAgICAgICAgICAgIGNiKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0cmFuc2FjdGlvbiA9IHRoaXMuZGIudHJhbnNhY3Rpb24odGhpcy5zdG9yZU5hbWVUaW1lc3RhbXApO1xyXG4gICAgICAgIGxldCByZXE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVxID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5zdG9yZU5hbWVUaW1lc3RhbXApLm9wZW5LZXlDdXJzb3IoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNiKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjb3VudCA9IDI7XHJcbiAgICAgICAgY29uc3QgcHJvYmVQb3NpdGlvbiA9IDEwMDA7XHJcbiAgICAgICAgcmVxLm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAoY3Vyc29yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoLS1jb3VudD4wKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNhbGw6IGFkdmFuY2UgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbiBpbiB0aGUgc29ydGVkIG9yZGVyIG9mIGhhc2hlc1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvci5hZHZhbmNlKHByb2JlUG9zaXRpb24tMSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyBcclxuICAgICAgICAgICAgICAgICAgICAvLyBzZWNvbmQgY2FsbDogY2hlY2sga2V5IGFuZCBlc3RpbWF0ZSB0b3RhbCBoYXNoIGNvdW50XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVzdGltYXRpb24gYXNzdW1lcyB1bmlmb3JtIGhhc2ggZGlzdHJpYnV0aW9uIChtZDUoKSBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaCBmcm9tIHNvbWUgYmxvY2sgb2YgZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgc29ydGVkIGFjY2VzcyB0aHJvdWdoIEluZGV4RGJcclxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB0YWtlcyB0aGUgZmlyc3QgdHdvIGJ5dGVzIG9mIHRoZSBoYXNoIGF0IHBvc2l0aW9uIGBwcm9iZVBvc2l0aW9uYCBhbmQgZXh0cmFwb2xhdGVzIHRoZSBwb3NpdGlvbiBmb3IgNjU1MzYgYXMgdGhlIGZpcnN0IHR3byBieXRlcyBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFdvcmQgPSBjdXJzb3Iua2V5LmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXN0aW1hdGVkQ291bnQgPSBwcm9iZVBvc2l0aW9uICogNjU1MzYvZmlyc3RXb3JkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNiKGVzdGltYXRlZENvdW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBkbyBhbnl0aGluZyBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGFuIGltbWVkaWF0ZWx5IHVuZGVmaW5lZCBjdXJzb3IgbWVhbnMgYW4gZW1wdHkgY2FjaGVcclxuICAgICAgICAgICAgICAgIC8vIGFuIHVuZGVmaW5lZCBjdXJzb3IgYWZ0ZXIgYWR2YW5jaW5nIHRvIGBwcm9iZVBvc2l0aW9uYCBtZWFucyBsZXNzIHRoYW4gcHJvYmVQb3NpdGlvbiBlbnRyaWVzXHJcbiAgICAgICAgICAgICAgICBjYihjb3VudCA9PSAyID8gMCA6IChjb3VudCA9PSAxID8gcHJvYmVQb3NpdGlvbiA6IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVxLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY2IodW5kZWZpbmVkKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRBbGxDYWNoZWRIYXNoZXMoY2IpIHtcclxuICAgICAgICBpZiAodGhpcy5vcGVuaW5nKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUcmllZCB0byBnZXQgSW5kZXhlZERiIHJlc291cmNlIHdoaWxlIGRhdGFiYXNlIHdhcyBzdGlsbCBvcGVuaW5nXCIpO1xyXG4gICAgICAgICAgICBjYihbXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kYikge1xyXG4gICAgICAgICAgICBjYihbXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlYWRpbmcgYWxsIGhhc2hlcyBmcm9tIHRoZSB0aW1lc3RhbXAgc3RvcmUgaXMgZmFzdGVyIHRoYW4gZnJvbSB0aGUgY29udGVudCBzdG9yZVxyXG4gICAgICAgIGxldCB0cmFuc2FjdGlvbiA9IHRoaXMuZGIudHJhbnNhY3Rpb24odGhpcy5zdG9yZU5hbWVUaW1lc3RhbXApO1xyXG4gICAgICAgIGxldCByZXE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVxID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5zdG9yZU5hbWVUaW1lc3RhbXApLmdldEFsbEtleXMoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNiKFtdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVxLm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBjYihldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXEub25lcnJvciA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBjYihbXSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXSwibmFtZXMiOlsiaXNOb2RlSlMiLCJpc01vYmlsZURldmljZSIsImlzU2FmYXJpIiwiREJfTkFNRSIsIkNPTlRFTlRfU1RPUkUiLCJDT05URU5UX1NUT1JFX0xSVSIsIkNMRUFOVVBfVEhSRVNIT0xEIiwiY2xlYXJJbmRleGVkRGJJZkl0c0xhcmdlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwiZGJzIiwiaW5kZXhlZERCIiwiZGF0YWJhc2VzIiwiZmluZCIsIl9yZWYiLCJuYW1lIiwicmVxdWVzdCIsIm9wZW4iLCJvbmVycm9yIiwiZXZlbnQiLCJjb25zb2xlIiwiZXJyb3IiLCJvbnN1Y2Nlc3MiLCJkYiIsInRhcmdldCIsInJlc3VsdCIsInRyYW5zYWN0aW9uIiwicmVxIiwib2JqZWN0U3RvcmUiLCJjb3VudCIsImxvZyIsImNsb3NlIiwiZGVsZXRlRGF0YWJhc2UiLCJMb2NhbERiQ2FjaGUiLCJjb25zdHJ1Y3RvciIsImZvcmNlRGlzYWJsZWQiLCJyZWFkVHJhbnNhY3Rpb24iLCJsb2FkZWQiLCJvcGVuaW5nIiwiZGJEaXNhYmxlZCIsIl9pc0RiRGlzYWJsZWQiLCJzdG9yZU5hbWUiLCJzdG9yZU5hbWVUaW1lc3RhbXAiLCJib3RoU3RvcmVOYW1lcyIsInBlbmRpbmdUaW1lc3RhbXBVcGRhdGVzIiwicGVuZGluZ1RpbWVzdGFtcENvdW50IiwicGVuZGluZ1N0b3JlcyIsIl9wZW5kaW5nQ2FsbGJhY2tzIiwibm90aWZ5UGVuZGluZ0NhbGxiYWNrcyIsImZvckVhY2giLCJjYiIsInB1c2giLCJvbnVwZ3JhZGVuZWVkZWQiLCJjcmVhdGVPYmplY3RTdG9yZSIsIm9zIiwiY3JlYXRlSW5kZXgiLCJ1bmlxdWUiLCJkZWxldGVPbGQiLCJjYWxsYmFjayIsImRlbGV0ZUluUHJvZ3Jlc3MiLCJob3dNYW55IiwidXBwZXJCb3VuZE9wZW5LZXlSYW5nZSIsIklEQktleVJhbmdlIiwidXBwZXJCb3VuZCIsIkRhdGUiLCJub3ciLCJoYXNoZXMiLCJpbmRleCIsIm9wZW5DdXJzb3IiLCJjdXJzb3IiLCJsZW5ndGgiLCJwcmltYXJ5S2V5IiwiY29udGludWUiLCJvbmNvbXBsZXRlIiwib25hYm9ydCIsIm9iamVjdFN0b3JlTWFpbiIsIm9iamVjdFN0b3JlVGltZXN0YW1wIiwiaSIsImRlbGV0ZSIsImZsdXNoIiwid3JpdGVUcmFuc2FjdGlvbiIsImhhc2giLCJkYXRhIiwic3RvcmVCbG9iIiwicHV0IiwidGltZXN0YW1wU3RvcmUiLCJ0Iiwic3RvcmUiLCJzbGljZSIsImZsdXNoVGltZXN0YW1wcyIsIl9jcmVhdGVSZWFkVHJhbnNhY3Rpb24iLCJ3YXJuIiwiZ2V0IiwiZSIsImVycm9yQ29kZSIsImZsdXNoU3RvcmVzQW5kVGltZXN0YW1wcyIsImVyciIsInNpemUiLCJpdGVtcyIsInN0b3JlZE9iamVjdCIsInZhbHVlIiwiZXN0aW1hdGVDYWNoZWRIYXNoQ291bnQiLCJ1bmRlZmluZWQiLCJvcGVuS2V5Q3Vyc29yIiwicHJvYmVQb3NpdGlvbiIsImFkdmFuY2UiLCJmaXJzdFdvcmQiLCJrZXkiLCJjaGFyQ29kZUF0IiwiZXN0aW1hdGVkQ291bnQiLCJhYm9ydCIsInJlYWRBbGxDYWNoZWRIYXNoZXMiLCJnZXRBbGxLZXlzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/otg/LocalDbCache.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/otg/OtgFragInfo.js": /*!***************************************************!*\ !*** ./src/file-loaders/lmvtk/otg/OtgFragInfo.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ OtgFragInfo: () => (/* binding */ OtgFragInfo)\n/* harmony export */ });\n/* harmony import */ var _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../wgs/scene/LmvBox3 */ \"./src/wgs/scene/LmvBox3.js\");\n\n\nfunction setFromArray(array, offset) {\n\n this.min.x = array[offset];\n this.min.y = array[offset + 1];\n this.min.z = array[offset + 2];\n\n this.max.x = array[offset + 3];\n this.max.y = array[offset + 4];\n this.max.z = array[offset + 5];\n}\n\nfunction copyToArray(array, offset) {\n\n array[offset] = this.min.x;\n array[offset + 1] = this.min.y;\n array[offset + 2] = this.min.z;\n\n array[offset + 3] = this.max.x;\n array[offset + 4] = this.max.y;\n array[offset + 5] = this.max.z;\n}\n\n//Overload of the default FragInfo, used with OTG-specific fragments_extra data file\n//to initialize the BVH spatial index.\nfunction OtgFragInfo(data, loadContext) {\n\n var byteStride = data[1] << 8 | data[0];\n //var version=d ata[3] << 8 | data[2];\n\n if (!byteStride)\n byteStride=7 * 4;\n\n this.boxStride=b yteStride / 4;\n this.count=d ata.byteLength / byteStride - 1;\n\n //Global offset set by the viewer loader client\n let globalOffset=l oadContext.globalOffset || { x: 0, y: 0, z: 0 };\n\n //Internal double precision offset used in the OTG file format (always set as of November 2018)\n let fo=l oadContext.fragmentTransformsOffset || { x: 0, y: 0, z: 0 };\n\n if (this.count) {\n //make views directly into the first data record (skipping the header record)\n this.boxes=n ew Float32Array(data.buffer, byteStride);\n this.flags=n ew Int32Array(data.buffer, byteStride);\n\n //apply placement transform if given\n var boxes=t his.boxes;\n\n if (loadContext.placementTransform) {\n var tmpBox=n ew _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_0__.LmvBox3();\n var offset=0 ;\n for (let i=0 ; i < this.count; i++, offset +=t his.boxStride) {\n\n setFromArray.call(tmpBox, boxes, offset);\n\n //Add back the built-in OTG offset\n tmpBox.min.x +=f o.x;\n tmpBox.min.y +=f o.y;\n tmpBox.min.z +=f o.z;\n tmpBox.max.x +=f o.x;\n tmpBox.max.y +=f o.y;\n tmpBox.max.z +=f o.z;\n\n\n tmpBox.applyMatrix4(loadContext.placementWithOffset); //this will apply both placement and global offset at once\n\n copyToArray.call(tmpBox, boxes, offset);\n }\n } else {\n\n var ox=f o.x - globalOffset.x;\n var oy=f o.y - globalOffset.y;\n var oz=f o.z - globalOffset.z;\n\n //Faster code path when we only have global offset and no placement transform\n for (let i=0 , offset=0 ; i < this.count; i++, offset +=t his.boxStride) {\n\n boxes[offset] +=o x;\n boxes[offset + 1] +=o y;\n boxes[offset + 2] +=o z;\n\n boxes[offset + 3] +=o x;\n boxes[offset + 4] +=o y;\n boxes[offset + 5] +=o z;\n }\n }\n }\n\n this.hasPolygonCounts=t rue;\n this.wantSort=f alse;\n}\n\nOtgFragInfo.prototype.getCount=f unction () {\n return this.count;\n};\n\nOtgFragInfo.prototype.isTransparent=f unction (i) {\n var flags=t his.flags[i * this.boxStride + 6];\n return !!(flags & 0x01000000);\n};\n\nOtgFragInfo.prototype.getPolygonCount=f unction (i) {\n var flags=t his.flags[i * this.boxStride + 6];\n return flags & 0xffffff;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL290Zy9PdGdGcmFnSW5mby5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFtRDs7QUFFbkQsU0FBU0MsWUFBWUEsQ0FBQ0MsS0FBSyxFQUFFQyxNQUFNLEVBQUc7O0VBRXJDLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxDQUFDLEdBQUdILEtBQUssQ0FBQ0MsTUFBTSxDQUFDO0VBQzFCLElBQUksQ0FBQ0MsR0FBRyxDQUFDRSxDQUFDLEdBQUdKLEtBQUssQ0FBQ0MsTUFBTSxHQUFDLENBQUMsQ0FBQztFQUM1QixJQUFJLENBQUNDLEdBQUcsQ0FBQ0csQ0FBQyxHQUFHTCxLQUFLLENBQUNDLE1BQU0sR0FBQyxDQUFDLENBQUM7O0VBRTVCLElBQUksQ0FBQ0ssR0FBRyxDQUFDSCxDQUFDLEdBQUdILEtBQUssQ0FBQ0MsTUFBTSxHQUFDLENBQUMsQ0FBQztFQUM1QixJQUFJLENBQUNLLEdBQUcsQ0FBQ0YsQ0FBQyxHQUFHSixLQUFLLENBQUNDLE1BQU0sR0FBQyxDQUFDLENBQUM7RUFDNUIsSUFBSSxDQUFDSyxHQUFHLENBQUNELENBQUMsR0FBR0wsS0FBSyxDQUFDQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO0FBQzdCOztBQUVBLFNBQVNNLFdBQVdBLENBQUNQLEtBQUssRUFBRUMsTUFBTSxFQUFFOztFQUVuQ0QsS0FBSyxDQUFDQyxNQUFNLENBQUMsR0FBSyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0MsQ0FBQztFQUM1QkgsS0FBSyxDQUFDQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDQyxHQUFHLENBQUNFLENBQUM7RUFDNUJKLEtBQUssQ0FBQ0MsTUFBTSxHQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ0MsR0FBRyxDQUFDRyxDQUFDOztFQUU1QkwsS0FBSyxDQUFDQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDSyxHQUFHLENBQUNILENBQUM7RUFDNUJILEtBQUssQ0FBQ0MsTUFBTSxHQUFDLENB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RGIsV0FBVyxDQUFDMEIsU0FBUyxDQUFDRyxlQUFlLEdBQUcsVUFBU1osQ0FBQyxFQUFFO0VBQ25ELElBQUlKLEtBQUssR0FBRyxJQUFJLENBQUNBLEtBQUssQ0FBQ0ksQ0FBQyxHQUFDLElBQUksQ0FBQ2IsU0FBUyxHQUFDLENBQUMsQ0FBQztFQUMxQyxPQUFPUyxLQUFLLEdBQUcsUUFBUTtBQUN4QixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9vdGcvT3RnRnJhZ0luZm8uanM/NTA4ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xtdkJveDN9IGZyb20gXCIuLi8uLi8uLi93Z3Mvc2NlbmUvTG12Qm94M1wiO1xuXG5mdW5jdGlvbiBzZXRGcm9tQXJyYXkoYXJyYXksIG9mZnNldCApIHtcblxuXHR0aGlzLm1pbi54ID0gYXJyYXlbb2Zmc2V0XTtcblx0dGhpcy5taW4ueSA9IGFycmF5W29mZnNldCsxXTtcblx0dGhpcy5taW4ueiA9IGFycmF5W29mZnNldCsyXTtcblxuXHR0aGlzLm1heC54ID0gYXJyYXlbb2Zmc2V0KzNdO1xuXHR0aGlzLm1heC55ID0gYXJyYXlbb2Zmc2V0KzRdO1xuXHR0aGlzLm1heC56ID0gYXJyYXlbb2Zmc2V0KzVdO1xufVxuXG5mdW5jdGlvbiBjb3B5VG9BcnJheShhcnJheSwgb2Zmc2V0KSB7XG5cblx0YXJyYXlbb2Zmc2V0XSAgID0gdGhpcy5taW4ueDtcblx0YXJyYXlbb2Zmc2V0KzFdID0gdGhpcy5taW4ueTtcblx0YXJyYXlbb2Zmc2V0KzJdID0gdGhpcy5taW4uejtcblxuXHRhcnJheVtvZmZzZXQrM10gPSB0aGlzLm1heC54O1xuXHRhcnJheVtvZmZzZXQrNF0gPSB0aGlzLm1heC55O1xuXHRhcnJheVtvZmZzZXQrNV0gPSB0aGlzLm1heC56O1xufVxuXG4vL092ZXJsb2FkIG9mIHRoZSBkZWZhdWx0IEZyYWdJbmZvLCB1c2VkIHdpdGggT1RHLXNwZWNpZmljIGZyYWdtZW50c19leHRyYSBkYXRhIGZpbGVcbi8vdG8gaW5pdGlhbGl6ZSB0aGUgQlZIIHNwYXRpYWwgaW5kZXguXG5leHBvcnQgZnVuY3Rpb24gT3RnRnJhZ0luZm8oZGF0YSwgbG9hZENvbnRleHQpIHtcblxuXHR2YXIgYnl0ZVN0cmlkZSA9IGRhdGFbMV0gPDwgOCB8IGRhdGFbMF07XG5cdC8vdmFyIHZlcnNpb24gPSBkYXRhWzNdIDw8IDggfCBkYXRhWzJdO1xuXG5cdGlmICghYnl0ZVN0cmlkZSlcblx0XHRieXRlU3RyaWRlID0gNyo0O1xuXG5cdHRoaXMuYm94U3RyaWRlID0gYnl0ZVN0cmlkZSAvIDQ7XG5cdHRoaXMuY291bnQgPSBkYXRhLmJ5dGVMZW5ndGggLyBieXRlU3RyaWRlIC0gMTtcblxuXHQvL0dsb2JhbCBvZmZzZXQgc2V0IGJ5IHRoZSB2aWV3ZXIgbG9hZGVyIGNsaWVudFxuXHRsZXQgZ2xvYmFsT2Zmc2V0ID0gbG9hZENvbnRleHQuZ2xvYmFsT2Zmc2V0IHx8IHsgeDowLCB5OjAsIHo6MCB9O1xuXG5cdC8vSW50ZXJuYWwgZG91YmxlIHByZWNpc2lvbiBvZmZzZXQgdXNlZCBpbiB0aGUgT1RHIGZpbGUgZm9ybWF0IChhbHdheXMgc2V0IGFzIG9mIE5vdmVtYmVyIDIwMTgpXG5cdGxldCBmbyA9IGxvYWRDb250ZXh0LmZyYWdtZW50VHJhbnNmb3Jtc09mZnNldCB8fCB7IHg6MCwgeTowLCB6OjAgfTtcblxuXHRpZiAodGhpcy5jb3VudCkge1xuXHRcdC8vbWFrZSB2aWV3cyBkaXJlY3RseSBpbnRvIHRoZSBmaXJzdCBkYXRhIHJlY29yZCAoc2tpcHBpbmcgdGhlIGhlYWRlciByZWNvcmQpXG5cdFx0dGhpcy5ib3hlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS5idWZmZXIsIGJ5dGVTdHJpZGUpO1xuXHRcdHRoaXMuZmxhZ3MgPSBuZXcgSW50MzJBcnJheShkYXRhLmJ1ZmZlciwgYnl0ZVN0cmlkZSk7XG5cblx0XHQvL2FwcGx5IHBsYWNlbWVudCB0cmFuc2Zvcm0gaWYgZ2l2ZW5cblx0XHR2YXIgYm94ZXMgPSB0aGlzLmJveGVzO1xuXG5cdFx0aWYgKGxvYWRDb250ZXh0LnBsYWNlbWVudFRyYW5zZm9ybSkge1xuXHRcdFx0dmFyIHRtcEJveCA9IG5ldyBMbXZCb3gzKCk7XG5cdFx0XHR2YXIgb2Zmc2V0ID0gMDtcblx0XHRcdGZvciAobGV0IGk9MDsgaTx0aGlzLmNvdW50OyBpKyssIG9mZnNldCArPSB0aGlzLmJveFN0cmlkZSkge1xuXG5cdFx0XHRcdHNldEZyb21BcnJheS5jYWxsKHRtcEJveCwgYm94ZXMsIG9mZnNldCk7XG5cblx0XHRcdFx0Ly9BZGQgYmFjayB0aGUgYnVpbHQtaW4gT1RHIG9mZnNldFxuXHRcdFx0XHR0bXBCb3gubWluLnggKz0gZm8ueDtcblx0XHRcdFx0dG1wQm94Lm1pbi55ICs9IGZvLnk7XG5cdFx0XHRcdHRtcEJveC5taW4ueiArPSBmby56O1xuXHRcdFx0XHR0bXBCb3gubWF4LnggKz0gZm8ueDtcblx0XHRcdFx0dG1wQm94Lm1heC55ICs9IGZvLnk7XG5cdFx0XHRcdHRtcEJveC5tYXgueiArPSBmby56O1xuXG5cblx0XHRcdFx0dG1wQm94LmFwcGx5TWF0cml4NChsb2FkQ29udGV4dC5wbGFjZW1lbnRXaXRoT2Zmc2V0KTsgLy90aGlzIHdpbGwgYXBwbHkgYm90aCBwbGFjZW1lbnQgYW5kIGdsb2JhbCBvZmZzZXQgYXQgb25jZVxuXG5cdFx0XHRcdGNvcHlUb0FycmF5LmNhbGwodG1wQm94LCBib3hlcywgb2Zmc2V0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR2YXIgb3ggPSBmby54IC0gZ2xvYmFsT2Zmc2V0Lng7XG5cdFx0XHR2YXIgb3kgPSBmby55IC0gZ2xvYmFsT2Zmc2V0Lnk7XG5cdFx0XHR2YXIgb3ogPSBmby56IC0gZ2xvYmFsT2Zmc2V0Lno7XG5cblx0XHRcdC8vRmFzdGVyIGNvZGUgcGF0aCB3aGVuIHdlIG9ubHkgaGF2ZSBnbG9iYWwgb2Zmc2V0IGFuZCBubyBwbGFjZW1lbnQgdHJhbnNmb3JtXG5cdFx0XHRmb3IgKGxldCBpPTAsIG9mZnNldD0wOyBpPHRoaXMuY291bnQ7IGkrKywgb2Zmc2V0ICs9IHRoaXMuYm94U3RyaWRlKSB7XG5cblx0XHRcdFx0Ym94ZXNbb2Zmc2V0ICBdICs9IG94O1xuXHRcdFx0XHRib3hlc1tvZmZzZXQrMV0gKz0gb3k7XG5cdFx0XHRcdGJveGVzW29mZnNldCsyXSArPSBvejtcblxuXHRcdFx0XHRib3hlc1tvZmZzZXQrM10gKz0gb3g7XG5cdFx0XHRcdGJveGVzW29mZnNldCs0XSArPSBveTtcblx0XHRcdFx0Ym94ZXNbb2Zmc2V0KzVdICs9IG96O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMuaGFzUG9seWdvbkNvdW50cyA9IHRydWU7XG5cdHRoaXMud2FudFNvcnQgPSBmYWxzZTtcbn1cblxuT3RnRnJhZ0luZm8ucHJvdG90eXBlLmdldENvdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnQ7XG59O1xuXG5PdGdGcmFnSW5mby5wcm90b3R5cGUuaXNUcmFuc3BhcmVudCA9IGZ1bmN0aW9uKGkpIHtcblx0dmFyIGZsYWdzID0gdGhpcy5mbGFnc1tpKnRoaXMuYm94U3RyaWRlKzZdO1xuXHRyZXR1cm4gISEoZmxhZ3MgJiAweDAxMDAwMDAwKTtcbn07XG5cbk90Z0ZyYWdJbmZvLnByb3RvdHlwZS5nZXRQb2x5Z29uQ291bnQgPSBmdW5jdGlvbihpKSB7XG5cdHZhciBmbGFncyA9IHRoaXMuZmxhZ3NbaSp0aGlzLmJveFN0cmlkZSs2XTtcblx0cmV0dXJuIGZsYWdzICYgMHhmZmZmZmY7XG59O1xuIl0sIm5hbWVzIjpbIkxtdkJveDMiLCJzZXRGcm9tQXJyYXkiLCJhcnJheSIsIm9mZnNldCIsIm1pbiIsIngiLCJ5IiwieiIsIm1heCIsImNvcHlUb0FycmF5IiwiT3RnRnJhZ0luZm8iLCJkYXRhIiwibG9hZENvbnRleHQiLCJieXRlU3RyaWRlIiwiYm94U3RyaWRlIiwiY291bnQiLCJieXRlTGVuZ3RoIiwiZ2xvYmFsT2Zmc2V0IiwiZm8iLCJmcmFnbWVudFRyYW5zZm9ybXNPZmZzZXQiLCJib3hlcyIsIkZsb2F0MzJBcnJheSIsImJ1ZmZlciIsImZsYWdzIiwiSW50MzJBcnJheSIsInBsYWNlbWVudFRyYW5zZm9ybSIsInRtcEJveCIsImkiLCJjYWxsIiwiYXBwbHlNYXRyaXg0IiwicGxhY2VtZW50V2l0aE9mZnNldCIsIm94Iiwib3kiLCJveiIsImhhc1BvbHlnb25Db3VudHMiLCJ3YW50U29ydCIsInByb3RvdHlwZSIsImdldENvdW50IiwiaXNUcmFuc3BhcmVudCIsImdldFBvbHlnb25Db3VudCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/otg/OtgFragInfo.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/otg/OtgGeomCodec.js ": /*!****************************************************!*\ !*** ./src/file-loaders/lmvtk/otg/OtgGeomCodec.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readLmvBufferGeom: ()=> (/* binding */ readLmvBufferGeom),\n/* harmony export */ serializeLmvBufferGeom: () => (/* binding */ serializeLmvBufferGeom)\n/* harmony export */ });\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../compat */ \"./src/compat.js\");\n/* harmony import */ var _common_InputStream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/InputStream */ \"./src/file-loaders/lmvtk/common/InputStream.js\");\n/* harmony import */ var _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../wgs/scene/LmvBox3 */ \"./src/wgs/scene/LmvBox3.js\");\n\n\n\n\n\n/*\nIntegers encoded in *little endian*\n\nMagic header: LMV0 (4 bytes)\nFlags: 2 bytes (isLine, isPoint, isWideLine, etc.)\nNum buffers: 1 byte\nNum attributes: 1 byte (attributes are fixed size)\nBuf Offsets (from beginning of data block, first buffer is always at 0, so is skipped): 4 bytes each\nAttributes: {\n\tName: 1 byte enum (Index, IndexEdges, Position, Normal, TextureUV, Color)\n\titemSize: 1/2 byte low nibble (must be 1,2,3 or 4)\n\titemType: 1/2 byte hi nibble (BYTE, SHORT, UBYTE, USHORT, FLOAT ...)\n\titemOffset: 1 byte (in bytes)\n\titemStride: 1 byte (stride in bytes)\n\tbuffer Idx: 1 bytes\n} (5 bytes each)\n\n(padding bytes to make data stream offset a multiple of 4)\n\nData: binary, concatenated vertex and index streams\n*/\n\nconst AttributeName = {\n Index: 0,\n IndexEdges: 1,\n Position: 2,\n Normal: 3,\n TextureUV: 4,\n Color: 5\n};\n\nconst AttributeType = {\n BYTE: 0,\n SHORT: 1,\n UBYTE: 2,\n USHORT: 3,\n\n BYTE_NORM: 4,\n SHORT_NORM: 5,\n UBYTE_NORM: 6,\n USHORT_NORM: 7,\n\n FLOAT: 8,\n INT: 9,\n UINT: 10\n //DOUBLE: 11\n};\n\n\nconst MeshFlags = {\n //NOTE: Lower two bits are NOT A BITMASK!!!\n TRIANGLES: 0,\n LINES: 1,\n POINTS: 2,\n WIDE_LINES: 3\n\n\n};\n\n\nconst LMV2OTGAttr = {\n \"position\": AttributeName.Position,\n \"normal\": AttributeName.Normal,\n \"index\": AttributeName.Index,\n \"indexlines\": AttributeName.IndexEdges,\n \"color\": AttributeName.Color\n};\n\nconst OTG2LMVAttr = {};\nOTG2LMVAttr[AttributeName.Position] = \"position\";\nOTG2LMVAttr[AttributeName.Normal] = \"normal\";\nOTG2LMVAttr[AttributeName.Index] = \"index\";\nOTG2LMVAttr[AttributeName.IndexEdges] = \"indexlines\";\nOTG2LMVAttr[AttributeName.Color] = \"color\";\nOTG2LMVAttr[AttributeName.TextureUV] = \"uv\";\n\n\nconst AttributeTypeToSize = {};\nAttributeTypeToSize[AttributeType.BYTE] = 1;\nAttributeTypeToSize[AttributeType.SHORT] = 2;\nAttributeTypeToSize[AttributeType.UBYTE] = 1;\nAttributeTypeToSize[AttributeType.USHORT] = 2;\nAttributeTypeToSize[AttributeType.BYTE_NORM] = 1;\nAttributeTypeToSize[AttributeType.SHORT_NORM] = 2;\nAttributeTypeToSize[AttributeType.UBYTE_NORM] = 1;\nAttributeTypeToSize[AttributeType.USHORT_NORM] = 2;\nAttributeTypeToSize[AttributeType.FLOAT] = 4;\nAttributeTypeToSize[AttributeType.INT] = 4;\nAttributeTypeToSize[AttributeType.UINT] = 4;\n//DOUBLE: 11\n\n\n\nfunction rotate(tri) {\n var tmp = tri[0];\n tri[0] = tri[1];\n tri[1] = tri[2];\n tri[2] = tmp;\n}\n\nfunction deltaEncodeIndexBuffer3(ib) {\n\n var triangles = [];\n\n for (let i = 0; i < ib.length; i +=3 ) {\n triangles.push(\n [ib[i], ib[i + 1], ib[i + 2]]\n );\n }\n\n //Sort the indices for each triangle so that\n //the first one is smallest\n for (t of triangles) {\n while (t[0]> t[1] || t[0] > t[2]) {\n rotate(t);\n }\n }\n\n //Sort triangles by ascending first index\n triangles.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n //Delta encode the indices\n var t = triangles[0];\n var j = 0;\n ib[j] = t[0];\n ib[j + 1] = t[1] - t[0];\n ib[j + 2] = t[2] - t[0];\n j += 3;\n\n for (let i = 1; i < triangles.length; i++, j +=3 ) {\n t=t riangles[i];\n\n ib[j]=t [0] - triangles[i - 1][0];\n ib[j + 1]=t [1] - t[0];\n ib[j + 2]=t [2] - t[0];\n }\n\n}\n\nfunction deltaEncodeIndexBuffer2(ib) {\n\n var lines=[ ];\n\n for (let i=0 ; i < ib.length; i +=2 ) {\n lines.push(\n [ib[i], ib[i + 1]]\n );\n }\n\n //Sort the indices for each triangle so that\n //the first one is smallest\n for (const t of lines) {\n\n if (t[0]> t[1]) {\n var tmp = t[0];\n t[0] = t[1];\n t[1] = tmp;\n }\n }\n\n //Sort lines by ascending first index\n lines.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n //Delta encode the indices\n var t = lines[0];\n var j = 0;\n ib[j] = t[0];\n ib[j + 1] = t[1] - t[0];\n j += 2;\n\n for (let i = 1; i < lines.length; i++, j +=2 ) {\n t=l ines[i];\n\n ib[j]=t [0] - lines[i - 1][0];\n ib[j + 1]=t [1] - t[0];\n }\n\n}\n\n\nfunction deltaDecodeIndexBuffer3(ib) {\n\n if (!ib.length)\n return;\n\n ib[1] +=i b[0];\n ib[2] +=i b[0];\n\n for (var i=3 ; i < ib.length; i +=3 ) {\n ib[i] +=i b[i - 3];\n ib[i + 1] +=i b[i];\n ib[i + 2] +=i b[i];\n }\n}\n\nfunction deltaDecodeIndexBuffer2(ib) {\n\n if (!ib.length)\n return;\n\n ib[1] +=i b[0];\n\n for (var i=2 ; i < ib.length; i +=2 ) {\n ib[i] +=i b[i - 2];\n ib[i + 1] +=i b[i];\n }\n}\n\nfunction attrNameMapper(attributeName) {\n\n var name=L MV2OTGAttr[attributeName];\n if (typeof name !==\ "undefined\")\n return name;\n\n if (attributeName.indexOf(\ "uv\")===0 ) {\n return AttributeName.TextureUV;\n }\n\n console.warn(\ "Unknown attribute name\");\n return AttributeName.TextureUV;\n}\n\n\nfunction attrNameToLMV(attrName) {\n\n var lmvAttr=O TG2LMVAttr[attrName];\n if (lmvAttr)\n return lmvAttr;\n\n console.error(\ "Unknown vertex attribute\");\n return AttributeName.TextureUV;\n}\n\n\nfunction attrTypeMapper(attr) {\n\n var type=A ttributeType.FLOAT;\n\n var itemWidth=a ttr.bytesPerItem || 4;\n if (itemWidth===1 ) {\n type=a ttr.normalized ? AttributeType.UBYTE_NORM : AttributeType.UBYTE;\n } else if (itemWidth===2 ) {\n type=a ttr.normalized ? AttributeType.USHORT_NORM : AttributeType.USHORT;\n }\n\n return type << 4 | attr.itemSize & 0xf;\n}\n\nfunction indexTypeMapper(attr) {\n var type=A ttributeType.USHORT;\n\n var itemWidth=a ttr.bytesPerItem || 2;\n if (itemWidth===1 ) {\n type=A ttributeType.UBYTE;\n } else if (itemWidth===2 ) {\n type=A ttributeType.USHORT;\n } else if (itemWidth===4 ) {\n type=A ttributeType.UINT;\n }\n\n return type << 4 | attr.itemSize & 0xf;\n}\n\n\nfunction OtgGeomEncoder() {\n}\n\n\nOtgGeomEncoder.prototype.beginHeader=f unction (meshFlag, numAttributes, dataStreamLengths) {\n var headerSize=8 ;\n\n var numBuffers=d ataStreamLengths.length;\n headerSize +=( numBuffers - 1) * 4;\n\n headerSize +=n umAttributes * 5;\n\n while (headerSize % 4 !==0 ) {\n headerSize++;\n }\n\n var totalDataSize=0 ;\n for (let i=0 ; i < dataStreamLengths.length; i++)\n totalDataSize +=d ataStreamLengths[i];\n\n this.buffer=B uffer.alloc(headerSize + totalDataSize);\n this.writeOffset=0 ;\n\n //Write the 4 byte magic prefix\n const MAGIC=\ "OTG0\";\n for (let i=0 ; i < 4; i++) {\n this.writeOffset=t his.buffer.writeUInt8(MAGIC.charCodeAt(i), this.writeOffset);\n }\n\n //TODO: line width if wide lines and pointSize if points\n\n this.writeOffset=t his.buffer.writeUInt16LE(meshFlag, this.writeOffset);\n\n this.writeOffset=t his.buffer.writeUInt8(numBuffers, this.writeOffset);\n\n this.writeOffset=t his.buffer.writeUInt8(numAttributes, this.writeOffset);\n\n //write buffer offsets from the beginning of the binary data block\n //Skip the first buffer as its at offset zero\n var offset=d ataStreamLengths[0];\n for (let i=1 ; i < dataStreamLengths.length; i++) {\n this.writeOffset=t his.buffer.writeUInt32LE(offset, this.writeOffset);\n offset +=d ataStreamLengths[i];\n }\n};\n\nOtgGeomEncoder.prototype.addAttribute=f unction (attrName, attr, stride, bufferIndex) {\n this.writeOffset=t his.buffer.writeUInt8(attrName, this.writeOffset);\n\n if (attrName===A ttributeName.Index || attrName===A ttributeName.IndexEdges) {\n\n this.writeOffset=t his.buffer.writeUInt8(indexTypeMapper(attr), this.writeOffset);\n\n this.writeOffset=t his.buffer.writeUInt8((attr.itemOffset || 0) * 4, this.writeOffset); //itemOffset\n this.writeOffset=t his.buffer.writeUInt8((stride || 0) * 4, this.writeOffset); //itemStride\n\n this.writeOffset=t his.buffer.writeUInt8(bufferIndex, this.writeOffset); //buffer index\n } else {\n this.writeOffset=t his.buffer.writeUInt8(attrTypeMapper(attr), this.writeOffset);\n\n this.writeOffset=t his.buffer.writeUInt8((attr.itemOffset || 0) * 4, this.writeOffset); //itemOffset (LMV stores in multiples of 4)\n this.writeOffset=t his.buffer.writeUInt8((stride || 0) * 4, this.writeOffset); //itemStride (LMV stores in multiples of 4)\n\n this.writeOffset=t his.buffer.writeUInt8(bufferIndex, this.writeOffset); //buffer index\n }\n};\n\n\nOtgGeomEncoder.prototype.endHeader=f unction () {\n //Padding so that buffers are written at multiple of 4\n while (this.writeOffset % 4 !==0 ) {\n this.writeOffset=t his.buffer.writeUInt8(0, this.writeOffset);\n }\n};\n\nOtgGeomEncoder.prototype.addBuffer=f unction (buffer) {\n buffer.copy(this.buffer, this.writeOffset);\n this.writeOffset +=b uffer.length;\n};\n\n\nOtgGeomEncoder.prototype.end=f unction () {\n if (this.writeOffset !==t his.buffer.length) {\n console.error(\ "Incorrect encoding buffer size\");\n }\n\n return this.buffer;\n};\n\n\n\nfunction OtgGeomDecoder(buf) {\n\n this.buffer=b uf;\n this.readOffset=0 ;\n\n this.meshFlag=0 ;\n this.numBuffers=0 ;\n this.numAttributes=0 ;\n this.bufferOffsets=[ ];\n this.attributes=[ ];\n this.buffers=[ ];\n}\n\n\nOtgGeomDecoder.prototype.readNodeJS=f unction () {\n\n var magic=t his.buffer.toString(\ "ascii\", 0, 4);\n if (magic !==\ "OTG0\") {\n console.error(\ "Invalid OTG header\");\n return false;\n }\n\n this.readOffset=4 ;\n\n this.meshFlag=t his.buffer.readUInt16LE(this.readOffset);\n this.readOffset +=2 ;\n\n this.numBuffers=t his.buffer.readUInt8(this.readOffset);\n this.readOffset++;\n\n this.numAttributes=t his.buffer.readUInt8(this.readOffset);\n this.readOffset++;\n\n if (this.numBuffers) {\n this.bufferOffsets.push(0);\n\n for (var i=1 ; i < this.numBuffers; i++) {\n var boff=t his.buffer.readUInt32LE(this.readOffset);\n this.readOffset +=4 ;\n this.bufferOffsets.push(boff);\n }\n }\n\n for (let i=0 ; i < this.numAttributes; i++) {\n var attr={ };\n\n attr.name=t his.buffer.readUInt8(this.readOffset);\n this.readOffset++;\n\n var type=t his.buffer.readUInt8(this.readOffset);\n this.readOffset++;\n\n attr.itemSize=t ype & 0xf;\n attr.type=t ype>> 4;\n\n attr.bytesPerItem = AttributeTypeToSize[attr.type];\n\n attr.normalized = attr.type === AttributeType.BYTE_NORM ||\n attr.type === AttributeType.SHORT_NORM ||\n attr.type === AttributeType.UBYTE_NORM ||\n attr.type === AttributeType.USHORT_NORM;\n\n\n attr.itemOffset = this.buffer.readUInt8(this.readOffset) / 4;\n this.readOffset++;\n\n attr.itemStride = this.buffer.readUInt8(this.readOffset) / 4;\n this.readOffset++;\n\n attr.bufferIndex = this.buffer.readUInt8(this.readOffset);\n this.readOffset++;\n\n this.attributes.push(attr);\n }\n\n //seek to the beginning of the buffer data\n while (this.readOffset % 4 !== 0)\n this.readOffset++;\n\n for (let i = 0; i < this.bufferOffsets.length; i++) {\n\n var startOffset=t his.readOffset + this.bufferOffsets[i];\n var endOffset;\n\n if (i < this.bufferOffsets.length - 1) {\n endOffset=t his.readOffset + this.bufferOffsets[i + 1];\n } else {\n endOffset=t his.buffer.length;\n }\n\n this.buffers.push(this.buffer.slice(startOffset, endOffset));\n }\n\n return true;\n};\n\n\nOtgGeomDecoder.prototype.readWeb=f unction () {\n\n var stream=n ew _common_InputStream__WEBPACK_IMPORTED_MODULE_1__.InputStream(this.buffer);\n\n var magic=s tream.getString(4);\n if (magic !==\ "OTG0\") {\n console.error(\ "Invalid OTG header\");\n return false;\n }\n\n\n this.meshFlag=s tream.getUint16();\n this.numBuffers=s tream.getUint8();\n this.numAttributes=s tream.getUint8();\n\n if (this.numBuffers) {\n this.bufferOffsets.push(0);\n\n for (let i=1 ; i < this.numBuffers; i++) {\n var boff=s tream.getUint32();\n this.bufferOffsets.push(boff);\n }\n }\n\n for (let i=0 ; i < this.numAttributes; i++) {\n var attr={ };\n\n attr.name=s tream.getUint8();\n\n var type=s tream.getUint8();\n\n attr.itemSize=t ype & 0xf;\n attr.type=t ype>> 4;\n\n attr.bytesPerItem = AttributeTypeToSize[attr.type];\n\n attr.normalized = attr.type === AttributeType.BYTE_NORM ||\n attr.type === AttributeType.SHORT_NORM ||\n attr.type === AttributeType.UBYTE_NORM ||\n attr.type === AttributeType.USHORT_NORM;\n\n\n attr.itemOffset = stream.getUint8() / 4;\n\n attr.itemStride = stream.getUint8() / 4;\n\n attr.bufferIndex = stream.getUint8();\n\n this.attributes.push(attr);\n }\n\n //seek to the beginning of the buffer data\n while (stream.offset % 4 !== 0)\n stream.offset++;\n\n for (let i = 0; i < this.bufferOffsets.length; i++) {\n\n var startOffset=s tream.offset + this.bufferOffsets[i];\n var endOffset;\n\n if (i < this.bufferOffsets.length - 1) {\n endOffset=s tream.offset + this.bufferOffsets[i + 1];\n } else {\n endOffset=s tream.byteLength;\n }\n\n this.buffers.push(this.buffer.subarray(startOffset, endOffset));\n }\n\n return true;\n};\n\n\nOtgGeomDecoder.prototype.read=f unction () {\n\n if ((0,_compat__WEBPACK_IMPORTED_MODULE_0__.isNodeJS)() && this.buffer instanceof Buffer) {\n return this.readNodeJS();\n } else {\n return this.readWeb();\n }\n};\n\n\n/**\n * @param {BufferGeometry} geom\n * @returns {Buffer}\n */\nfunction serializeLmvBufferGeom(geom) {\n\n var otgEncoder=n ew OtgGeomEncoder();\n\n //Check for interleaved buffer. For now\n //this is the only one we support\n if (!geom.vb) {\n console.error(\ "Unexpected non-interleaved vertex buffer\");\n return null;\n }\n\n const vb=g eom.vb;\n const vbstride=g eom.vbstride;\n const ib=g eom.ib;\n const iblines=g eom.iblines;\n const bufSizes=[ vb.byteLength, ib.byteLength];\n\n if (iblines) {\n bufSizes.push(iblines.byteLength);\n }\n\n\n var attrKeys=O bject.keys(geom.attributes);\n\n var meshFlag=0 ;\n if (geom.isLines)\n meshFlag=m eshFlag | MeshFlags.LINES;\n if (geom.isWideLines)\n meshFlag=m eshFlag | MeshFlags.WIDE_LINES;\n if (geom.isPoints)\n meshFlag=m eshFlag | MeshFlags.POINTS;\n\n otgEncoder.beginHeader(meshFlag, attrKeys.length, bufSizes);\n\n //Write the attributes\n for (var i=0 ; i < attrKeys.length; i++) {\n var attr=g eom.attributes[attrKeys[i]];\n var attrName=a ttrNameMapper(attrKeys[i]);\n\n if (attrKeys[i]===\ "index\") {\n otgEncoder.addAttribute(attrName, attr, 0, 1);\n } else if (attrKeys[i]===\ "indexlines\") {\n otgEncoder.addAttribute(attrName, attr, 0, 2);\n } else {\n otgEncoder.addAttribute(attrName, attr, vbstride, 0);\n }\n\n }\n\n otgEncoder.endHeader();\n\n //Write the buffers\n\n //Buffer 0\n var tmp=B uffer.from(vb.buffer, vb.byteOffset, vb.byteLength);\n otgEncoder.addBuffer(tmp);\n\n //Buffer 1\n if (geom.isLines)\n deltaEncodeIndexBuffer2(ib);else\n\n deltaEncodeIndexBuffer3(ib);\n\n tmp=B uffer.from(ib.buffer, ib.byteOffset, ib.byteLength);\n otgEncoder.addBuffer(tmp);\n\n //Buffer 2\n if (iblines) {\n deltaEncodeIndexBuffer2(iblines);\n\n tmp=B uffer.from(iblines.buffer, iblines.byteOffset, iblines.byteLength);\n otgEncoder.addBuffer(tmp);\n }\n\n var buf=o tgEncoder.end();\n\n return buf;\n}\n\n\n\nvar unitBox=n ew _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_2__.LmvBox3();\nunitBox.min.x=- 0.5;\nunitBox.min.y=- 0.5;\nunitBox.min.z=- 0.5;\nunitBox.max.x=0 .5;\nunitBox.max.y=0 .5;\nunitBox.max.z=0 .5;\n\n//var unitSphere=n ew THREE.Sphere();\n//unitSphere.radius=M ath.sqrt(0.5 * 0.5 * 3);\nvar unitSphere={ \n center: { x: 0, y: 0, z: 0 },\n radius: Math.sqrt(0.5 * 0.5 * 3)\n};\n\nfunction readLmvBufferGeom(buffer, skipEdges) {\n\n var dec=n ew OtgGeomDecoder(buffer);\n\n if (!dec.read()) {\n console.error(\ "Failed to parse OTG geometry\");\n return null;\n }\n\n //Assumes the interleaved buffer serialization we use by default\n //Maps the decoded data to the mdata/vblayout structures produced by\n //the LMV loader worker threads. It 's slightly different from the LmvBufferGeometry fields\n var mesh = {\n vblayout: {},\n vb: new Float32Array(dec.buffers[0].buffer, dec.buffers[0].byteOffset, dec.buffers[0].byteLength / 4),\n isLines: (dec.meshFlag & 0x3) === MeshFlags.LINES,\n isWideLines: (dec.meshFlag & 0x3) === MeshFlags.WIDE_LINES,\n isPoints: (dec.meshFlag & 0x3) === MeshFlags.POINTS,\n boundingBox: unitBox,\n boundingSphere: unitSphere\n };\n\n //TODO: line width\n let uvCount = 0;\n\n for (var i = 0; i < dec.attributes.length; i++) {\n var attr = dec.attributes[i];\n\n if (attr.name === AttributeName.Index) {\n var ib = dec.buffers[1];\n if (attr.bytesPerItem === 1) {\n mesh.indices = ib;\n } else if (attr.bytesPerItem === 2) {\n mesh.indices = new Uint16Array(ib.buffer, ib.byteOffset, ib.byteLength / attr.bytesPerItem);\n } else if (attr.bytesPerItem === 4) {\n mesh.indices = new Uint32Array(ib.buffer, ib.byteOffset, ib.byteLength / attr.bytesPerItem);\n }\n\n if (mesh.isLines)\n deltaDecodeIndexBuffer2(mesh.indices);else\n\n deltaDecodeIndexBuffer3(mesh.indices);\n } else if (attr.name === AttributeName.IndexEdges) {\n if (!skipEdges) {\n var iblines = dec.buffers[2];\n if (attr.bytesPerItem === 1) {\n mesh.iblines = iblines;\n } else if (attr.bytesPerItem === 2) {\n mesh.iblines = new Uint16Array(iblines.buffer, iblines.byteOffset, iblines.byteLength / attr.bytesPerItem);\n } else if (attr.bytesPerItem === 4) {\n mesh.iblines = new Uint32Array(iblines.buffer, iblines.byteOffset, iblines.byteLength / attr.bytesPerItem);\n }\n\n deltaDecodeIndexBuffer2(mesh.iblines);\n }\n } else {\n var lmvAttr = attrNameToLMV(attr.name);\n\n if (lmvAttr === \"uv\") {\n uvCount++;\n if (uvCount > 1) {\n lmvAttr += uvCount.toString();\n }\n }\n\n if (!mesh.vbstride)\n mesh.vbstride = attr.itemStride;else\n {\n //We expect all vertex attributes to be packed into one VB\n if (mesh.vbstride !== attr.itemStride)\n console.error(\"Unexpected vertex buffer stride mismatch.\");\n }\n\n if (attr.itemOffset >= attr.itemStride) {\n\n\n\n\n //Some old (pre- October 2018) meshes have an extra UV attribute defined even though\n //it's not physically in the vertex buffer data. We skip it here.\n //If the attribute offset is out of bounds, we just ignore it.\n //console.warn(\ "Buggy OTG mesh. Ignoring out of bounds attribute\");\n } else {mesh.vblayout[lmvAttr]={ bytesPerItem: attr.bytesPerItem, offset: attr.itemOffset, normalized: attr.normalized,\n itemSize: attr.itemSize\n };\n }\n }\n\n }\n\n var mdata={ \n mesh: mesh,\n packId: 0,\n meshIndex: 0\n };\n\n return mdata;\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL290Zy9PdGdHZW9tQ29kZWMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQzJDO0FBQ1M7QUFDQzs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1HLGFBQWEsR0FBRztFQUNyQkMsS0FBSyxFQUFJLENBQUM7RUFDVkMsVUFBVSxFQUFFLENBQUM7RUFDYkMsUUFBUSxFQUFHLENBQUM7RUFDWkMsTUFBTSxFQUFHLENBQUM7RUFDVkMsU0FBUyxFQUFHLENBQUM7RUFDYkMsS0FBSyxFQUFJO0FBQ1YsQ0FBQzs7QUFFRCxNQUFNQyxhQUFhLEdBQUc7RUFDckJDLElBQUksRUFBSSxDQUFDO0VBQ1RDLEtBQUssRUFBSSxDQUFDO0VBQ1ZDLEtBQUssRUFBSSxDQUFDO0VBQ1ZDLE1BQU0sRUFBRyxDQUFDOztFQUVWQyxTQUFTLEVBQUcsQ0FBQztFQUNiQyxVQUFVLEVBQUUsQ0FBQztFQUNiQyxVQUFVLEVBQUUsQ0FBQztFQUNiQyxXQUFXLEVBQUMsQ0FBQzs7RUFFYkMsS0FBSyxFQUFJLENBQUM7RUFDVkMsR0FBRyxFQUFJLENBQUM7RUFDUkMsSUFBSSxFQUFJO0VBQ1I7QUFDRCxDQUFDOzs7QUFHRCxNQUFNQyxTQUFTLEdBQUc7RUFDakI7RUFDQUMsU0FBUyxFQUFHLENBQUM7RUFDYkMsS0FBSyxFQUFJLENBQUM7RUFDVkMsTUFBTSxFQUFHLENBQUM7RUFDVkMsVUFBVSxFQUFFOzs7QUFHYixDQUFDOzs7QUFHRCxNQUFNQyxXQUFXLEdBQUc7RUFDbkIsVUFBVSxFQUFHeEIsYUFBYSxDQUFDRyxRQUFRO0VBQ25DLFFBQVEsRUFBRUgsYUFBYSxDQUFDSSxNQUFNO0VBQzlCLE9BQU8sRUFBR0osYUFBYSxDQUFDQyxLQUFLO0VBQzdCLFlBQVksRUFBRUQsYUFBYSxDQUFD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bG12dGsvb3RnL090Z0dlb21Db2RlYy5qcz9lMDEwIl0sInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgaXNOb2RlSlMgfSBmcm9tIFwiLi4vLi4vLi4vY29tcGF0XCI7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbSB9IGZyb20gXCIuLi9jb21tb24vSW5wdXRTdHJlYW1cIjtcbmltcG9ydCB7IExtdkJveDMgfSBmcm9tIFwiLi4vLi4vLi4vd2dzL3NjZW5lL0xtdkJveDNcIjtcblxuLypcbkludGVnZXJzIGVuY29kZWQgaW4gKmxpdHRsZSBlbmRpYW4qXG5cbk1hZ2ljIGhlYWRlcjogTE1WMCAoNCBieXRlcylcbkZsYWdzOiAyIGJ5dGVzIChpc0xpbmUsIGlzUG9pbnQsIGlzV2lkZUxpbmUsIGV0Yy4pXG5OdW0gYnVmZmVyczogMSBieXRlXG5OdW0gYXR0cmlidXRlczogMSBieXRlIChhdHRyaWJ1dGVzIGFyZSBmaXhlZCBzaXplKVxuQnVmIE9mZnNldHMgKGZyb20gYmVnaW5uaW5nIG9mIGRhdGEgYmxvY2ssIGZpcnN0IGJ1ZmZlciBpcyBhbHdheXMgYXQgMCwgc28gaXMgc2tpcHBlZCk6IDQgYnl0ZXMgZWFjaFxuQXR0cmlidXRlczoge1xuXHROYW1lOiAxIGJ5dGUgZW51bSAoSW5kZXgsIEluZGV4RWRnZXMsIFBvc2l0aW9uLCBOb3JtYWwsIFRleHR1cmVVViwgQ29sb3IpXG5cdGl0ZW1TaXplOiAxLzIgYnl0ZSBsb3cgbmliYmxlIChtdXN0IGJlIDEsMiwzIG9yIDQpXG5cdGl0ZW1UeXBlOiAxLzIgYnl0ZSBoaSBuaWJibGUgKEJZVEUsIFNIT1JULCBVQllURSwgVVNIT1JULCBGTE9BVCAuLi4pXG5cdGl0ZW1PZmZzZXQ6IDEgYnl0ZSAoaW4gYnl0ZXMpXG5cdGl0ZW1TdHJpZGU6IDEgYnl0ZSAoc3RyaWRlIGluIGJ5dGVzKVxuXHRidWZmZXIgSWR4OiAxIGJ5dGVzXG59ICg1IGJ5dGVzIGVhY2gpXG5cbihwYWRkaW5nIGJ5dGVzIHRvIG1ha2UgZGF0YSBzdHJlYW0gb2Zmc2V0IGEgbXVsdGlwbGUgb2YgNClcblxuRGF0YTogYmluYXJ5LCBjb25jYXRlbmF0ZWQgdmVydGV4IGFuZCBpbmRleCBzdHJlYW1zXG4qL1xuXG5jb25zdCBBdHRyaWJ1dGVOYW1lID0ge1xuXHRJbmRleDogXHRcdDAsXG5cdEluZGV4RWRnZXM6IDEsXG5cdFBvc2l0aW9uOiBcdDIsXG5cdE5vcm1hbDogXHQzLFxuXHRUZXh0dXJlVVY6IFx0NCxcblx0Q29sb3I6IFx0XHQ1XG59O1xuXG5jb25zdCBBdHRyaWJ1dGVUeXBlID0ge1xuXHRCWVRFOiBcdFx0MCxcblx0U0hPUlQ6IFx0XHQxLFxuXHRVQllURTogXHRcdDIsXG5cdFVTSE9SVDogXHQzLFxuXG5cdEJZVEVfTk9STTogXHQ0LFxuXHRTSE9SVF9OT1JNOiA1LFxuXHRVQllURV9OT1JNOiA2LFxuXHRVU0hPUlRfTk9STTo3LFxuXG5cdEZMT0FUOiBcdFx0OCxcblx0SU5UOiBcdFx0OSxcblx0VUlOVDogXHRcdDEwXG5cdC8vRE9VQkxFOiAxMVxufTtcblxuXG5jb25zdCBNZXNoRmxhZ3MgPSB7XG5cdC8vTk9URTogTG93ZXIgdHdvIGJpdHMgYXJlIE5PVCBBIEJJVE1BU0shISFcblx0VFJJQU5HTEVTOiBcdDAsXG5cdExJTkVTOiBcdFx0MSxcblx0UE9JTlRTOiBcdDIsXG5cdFdJREVfTElORVM6IDMsXG5cblxufTtcblxuXG5jb25zdCBMTVYyT1RHQXR0ciA9IHtcblx0XCJwb3NpdGlvblwiIDogQXR0cmlidXRlTmFtZS5Qb3NpdGlvbixcblx0XCJub3JtYWxcIjogQXR0cmlidXRlTmFtZS5Ob3JtYWwsXG5cdFwiaW5kZXhcIiA6IEF0dHJpYnV0ZU5hbWUuSW5kZXgsXG5cdFwiaW5kZXhsaW5lc1wiOiBBdHRyaWJ1dGVOYW1lLkluZGV4RWRnZXMsXG5cdFwiY29sb3JcIjogQXR0cmlidXRlTmFtZS5Db2xvclxufTtcblxuY29uc3QgT1RHMkxNVkF0dHIgPSB7fTtcbk9URzJMTVZBdHRyW0F0dHJpYnV0ZU5hbWUuUG9zaXRpb25dID0gXCJwb3NpdGlvblwiO1xuT1RHMkxNVkF0dHJbQXR0cmlidXRlTmFtZS5Ob3JtYWxdID0gXCJub3JtYWxcIjtcbk9URzJMTVZBdHRyW0F0dHJpYnV0ZU5hbWUuSW5kZXhdID0gXCJpbmRleFwiO1xuT1RHMkxNVkF0dHJbQXR0cmlidXRlTmFtZS5JbmRleEVkZ2VzXSA9IFwiaW5kZXhsaW5lc1wiO1xuT1RHMkxNVkF0dHJbQXR0cmlidXRlTmFtZS5Db2xvcl0gPSBcImNvbG9yXCI7XG5PVEcyTE1WQXR0cltBdHRyaWJ1dGVOYW1lLlRleHR1cmVVVl0gPSBcInV2XCI7XG5cblxuY29uc3QgQXR0cmlidXRlVHlwZVRvU2l6ZSA9IHt9O1xuQXR0cmlidXRlVHlwZVRvU2l6ZVtBdHRyaWJ1dGVUeXBlLkJZVEVdID0gMTtcbkF0dHJpYnV0ZVR5cGVUb1NpemVbQXR0cmlidXRlVHlwZS5TSE9SVF0gPSAyO1xuQXR0cmlidXRlVHlwZVRvU2l6ZVtBdHRyaWJ1dGVUeXBlLlVCWVRFXSA9IDE7XG5BdHRyaWJ1dGVUeXBlVG9TaXplW0F0dHJpYnV0ZVR5cGUuVVNIT1JUXSA9IDI7XG5BdHRyaWJ1dGVUeXBlVG9TaXplW0F0dHJpYnV0ZVR5cGUuQllURV9OT1JNXSA9IDE7XG5BdHRyaWJ1dGVUeXBlVG9TaXplW0F0dHJpYnV0ZVR5cGUuU0hPUlRfTk9STV0gPSAyO1xuQXR0cmlidXRlVHlwZVRvU2l6ZVtBdHRyaWJ1dGVUeXBlLlVCWVRFX05PUk1dID0gMTtcbkF0dHJpYnV0ZVR5cGVUb1NpemVbQXR0cmlidXRlVHlwZS5VU0hPUlRfTk9STV0gPSAyO1xuQXR0cmlidXRlVHlwZVRvU2l6ZVtBdHRyaWJ1dGVUeXBlLkZMT0FUXSA9IDQ7XG5BdHRyaWJ1dGVUeXBlVG9TaXplW0F0dHJpYnV0ZVR5cGUuSU5UXSA9IDQ7XG5BdHRyaWJ1dGVUeXBlVG9TaXplW0F0dHJpYnV0ZVR5cGUuVUlOVF0gPSA0O1xuLy9ET1VCTEU6IDExXG5cblxuXG5mdW5jdGlvbiByb3RhdGUodHJpKSB7XG5cdHZhciB0bXAgPSB0cmlbMF07XG5cdHRyaVswXSA9IHRyaVsxXTtcblx0dHJpWzFdID0gdHJpWzJdO1xuXHR0cmlbMl0gPSB0bXA7XG59XG5cbmZ1bmN0aW9uIGRlbHRhRW5jb2RlSW5kZXhCdWZmZXIzKGliKSB7XG5cblx0dmFyIHRyaWFuZ2xlcyA9IFtdO1xuXG5cdGZvciAobGV0IGk9MDsgaTxpYi5sZW5ndGg7IGkrPTMpIHtcblx0XHR0cmlhbmdsZXMucHVzaChcblx0XHRcdFtpYltpXSwgaWJbaSsxXSwgaWJbaSsyXV1cblx0XHQpO1xuXHR9XG5cblx0Ly9Tb3J0IHRoZSBpbmRpY2VzIGZvciBlYWNoIHRyaWFuZ2xlIHNvIHRoYXRcblx0Ly90aGUgZmlyc3Qgb25lIGlzIHNtYWxsZXN0XG5cdGZvciAodCBvZiB0cmlhbmdsZXMpIHtcblx0XHR3aGlsZSAodFswXSA+IHRbMV0gfHwgdFswXSA+IHRbMl0pIHtcblx0XHRcdHJvdGF0ZSh0KTtcblx0XHR9XG5cdH1cblxuXHQvL1NvcnQgdHJpYW5nbGVzIGJ5IGFzY2VuZGluZyBmaXJzdCBpbmRleFxuXHR0cmlhbmdsZXMuc29ydChmdW5jdGlvbihhLCBiKXtcblx0XHRyZXR1cm4gYVswXSAtIGJbMF07XG5cdH0pO1xuXG5cdC8vRGVsdGEgZW5jb2RlIHRoZSBpbmRpY2VzXG5cdHZhciB0ID0gdHJpYW5nbGVzWzBdO1xuXHR2YXIgaiA9IDA7XG5cdGliW2pdID0gdFswXTtcblx0aWJbaisxXSA9IHRbMV0gLSB0WzBdO1xuXHRpYltqKzJdID0gdFsyXSAtIHRbMF07XG5cdGogKz0gMztcblxuXHRmb3IgKGxldCBpPTE7IGk8dHJpYW5nbGVzLmxlbmd0aDsgaSsrLCBqKz0zKSB7XG5cdFx0dCA9IHRyaWFuZ2xlc1tpXTtcblxuXHRcdGliW2pdID0gdFswXSAtIHRyaWFuZ2xlc1tpLTFdWzBdO1xuXHRcdGliW2orMV0gPSB0WzFdIC0gdFswXTtcblx0XHRpYltqKzJdID0gdFsyXSAtIHRbMF07XG5cdH1cblxufVxuXG5mdW5jdGlvbiBkZWx0YUVuY29kZUluZGV4QnVmZmVyMihpYikge1xuXG5cdHZhciBsaW5lcyA9IFtdO1xuXG5cdGZvciAobGV0IGk9MDsgaTxpYi5sZW5ndGg7IGkrPTIpIHtcblx0XHRsaW5lcy5wdXNoKFxuXHRcdFx0W2liW2ldLCBpYltpKzFdXVxuXHRcdCk7XG5cdH1cblxuXHQvL1NvcnQgdGhlIGluZGljZXMgZm9yIGVhY2ggdHJpYW5nbGUgc28gdGhhdFxuXHQvL3RoZSBmaXJzdCBvbmUgaXMgc21hbGxlc3Rcblx0Zm9yIChjb25zdCB0IG9mIGxpbmVzKSB7XG5cblx0XHRpZiAodFswXSA+IHRbMV0pIHtcblx0XHRcdHZhciB0bXAgPSB0WzBdO1xuXHRcdFx0dFswXSA9IHRbMV07XG5cdFx0XHR0WzFdID0gdG1wO1xuXHRcdH1cblx0fVxuXG5cdC8vU29ydCBsaW5lcyBieSBhc2NlbmRpbmcgZmlyc3QgaW5kZXhcblx0bGluZXMuc29ydChmdW5jdGlvbihhLCBiKXtcblx0XHRyZXR1cm4gYVswXSAtIGJbMF07XG5cdH0pO1xuXG5cdC8vRGVsdGEgZW5jb2RlIHRoZSBpbmRpY2VzXG5cdHZhciB0ID0gbGluZXNbMF07XG5cdHZhciBqID0gMDtcblx0aWJbal0gPSB0WzBdO1xuXHRpYltqKzFdID0gdFsxXSAtIHRbMF07XG5cdGogKz0gMjtcblxuXHRmb3IgKGxldCBpPTE7IGk8bGluZXMubGVuZ3RoOyBpKyssIGorPTIpIHtcblx0XHR0ID0gbGluZXNbaV07XG5cblx0XHRpYltqXSA9IHRbMF0gLSBsaW5lc1tpLTFdWzBdO1xuXHRcdGliW2orMV0gPSB0WzFdIC0gdFswXTtcblx0fVxuXG59XG5cblxuZnVuY3Rpb24gZGVsdGFEZWNvZGVJbmRleEJ1ZmZlcjMoaWIpIHtcblxuXHRpZiAoIWliLmxlbmd0aClcblx0XHRyZXR1cm47XG5cblx0aWJbMV0gKz0gaWJbMF07XG5cdGliWzJdICs9IGliWzBdO1xuXG5cdGZvciAodmFyIGk9MzsgaTxpYi5sZW5ndGg7IGkrPTMpIHtcblx0XHRpYltpXSArPSBpYltpLTNdO1xuXHRcdGliW2krMV0gKz0gaWJbaV07XG5cdFx0aWJbaSsyXSArPSBpYltpXTtcblx0fVxufVxuXG5mdW5jdGlvbiBkZWx0YURlY29kZUluZGV4QnVmZmVyMihpYikge1xuXG5cdGlmICghaWIubGVuZ3RoKVxuXHRcdHJldHVybjtcblxuXHRpYlsxXSArPSBpYlswXTtcblxuXHRmb3IgKHZhciBpPTI7IGk8aWIubGVuZ3RoOyBpKz0yKSB7XG5cdFx0aWJbaV0gKz0gaWJbaS0yXTtcblx0XHRpYltpKzFdICs9IGliW2ldO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGF0dHJOYW1lTWFwcGVyKGF0dHJpYnV0ZU5hbWUpIHtcblxuXHR2YXIgbmFtZSA9IExNVjJPVEdBdHRyW2F0dHJpYnV0ZU5hbWVdO1xuXHRpZiAodHlwZW9mIG5hbWUgIT09IFwidW5kZWZpbmVkXCIpXG5cdFx0cmV0dXJuIG5hbWU7XG5cblx0aWYgKGF0dHJpYnV0ZU5hbWUuaW5kZXhPZihcInV2XCIpID09PSAwKSB7XG5cdFx0cmV0dXJuIEF0dHJpYnV0ZU5hbWUuVGV4dHVyZVVWO1xuXHR9XG5cblx0Y29uc29sZS53YXJuKFwiVW5rbm93biBhdHRyaWJ1dGUgbmFtZVwiKTtcblx0cmV0dXJuIEF0dHJpYnV0ZU5hbWUuVGV4dHVyZVVWO1xufVxuXG5cbmZ1bmN0aW9uIGF0dHJOYW1lVG9MTVYoYXR0ck5hbWUpIHtcblxuXHR2YXIgbG12QXR0ciA9IE9URzJMTVZBdHRyW2F0dHJOYW1lXTtcblx0aWYgKGxtdkF0dHIpXG5cdFx0cmV0dXJuIGxtdkF0dHI7XG5cblx0Y29uc29sZS5lcnJvcihcIlVua25vd24gdmVydGV4IGF0dHJpYnV0ZVwiKTtcblx0cmV0dXJuIEF0dHJpYnV0ZU5hbWUuVGV4dHVyZVVWO1xufVxuXG5cbmZ1bmN0aW9uIGF0dHJUeXBlTWFwcGVyKGF0dHIpIHtcblxuXHR2YXIgdHlwZSA9IEF0dHJpYnV0ZVR5cGUuRkxPQVQ7XG5cblx0dmFyIGl0ZW1XaWR0aCA9IGF0dHIuYnl0ZXNQZXJJdGVtIHx8IDQ7XG5cdGlmIChpdGVtV2lkdGggPT09IDEpIHtcblx0XHR0eXBlID0gYXR0ci5ub3JtYWxpemVkID8gQXR0cmlidXRlVHlwZS5VQllURV9OT1JNIDogQXR0cmlidXRlVHlwZS5VQllURTtcblx0fSBlbHNlIGlmIChpdGVtV2lkdGggPT09IDIpIHtcblx0XHR0eXBlID0gYXR0ci5ub3JtYWxpemVkID8gQXR0cmlidXRlVHlwZS5VU0hPUlRfTk9STSA6IEF0dHJpYnV0ZVR5cGUuVVNIT1JUO1xuXHR9XG5cblx0cmV0dXJuICh0eXBlIDw8IDQpIHwgKGF0dHIuaXRlbVNpemUgJiAweGYpO1xufVxuXG5mdW5jdGlvbiBpbmRleFR5cGVNYXBwZXIoYXR0cikge1xuXHR2YXIgdHlwZSA9IEF0dHJpYnV0ZVR5cGUuVVNIT1JUO1xuXG5cdHZhciBpdGVtV2lkdGggPSBhdHRyLmJ5dGVzUGVySXRlbSB8fCAyO1xuXHRpZiAoaXRlbVdpZHRoID09PSAxKSB7XG5cdFx0dHlwZSA9IEF0dHJpYnV0ZVR5cGUuVUJZVEU7XG5cdH0gZWxzZSBpZiAoaXRlbVdpZHRoID09PSAyKSB7XG5cdFx0dHlwZSA9IEF0dHJpYnV0ZVR5cGUuVVNIT1JUO1xuXHR9IGVsc2UgaWYgKGl0ZW1XaWR0aCA9PT0gNCkge1xuXHRcdHR5cGUgPSBBdHRyaWJ1dGVUeXBlLlVJTlQ7XG5cdH1cblxuXHRyZXR1cm4gKHR5cGUgPDwgNCkgfCAoYXR0ci5pdGVtU2l6ZSAmIDB4Zik7XG59XG5cblxuZnVuY3Rpb24gT3RnR2VvbUVuY29kZXIoKSB7XG59XG5cblxuT3RnR2VvbUVuY29kZXIucHJvdG90eXBlLmJlZ2luSGVhZGVyID0gZnVuY3Rpb24obWVzaEZsYWcsIG51bUF0dHJpYnV0ZXMsIGRhdGFTdHJlYW1MZW5ndGhzKSB7XG5cdHZhciBoZWFkZXJTaXplID0gODtcblxuXHR2YXIgbnVtQnVmZmVycyA9IGRhdGFTdHJlYW1MZW5ndGhzLmxlbmd0aDtcblx0aGVhZGVyU2l6ZSArPSAobnVtQnVmZmVycyAtIDEpICogNDtcblxuXHRoZWFkZXJTaXplICs9IG51bUF0dHJpYnV0ZXMgKiA1O1xuXG5cdHdoaWxlIChoZWFkZXJTaXplICUgNCAhPT0gMCkge1xuXHRcdGhlYWRlclNpemUrKztcblx0fVxuXG5cdHZhciB0b3RhbERhdGFTaXplID0gMDtcblx0Zm9yIChsZXQgaT0wOyBpPGRhdGFTdHJlYW1MZW5ndGhzLmxlbmd0aDsgaSsrKVxuXHRcdHRvdGFsRGF0YVNpemUgKz0gZGF0YVN0cmVhbUxlbmd0aHNbaV07XG5cblx0dGhpcy5idWZmZXIgPSBCdWZmZXIuYWxsb2MoaGVhZGVyU2l6ZSArIHRvdGFsRGF0YVNpemUpO1xuXHR0aGlzLndyaXRlT2Zmc2V0ID0gMDtcblxuXHQvL1dyaXRlIHRoZSA0IGJ5dGUgbWFnaWMgcHJlZml4XG5cdGNvbnN0IE1BR0lDID0gXCJPVEcwXCI7XG5cdGZvciAobGV0IGk9MDsgaTw0OyBpKyspIHtcblx0XHR0aGlzLndyaXRlT2Zmc2V0ID0gdGhpcy5idWZmZXIud3JpdGVVSW50OChNQUdJQy5jaGFyQ29kZUF0KGkpLCB0aGlzLndyaXRlT2Zmc2V0KTtcblx0fVxuXG5cdC8vVE9ETzogbGluZSB3aWR0aCBpZiB3aWRlIGxpbmVzIGFuZCBwb2ludFNpemUgaWYgcG9pbnRzXG5cblx0dGhpcy53cml0ZU9mZnNldCA9IHRoaXMuYnVmZmVyLndyaXRlVUludDE2TEUobWVzaEZsYWcsIHRoaXMud3JpdGVPZmZzZXQpO1xuXG5cdHRoaXMud3JpdGVPZmZzZXQgPSB0aGlzLmJ1ZmZlci53cml0ZVVJbnQ4KG51bUJ1ZmZlcnMsIHRoaXMud3JpdGVPZmZzZXQpO1xuXG5cdHRoaXMud3JpdGVPZmZzZXQgPSB0aGlzLmJ1ZmZlci53cml0ZVVJbnQ4KG51bUF0dHJpYnV0ZXMsIHRoaXMud3JpdGVPZmZzZXQpO1xuXG5cdC8vd3JpdGUgYnVmZmVyIG9mZnNldHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBiaW5hcnkgZGF0YSBibG9ja1xuXHQvL1NraXAgdGhlIGZpcnN0IGJ1ZmZlciBhcyBpdHMgYXQgb2Zmc2V0IHplcm9cblx0dmFyIG9mZnNldCA9IGRhdGFTdHJlYW1MZW5ndGhzWzBdO1xuXHRmb3IgKGxldCBpPTE7IGk8ZGF0YVN0cmVhbUxlbmd0aHMubGVuZ3RoOyBpKyspIHtcblx0XHR0aGlzLndyaXRlT2Zmc2V0ID0gdGhpcy5idWZmZXIud3JpdGVVSW50MzJMRShvZmZzZXQsIHRoaXMud3JpdGVPZmZzZXQpO1xuXHRcdG9mZnNldCArPSBkYXRhU3RyZWFtTGVuZ3Roc1tpXTtcblx0fVxufTtcblxuT3RnR2VvbUVuY29kZXIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dHJOYW1lLCBhdHRyLCBzdHJpZGUsIGJ1ZmZlckluZGV4KSB7XG5cdHRoaXMud3JpdGVPZmZzZXQgPSB0aGlzLmJ1ZmZlci53cml0ZVVJbnQ4KGF0dHJOYW1lLCB0aGlzLndyaXRlT2Zmc2V0KTtcblxuXHRpZiAoYXR0ck5hbWUgPT09IEF0dHJpYnV0ZU5hbWUuSW5kZXggfHwgYXR0ck5hbWUgPT09IEF0dHJpYnV0ZU5hbWUuSW5kZXhFZGdlcykge1xuXG5cdFx0dGhpcy53cml0ZU9mZnNldCA9IHRoaXMuYnVmZmVyLndyaXRlVUludDgoaW5kZXhUeXBlTWFwcGVyKGF0dHIpLCB0aGlzLndyaXRlT2Zmc2V0KTtcblxuXHRcdHRoaXMud3JpdGVPZmZzZXQgPSB0aGlzLmJ1ZmZlci53cml0ZVVJbnQ4KChhdHRyLml0ZW1PZmZzZXQgfHwgMCkgKiA0LCB0aGlzLndyaXRlT2Zmc2V0KTsgLy9pdGVtT2Zmc2V0XG5cdFx0dGhpcy53cml0ZU9mZnNldCA9IHRoaXMuYnVmZmVyLndyaXRlVUludDgoKHN0cmlkZSB8fCAwKSAqIDQsIHRoaXMud3JpdGVPZmZzZXQpOyAvL2l0ZW1TdHJpZGVcblxuXHRcdHRoaXMud3JpdGVPZmZzZXQgPSB0aGlzLmJ1ZmZlci53cml0ZVVJbnQ4KGJ1ZmZlckluZGV4LCB0aGlzLndyaXRlT2Zmc2V0KTsgLy9idWZmZXIgaW5kZXhcblx0fSBlbHNlIHtcblx0XHR0aGlzLndyaXRlT2Zmc2V0ID0gdGhpcy5idWZmZXIud3JpdGVVSW50OChhdHRyVHlwZU1hcHBlcihhdHRyKSwgdGhpcy53cml0ZU9mZnNldCk7XG5cblx0XHR0aGlzLndyaXRlT2Zmc2V0ID0gdGhpcy5idWZmZXIud3JpdGVVSW50OCgoYXR0ci5pdGVtT2Zmc2V0IHx8IDApICogNCwgdGhpcy53cml0ZU9mZnNldCk7IC8vaXRlbU9mZnNldCAoTE1WIHN0b3JlcyBpbiBtdWx0aXBsZXMgb2YgNClcblx0XHR0aGlzLndyaXRlT2Zmc2V0ID0gdGhpcy5idWZmZXIud3JpdGVVSW50OCgoc3RyaWRlIHx8IDApICogNCwgdGhpcy53cml0ZU9mZnNldCk7IC8vaXRlbVN0cmlkZSAoTE1WIHN0b3JlcyBpbiBtdWx0aXBsZXMgb2YgNClcblxuXHRcdHRoaXMud3JpdGVPZmZzZXQgPSB0aGlzLmJ1ZmZlci53cml0ZVVJbnQ4KGJ1ZmZlckluZGV4LCB0aGlzLndyaXRlT2Zmc2V0KTsgLy9idWZmZXIgaW5kZXhcblx0fVxufTtcblxuXG5PdGdHZW9tRW5jb2Rlci5wcm90b3R5cGUuZW5kSGVhZGVyID0gZnVuY3Rpb24oKSB7XG5cdC8vUGFkZGluZyBzbyB0aGF0IGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gYXQgbXVsdGlwbGUgb2YgNFxuXHR3aGlsZSAodGhpcy53cml0ZU9mZnNldCAlIDQgIT09IDApIHtcblx0XHR0aGlzLndyaXRlT2Zmc2V0ID0gdGhpcy5idWZmZXIud3JpdGVVSW50OCgwLCB0aGlzLndyaXRlT2Zmc2V0KTtcblx0fVxufTtcblxuT3RnR2VvbUVuY29kZXIucHJvdG90eXBlLmFkZEJ1ZmZlciA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuXHRidWZmZXIuY29weSh0aGlzLmJ1ZmZlciwgdGhpcy53cml0ZU9mZnNldCk7XG5cdHRoaXMud3JpdGVPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcbn07XG5cblxuT3RnR2VvbUVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy53cml0ZU9mZnNldCAhPT0gdGhpcy5idWZmZXIubGVuZ3RoKSB7XG5cdFx0Y29uc29sZS5lcnJvcihcIkluY29ycmVjdCBlbmNvZGluZyBidWZmZXIgc2l6ZVwiKTtcblx0fVxuXG5cdHJldHVybiB0aGlzLmJ1ZmZlcjtcbn07XG5cblxuXG5mdW5jdGlvbiBPdGdHZW9tRGVjb2RlcihidWYpIHtcblxuXHR0aGlzLmJ1ZmZlciA9IGJ1Zjtcblx0dGhpcy5yZWFkT2Zmc2V0ID0gMDtcblxuXHR0aGlzLm1lc2hGbGFnID0gMDtcblx0dGhpcy5udW1CdWZmZXJzID0gMDtcblx0dGhpcy5udW1BdHRyaWJ1dGVzID0gMDtcblx0dGhpcy5idWZmZXJPZmZzZXRzID0gW107XG5cdHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuXHR0aGlzLmJ1ZmZlcnMgPSBbXTtcbn1cblxuXG5PdGdHZW9tRGVjb2Rlci5wcm90b3R5cGUucmVhZE5vZGVKUyA9IGZ1bmN0aW9uKCkge1xuXG5cdHZhciBtYWdpYyA9IHRoaXMuYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMCwgNCk7XG5cdGlmIChtYWdpYyAhPT0gXCJPVEcwXCIpIHtcblx0XHRjb25zb2xlLmVycm9yKFwiSW52YWxpZCBPVEcgaGVhZGVyXCIpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHRoaXMucmVhZE9mZnNldCA9IDQ7XG5cblx0dGhpcy5tZXNoRmxhZyA9IHRoaXMuYnVmZmVyLnJlYWRVSW50MTZMRSh0aGlzLnJlYWRPZmZzZXQpO1xuXHR0aGlzLnJlYWRPZmZzZXQgKz0gMjtcblxuXHR0aGlzLm51bUJ1ZmZlcnMgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5yZWFkT2Zmc2V0KTtcblx0dGhpcy5yZWFkT2Zmc2V0Kys7XG5cblx0dGhpcy5udW1BdHRyaWJ1dGVzID0gdGhpcy5idWZmZXIucmVhZFVJbnQ4KHRoaXMucmVhZE9mZnNldCk7XG5cdHRoaXMucmVhZE9mZnNldCsrO1xuXG5cdGlmICh0aGlzLm51bUJ1ZmZlcnMpIHtcblx0XHR0aGlzLmJ1ZmZlck9mZnNldHMucHVzaCgwKTtcblxuXHRcdGZvciAodmFyIGk9MTsgaTx0aGlzLm51bUJ1ZmZlcnM7IGkrKykge1xuXHRcdFx0dmFyIGJvZmYgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDMyTEUodGhpcy5yZWFkT2Zmc2V0KTtcblx0XHRcdHRoaXMucmVhZE9mZnNldCArPSA0O1xuXHRcdFx0dGhpcy5idWZmZXJPZmZzZXRzLnB1c2goYm9mZik7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChsZXQgaT0wOyBpPHRoaXMubnVtQXR0cmlidXRlczsgaSsrKSB7XG5cdFx0dmFyIGF0dHIgPSB7fTtcblxuXHRcdGF0dHIubmFtZSA9IHRoaXMuYnVmZmVyLnJlYWRVSW50OCh0aGlzLnJlYWRPZmZzZXQpO1xuXHRcdHRoaXMucmVhZE9mZnNldCsrO1xuXG5cdFx0dmFyIHR5cGUgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5yZWFkT2Zmc2V0KTtcblx0XHR0aGlzLnJlYWRPZmZzZXQrKztcblxuXHRcdGF0dHIuaXRlbVNpemUgPSB0eXBlICYgMHhmO1xuXHRcdGF0dHIudHlwZSA9IHR5cGUgPj4gNDtcblxuXHRcdGF0dHIuYnl0ZXNQZXJJdGVtID0gQXR0cmlidXRlVHlwZVRvU2l6ZVthdHRyLnR5cGVdO1xuXG5cdFx0YXR0ci5ub3JtYWxpemVkID0gKGF0dHIudHlwZSA9PT0gQXR0cmlidXRlVHlwZS5CWVRFX05PUk0gfHxcblx0XHRcdFx0XHRcdCAgYXR0ci50eXBlID09PSBBdHRyaWJ1dGVUeXBlLlNIT1JUX05PUk0gfHxcblx0XHRcdFx0XHRcdCAgYXR0ci50eXBlID09PSBBdHRyaWJ1dGVUeXBlLlVCWVRFX05PUk0gfHxcblx0XHRcdFx0XHRcdCAgYXR0ci50eXBlID09PSBBdHRyaWJ1dGVUeXBlLlVTSE9SVF9OT1JNXG5cdFx0XHRcdFx0XHQgICk7XG5cblx0XHRhdHRyLml0ZW1PZmZzZXQgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5yZWFkT2Zmc2V0KSAvIDQ7XG5cdFx0dGhpcy5yZWFkT2Zmc2V0Kys7XG5cblx0XHRhdHRyLml0ZW1TdHJpZGUgPSB0aGlzLmJ1ZmZlci5yZWFkVUludDgodGhpcy5yZWFkT2Zmc2V0KSAvIDQ7XG5cdFx0dGhpcy5yZWFkT2Zmc2V0Kys7XG5cblx0XHRhdHRyLmJ1ZmZlckluZGV4ID0gdGhpcy5idWZmZXIucmVhZFVJbnQ4KHRoaXMucmVhZE9mZnNldCk7XG5cdFx0dGhpcy5yZWFkT2Zmc2V0Kys7XG5cblx0XHR0aGlzLmF0dHJpYnV0ZXMucHVzaChhdHRyKTtcblx0fVxuXG5cdC8vc2VlayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgZGF0YVxuXHR3aGlsZSh0aGlzLnJlYWRPZmZzZXQgJSA0ICE9PSAwKVxuXHRcdHRoaXMucmVhZE9mZnNldCsrO1xuXG5cdGZvciAobGV0IGk9MDsgaTx0aGlzLmJ1ZmZlck9mZnNldHMubGVuZ3RoOyBpKyspIHtcblxuXHRcdHZhciBzdGFydE9mZnNldCA9IHRoaXMucmVhZE9mZnNldCArIHRoaXMuYnVmZmVyT2Zmc2V0c1tpXTtcblx0XHR2YXIgZW5kT2Zmc2V0O1xuXG5cdFx0aWYgKGkgPCB0aGlzLmJ1ZmZlck9mZnNldHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0ZW5kT2Zmc2V0ID0gdGhpcy5yZWFkT2Zmc2V0ICsgdGhpcy5idWZmZXJPZmZzZXRzW2krMV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVuZE9mZnNldCA9IHRoaXMuYnVmZmVyLmxlbmd0aDtcblx0XHR9XG5cblx0XHR0aGlzLmJ1ZmZlcnMucHVzaCh0aGlzLmJ1ZmZlci5zbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KSk7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cblxuT3RnR2VvbURlY29kZXIucHJvdG90eXBlLnJlYWRXZWIgPSBmdW5jdGlvbigpIHtcblxuXHR2YXIgc3RyZWFtID0gbmV3IElucHV0U3RyZWFtKHRoaXMuYnVmZmVyKTtcblxuXHR2YXIgbWFnaWMgPSBzdHJlYW0uZ2V0U3RyaW5nKDQpO1xuXHRpZiAobWFnaWMgIT09IFwiT1RHMFwiKSB7XG5cdFx0Y29uc29sZS5lcnJvcihcIkludmFsaWQgT1RHIGhlYWRlclwiKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXG5cdHRoaXMubWVzaEZsYWcgPSBzdHJlYW0uZ2V0VWludDE2KCk7XG5cdHRoaXMubnVtQnVmZmVycyA9IHN0cmVhbS5nZXRVaW50OCgpO1xuXHR0aGlzLm51bUF0dHJpYnV0ZXMgPSBzdHJlYW0uZ2V0VWludDgoKTtcblxuXHRpZiAodGhpcy5udW1CdWZmZXJzKSB7XG5cdFx0dGhpcy5idWZmZXJPZmZzZXRzLnB1c2goMCk7XG5cblx0XHRmb3IgKGxldCBpPTE7IGk8dGhpcy5udW1CdWZmZXJzOyBpKyspIHtcblx0XHRcdHZhciBib2ZmID0gc3RyZWFtLmdldFVpbnQzMigpO1xuXHRcdFx0dGhpcy5idWZmZXJPZmZzZXRzLnB1c2goYm9mZik7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChsZXQgaT0wOyBpPHRoaXMubnVtQXR0cmlidXRlczsgaSsrKSB7XG5cdFx0dmFyIGF0dHIgPSB7fTtcblxuXHRcdGF0dHIubmFtZSA9IHN0cmVhbS5nZXRVaW50OCgpO1xuXG5cdFx0dmFyIHR5cGUgPSBzdHJlYW0uZ2V0VWludDgoKTtcblxuXHRcdGF0dHIuaXRlbVNpemUgPSB0eXBlICYgMHhmO1xuXHRcdGF0dHIudHlwZSA9IHR5cGUgPj4gNDtcblxuXHRcdGF0dHIuYnl0ZXNQZXJJdGVtID0gQXR0cmlidXRlVHlwZVRvU2l6ZVthdHRyLnR5cGVdO1xuXG5cdFx0YXR0ci5ub3JtYWxpemVkID0gKGF0dHIudHlwZSA9PT0gQXR0cmlidXRlVHlwZS5CWVRFX05PUk0gfHxcblx0XHRcdFx0XHRcdCAgYXR0ci50eXBlID09PSBBdHRyaWJ1dGVUeXBlLlNIT1JUX05PUk0gfHxcblx0XHRcdFx0XHRcdCAgYXR0ci50eXBlID09PSBBdHRyaWJ1dGVUeXBlLlVCWVRFX05PUk0gfHxcblx0XHRcdFx0XHRcdCAgYXR0ci50eXBlID09PSBBdHRyaWJ1dGVUeXBlLlVTSE9SVF9OT1JNXG5cdFx0XHRcdFx0XHQgICk7XG5cblx0XHRhdHRyLml0ZW1PZmZzZXQgPSBzdHJlYW0uZ2V0VWludDgoKSAvIDQ7XG5cblx0XHRhdHRyLml0ZW1TdHJpZGUgPSBzdHJlYW0uZ2V0VWludDgoKSAvIDQ7XG5cblx0XHRhdHRyLmJ1ZmZlckluZGV4ID0gc3RyZWFtLmdldFVpbnQ4KCk7XG5cblx0XHR0aGlzLmF0dHJpYnV0ZXMucHVzaChhdHRyKTtcblx0fVxuXG5cdC8vc2VlayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgZGF0YVxuXHR3aGlsZShzdHJlYW0ub2Zmc2V0ICUgNCAhPT0gMClcblx0XHRzdHJlYW0ub2Zmc2V0Kys7XG5cblx0Zm9yIChsZXQgaT0wOyBpPHRoaXMuYnVmZmVyT2Zmc2V0cy5sZW5ndGg7IGkrKykge1xuXG5cdFx0dmFyIHN0YXJ0T2Zmc2V0ID0gc3RyZWFtLm9mZnNldCArIHRoaXMuYnVmZmVyT2Zmc2V0c1tpXTtcblx0XHR2YXIgZW5kT2Zmc2V0O1xuXG5cdFx0aWYgKGkgPCB0aGlzLmJ1ZmZlck9mZnNldHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0ZW5kT2Zmc2V0ID0gc3RyZWFtLm9mZnNldCArIHRoaXMuYnVmZmVyT2Zmc2V0c1tpKzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmRPZmZzZXQgPSBzdHJlYW0uYnl0ZUxlbmd0aDtcblx0XHR9XG5cblx0XHR0aGlzLmJ1ZmZlcnMucHVzaCh0aGlzLmJ1ZmZlci5zdWJhcnJheShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KSk7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cblxuT3RnR2VvbURlY29kZXIucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbigpIHtcblxuXHRpZiAoaXNOb2RlSlMoKSAmJiB0aGlzLmJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuXHRcdHJldHVybiB0aGlzLnJlYWROb2RlSlMoKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkV2ViKCk7XG5cdH1cbn07XG5cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlckdlb21ldHJ5fSBnZW9tXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTG12QnVmZmVyR2VvbShnZW9tKSB7XG5cblx0dmFyIG90Z0VuY29kZXIgPSBuZXcgT3RnR2VvbUVuY29kZXIoKTtcblxuXHQvL0NoZWNrIGZvciBpbnRlcmxlYXZlZCBidWZmZXIuIEZvciBub3dcblx0Ly90aGlzIGlzIHRoZSBvbmx5IG9uZSB3ZSBzdXBwb3J0XG5cdGlmICghZ2VvbS52Yikge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJVbmV4cGVjdGVkIG5vbi1pbnRlcmxlYXZlZCB2ZXJ0ZXggYnVmZmVyXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdFxuXHRjb25zdCB2YiA9IGdlb20udmI7XG5cdGNvbnN0IHZic3RyaWRlID0gZ2VvbS52YnN0cmlkZTtcblx0Y29uc3QgaWIgPSBnZW9tLmliO1xuXHRjb25zdCBpYmxpbmVzID0gZ2VvbS5pYmxpbmVzO1xuXHRjb25zdCBidWZTaXplcyA9IFt2Yi5ieXRlTGVuZ3RoLCBpYi5ieXRlTGVuZ3RoXTtcblxuXHRpZiAoaWJsaW5lcykge1xuXHRcdGJ1ZlNpemVzLnB1c2goaWJsaW5lcy5ieXRlTGVuZ3RoKTtcblx0fVxuXHRcblxuXHR2YXIgYXR0cktleXMgPSBPYmplY3Qua2V5cyhnZW9tLmF0dHJpYnV0ZXMpO1xuXG5cdHZhciBtZXNoRmxhZyA9IDA7XG5cdGlmIChnZW9tLmlzTGluZXMpXG5cdFx0bWVzaEZsYWcgPSBtZXNoRmxhZyB8IE1lc2hGbGFncy5MSU5FUztcblx0aWYgKGdlb20uaXNXaWRlTGluZXMpXG5cdFx0bWVzaEZsYWcgPSBtZXNoRmxhZyB8IE1lc2hGbGFncy5XSURFX0xJTkVTO1xuXHRpZiAoZ2VvbS5pc1BvaW50cylcblx0XHRtZXNoRmxhZyA9IG1lc2hGbGFnIHwgTWVzaEZsYWdzLlBPSU5UUztcblxuXHRvdGdFbmNvZGVyLmJlZ2luSGVhZGVyKG1lc2hGbGFnLCBhdHRyS2V5cy5sZW5ndGgsIGJ1ZlNpemVzKTtcblxuXHQvL1dyaXRlIHRoZSBhdHRyaWJ1dGVzXG5cdGZvciAodmFyIGk9MDsgaTxhdHRyS2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBhdHRyID0gZ2VvbS5hdHRyaWJ1dGVzW2F0dHJLZXlzW2ldXTtcblx0XHR2YXIgYXR0ck5hbWUgPSBhdHRyTmFtZU1hcHBlcihhdHRyS2V5c1tpXSk7XG5cblx0XHRpZiAoYXR0cktleXNbaV0gPT09IFwiaW5kZXhcIikge1xuXHRcdFx0b3RnRW5jb2Rlci5hZGRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHIsIDAsIDEpO1xuXHRcdH0gZWxzZSBpZiAoYXR0cktleXNbaV0gPT09IFwiaW5kZXhsaW5lc1wiKSB7XG5cdFx0XHRvdGdFbmNvZGVyLmFkZEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0ciwgMCwgMik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG90Z0VuY29kZXIuYWRkQXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyLCB2YnN0cmlkZSwgMCk7XG5cdFx0fVxuXG5cdH1cblxuXHRvdGdFbmNvZGVyLmVuZEhlYWRlcigpO1xuXG5cdC8vV3JpdGUgdGhlIGJ1ZmZlcnNcblxuXHQvL0J1ZmZlciAwXG5cdHZhciB0bXAgPSBCdWZmZXIuZnJvbSh2Yi5idWZmZXIsIHZiLmJ5dGVPZmZzZXQsIHZiLmJ5dGVMZW5ndGgpO1xuXHRvdGdFbmNvZGVyLmFkZEJ1ZmZlcih0bXApO1xuXG5cdC8vQnVmZmVyIDFcblx0aWYgKGdlb20uaXNMaW5lcylcblx0XHRkZWx0YUVuY29kZUluZGV4QnVmZmVyMihpYik7XG5cdGVsc2Vcblx0XHRkZWx0YUVuY29kZUluZGV4QnVmZmVyMyhpYik7XG5cblx0dG1wID0gQnVmZmVyLmZyb20oaWIuYnVmZmVyLCBpYi5ieXRlT2Zmc2V0LCBpYi5ieXRlTGVuZ3RoKTtcblx0b3RnRW5jb2Rlci5hZGRCdWZmZXIodG1wKTtcblxuXHQvL0J1ZmZlciAyXG5cdGlmIChpYmxpbmVzKSB7XG5cdFx0ZGVsdGFFbmNvZGVJbmRleEJ1ZmZlcjIoaWJsaW5lcyk7XG5cblx0XHR0bXAgPSBCdWZmZXIuZnJvbShpYmxpbmVzLmJ1ZmZlciwgaWJsaW5lcy5ieXRlT2Zmc2V0LCBpYmxpbmVzLmJ5dGVMZW5ndGgpO1xuXHRcdG90Z0VuY29kZXIuYWRkQnVmZmVyKHRtcCk7XG5cdH1cblxuXHR2YXIgYnVmID0gb3RnRW5jb2Rlci5lbmQoKTtcblxuXHRyZXR1cm4gYnVmO1xufVxuXG5cblxudmFyIHVuaXRCb3ggPSBuZXcgTG12Qm94MygpO1xudW5pdEJveC5taW4ueCA9IC0wLjU7XG51bml0Qm94Lm1pbi55ID0gLTAuNTtcbnVuaXRCb3gubWluLnogPSAtMC41O1xudW5pdEJveC5tYXgueCA9IDAuNTtcbnVuaXRCb3gubWF4LnkgPSAwLjU7XG51bml0Qm94Lm1heC56ID0gMC41O1xuXG4vL3ZhciB1bml0U3BoZXJlID0gbmV3IFRIUkVFLlNwaGVyZSgpO1xuLy91bml0U3BoZXJlLnJhZGl1cyA9IE1hdGguc3FydCgwLjUgKiAwLjUgKiAzKTtcbnZhciB1bml0U3BoZXJlID0ge1xuXHRjZW50ZXI6IHsgeDowLCB5OjAsIHo6MH0sXG5cdHJhZGl1czogTWF0aC5zcXJ0KDAuNSAqIDAuNSAqIDMpXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExtdkJ1ZmZlckdlb20oYnVmZmVyLCBza2lwRWRnZXMpIHtcblxuXHR2YXIgZGVjID0gbmV3IE90Z0dlb21EZWNvZGVyKGJ1ZmZlcik7XG5cblx0aWYgKCFkZWMucmVhZCgpKSB7XG5cdFx0Y29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBwYXJzZSBPVEcgZ2VvbWV0cnlcIik7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvL0Fzc3VtZXMgdGhlIGludGVybGVhdmVkIGJ1ZmZlciBzZXJpYWxpemF0aW9uIHdlIHVzZSBieSBkZWZhdWx0XG5cdC8vTWFwcyB0aGUgZGVjb2RlZCBkYXRhIHRvIHRoZSBtZGF0YS92YmxheW91dCBzdHJ1Y3R1cmVzIHByb2R1Y2VkIGJ5XG5cdC8vdGhlIExNViBsb2FkZXIgd29ya2VyIHRocmVhZHMuIEl0J3Mgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlIExtdkJ1ZmZlckdlb21ldHJ5IGZpZWxkc1xuXHR2YXIgbWVzaCA9IHtcblx0XHR2YmxheW91dDoge30sXG5cdFx0dmI6IG5ldyBGbG9hdDMyQXJyYXkoZGVjLmJ1ZmZlcnNbMF0uYnVmZmVyLCBkZWMuYnVmZmVyc1swXS5ieXRlT2Zmc2V0LCBkZWMuYnVmZmVyc1swXS5ieXRlTGVuZ3RoIC8gNCksXG5cdFx0aXNMaW5lczogKGRlYy5tZXNoRmxhZyAmIDB4MykgPT09IE1lc2hGbGFncy5MSU5FUyxcblx0XHRpc1dpZGVMaW5lczogKGRlYy5tZXNoRmxhZyAmIDB4MykgPT09IE1lc2hGbGFncy5XSURFX0xJTkVTLFxuXHRcdGlzUG9pbnRzOiAoZGVjLm1lc2hGbGFnICYgMHgzKSA9PT0gTWVzaEZsYWdzLlBPSU5UUyxcblx0XHRib3VuZGluZ0JveDogdW5pdEJveCxcblx0XHRib3VuZGluZ1NwaGVyZTogdW5pdFNwaGVyZVxuXHR9O1xuXG5cdC8vVE9ETzogbGluZSB3aWR0aFxuXHRsZXQgdXZDb3VudCA9IDA7XG5cblx0Zm9yICh2YXIgaT0wOyBpPGRlYy5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGF0dHIgPSBkZWMuYXR0cmlidXRlc1tpXTtcblxuXHRcdGlmIChhdHRyLm5hbWUgPT09IEF0dHJpYnV0ZU5hbWUuSW5kZXgpIHtcblx0XHRcdHZhciBpYiA9IGRlYy5idWZmZXJzWzFdO1xuXHRcdFx0aWYgKGF0dHIuYnl0ZXNQZXJJdGVtID09PSAxKSB7XG5cdFx0XHRcdG1lc2guaW5kaWNlcyA9IGliO1xuXHRcdFx0fSBlbHNlIGlmIChhdHRyLmJ5dGVzUGVySXRlbSA9PT0gMikge1xuXHRcdFx0XHRtZXNoLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoaWIuYnVmZmVyLCBpYi5ieXRlT2Zmc2V0LCBpYi5ieXRlTGVuZ3RoIC8gYXR0ci5ieXRlc1Blckl0ZW0pO1xuXHRcdFx0fSBlbHNlIGlmIChhdHRyLmJ5dGVzUGVySXRlbSA9PT0gNCkge1xuXHRcdFx0XHRtZXNoLmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoaWIuYnVmZmVyLCBpYi5ieXRlT2Zmc2V0LCBpYi5ieXRlTGVuZ3RoIC8gYXR0ci5ieXRlc1Blckl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobWVzaC5pc0xpbmVzKVxuXHRcdFx0XHRkZWx0YURlY29kZUluZGV4QnVmZmVyMihtZXNoLmluZGljZXMpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRkZWx0YURlY29kZUluZGV4QnVmZmVyMyhtZXNoLmluZGljZXMpO1xuXHRcdH0gZWxzZSBpZiAoYXR0ci5uYW1lID09PSBBdHRyaWJ1dGVOYW1lLkluZGV4RWRnZXMpIHtcblx0XHRcdGlmICghc2tpcEVkZ2VzKSB7XG5cdFx0XHRcdHZhciBpYmxpbmVzID0gZGVjLmJ1ZmZlcnNbMl07XG5cdFx0XHRcdGlmIChhdHRyLmJ5dGVzUGVySXRlbSA9PT0gMSkge1xuXHRcdFx0XHRcdG1lc2guaWJsaW5lcyA9IGlibGluZXM7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYXR0ci5ieXRlc1Blckl0ZW0gPT09IDIpIHtcblx0XHRcdFx0XHRtZXNoLmlibGluZXMgPSBuZXcgVWludDE2QXJyYXkoaWJsaW5lcy5idWZmZXIsIGlibGluZXMuYnl0ZU9mZnNldCwgaWJsaW5lcy5ieXRlTGVuZ3RoIC8gYXR0ci5ieXRlc1Blckl0ZW0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGF0dHIuYnl0ZXNQZXJJdGVtID09PSA0KSB7XG5cdFx0XHRcdFx0bWVzaC5pYmxpbmVzID0gbmV3IFVpbnQzMkFycmF5KGlibGluZXMuYnVmZmVyLCBpYmxpbmVzLmJ5dGVPZmZzZXQsIGlibGluZXMuYnl0ZUxlbmd0aCAvIGF0dHIuYnl0ZXNQZXJJdGVtKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbHRhRGVjb2RlSW5kZXhCdWZmZXIyKG1lc2guaWJsaW5lcyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBsbXZBdHRyID0gYXR0ck5hbWVUb0xNVihhdHRyLm5hbWUpO1xuXG5cdFx0XHRpZiAobG12QXR0ciA9PT0gXCJ1dlwiKSB7XG5cdFx0XHRcdHV2Q291bnQrKztcblx0XHRcdFx0aWYgKHV2Q291bnQgPiAxKSB7XG5cdFx0XHRcdFx0bG12QXR0ciArPSB1dkNvdW50LnRvU3RyaW5nKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFtZXNoLnZic3RyaWRlKVxuXHRcdFx0XHRtZXNoLnZic3RyaWRlID0gYXR0ci5pdGVtU3RyaWRlO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdC8vV2UgZXhwZWN0IGFsbCB2ZXJ0ZXggYXR0cmlidXRlcyB0byBiZSBwYWNrZWQgaW50byBvbmUgVkJcblx0XHRcdFx0aWYgKG1lc2gudmJzdHJpZGUgIT09IGF0dHIuaXRlbVN0cmlkZSlcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiVW5leHBlY3RlZCB2ZXJ0ZXggYnVmZmVyIHN0cmlkZSBtaXNtYXRjaC5cIik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhdHRyLml0ZW1PZmZzZXQgPj0gYXR0ci5pdGVtU3RyaWRlKSB7XG5cdFx0XHRcdC8vU29tZSBvbGQgKHByZS0gT2N0b2JlciAyMDE4KSBtZXNoZXMgaGF2ZSBhbiBleHRyYSBVViBhdHRyaWJ1dGUgZGVmaW5lZCBldmVuIHRob3VnaFxuXHRcdFx0XHQvL2l0J3Mgbm90IHBoeXNpY2FsbHkgaW4gdGhlIHZlcnRleCBidWZmZXIgZGF0YS4gV2Ugc2tpcCBpdCBoZXJlLlxuXHRcdFx0XHQvL0lmIHRoZSBhdHRyaWJ1dGUgb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMsIHdlIGp1c3QgaWdub3JlIGl0LlxuXHRcdFx0XHQvL2NvbnNvbGUud2FybihcIkJ1Z2d5IE9URyBtZXNoLiBJZ25vcmluZyBvdXQgb2YgYm91bmRzIGF0dHJpYnV0ZVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc2gudmJsYXlvdXRbbG12QXR0cl0gPSB7XG5cdFx0XHRcdFx0Ynl0ZXNQZXJJdGVtOiBhdHRyLmJ5dGVzUGVySXRlbSxcblx0XHRcdFx0XHRvZmZzZXQ6IGF0dHIuaXRlbU9mZnNldCxcblx0XHRcdFx0XHRub3JtYWxpemVkOiBhdHRyLm5vcm1hbGl6ZWQsXG5cdFx0XHRcdFx0aXRlbVNpemU6IGF0dHIuaXRlbVNpemVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0fVxuXG5cdHZhciBtZGF0YSA9IHtcblx0XHRtZXNoOiBtZXNoLFxuXHRcdHBhY2tJZDogMCxcblx0XHRtZXNoSW5kZXg6IDBcblx0fTtcblxuXHRyZXR1cm4gbWRhdGE7XG5cbn1cbiJdLCJuYW1lcyI6WyJpc05vZGVKUyIsIklucHV0U3RyZWFtIiwiTG12Qm94MyIsIkF0dHJpYnV0ZU5hbWUiLCJJbmRleCIsIkluZGV4RWRnZXMiLCJQb3NpdGlvbiIsIk5vcm1hbCIsIlRleHR1cmVVViIsIkNvbG9yIiwiQXR0cmlidXRlVHlwZSIsIkJZVEUiLCJTSE9SVCIsIlVCWVRFIiwiVVNIT1JUIiwiQllURV9OT1JNIiwiU0hPUlRfTk9STSIsIlVCWVRFX05PUk0iLCJVU0hPUlRfTk9STSIsIkZMT0FUIiwiSU5UIiwiVUlOVCIsIk1lc2hGbGFncyIsIlRSSUFOR0xFUyIsIkxJTkVTIiwiUE9JTlRTIiwiV0lERV9MSU5FUyIsIkxNVjJPVEdBdHRyIiwiT1RHMkxNVkF0dHIiLCJBdHRyaWJ1dGVUeXBlVG9TaXplIiwicm90YXRlIiwidHJpIiwidG1wIiwiZGVsdGFFbmNvZGVJbmRleEJ1ZmZlcjMiLCJpYiIsInRyaWFuZ2xlcyIsImkiLCJsZW5ndGgiLCJwdXNoIiwidCIsInNvcnQiLCJhIiwiYiIsImoiLCJkZWx0YUVuY29kZUluZGV4QnVmZmVyMiIsImxpbmVzIiwiZGVsdGFEZWNvZGVJbmRleEJ1ZmZlcjMiLCJkZWx0YURlY29kZUluZGV4QnVmZmVyMiIsImF0dHJOYW1lTWFwcGVyIiwiYXR0cmlidXRlTmFtZSIsIm5hbWUiLCJpbmRleE9mIiwiY29uc29sZSIsIndhcm4iLCJhdHRyTmFtZVRvTE1WIiwiYXR0ck5hbWUiLCJsbXZBdHRyIiwiZXJyb3IiLCJhdHRyVHlwZU1hcHBlciIsImF0dHIiLCJ0eXBlIiwiaXRlbVdpZHRoIiwiYnl0ZXNQZXJJdGVtIiwibm9ybWFsaXplZCIsIml0ZW1TaXplIiwiaW5kZXhUeXBlTWFwcGVyIiwiT3RnR2VvbUVuY29kZXIiLCJwcm90b3R5cGUiLCJiZWdpbkhlYWRlciIsIm1lc2hGbGFnIiwibnVtQXR0cmlidXRlcyIsImRhdGFTdHJlYW1MZW5ndGhzIiwiaGVhZGVyU2l6ZSIsIm51bUJ1ZmZlcnMiLCJ0b3RhbERhdGFTaXplIiwiYnVmZmVyIiwiQnVmZmVyIiwiYWxsb2MiLCJ3cml0ZU9mZnNldCIsIk1BR0lDIiwid3JpdGVVSW50OCIsImNoYXJDb2RlQXQiLCJ3cml0ZVVJbnQxNkxFIiwib2Zmc2V0Iiwid3JpdGVVSW50MzJMRSIsImFkZEF0dHJpYnV0ZSIsInN0cmlkZSIsImJ1ZmZlckluZGV4IiwiaXRlbU9mZnNldCIsImVuZEhlYWRlciIsImFkZEJ1ZmZlciIsImNvcHkiLCJlbmQiLCJPdGdHZW9tRGVjb2RlciIsImJ1ZiIsInJlYWRPZmZzZXQiLCJidWZmZXJPZmZzZXRzIiwiYXR0cmlidXRlcyIsImJ1ZmZlcnMiLCJyZWFkTm9kZUpTIiwibWFnaWMiLCJ0b1N0cmluZyIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50OCIsImJvZmYiLCJyZWFkVUludDMyTEUiLCJpdGVtU3RyaWRlIiwic3RhcnRPZmZzZXQiLCJlbmRPZmZzZXQiLCJzbGljZSIsInJlYWRXZWIiLCJzdHJlYW0iLCJnZXRTdHJpbmciLCJnZXRVaW50MTYiLCJnZXRVaW50OCIsImdldFVpbnQzMiIsImJ5dGVMZW5ndGgiLCJzdWJhcnJheSIsInJlYWQiLCJzZXJpYWxpemVMbXZCdWZmZXJHZW9tIiwiZ2VvbSIsIm90Z0VuY29kZXIiLCJ2YiIsInZic3RyaWRlIiwiaWJsaW5lcyIsImJ1ZlNpemVzIiwiYXR0cktleXMiLCJPYmplY3QiLCJrZXlzIiwiaXNMaW5lcyIsImlzV2lkZUxpbmVzIiwiaXNQb2ludHMiLCJmcm9tIiwiYnl0ZU9mZnNldCIsInVuaXRCb3giLCJtaW4iLCJ4IiwieSIsInoiLCJtYXgiLCJ1bml0U3BoZXJlIiwiY2VudGVyIiwicmFkaXVzIiwiTWF0aCIsInNxcnQiLCJyZWFkTG12QnVmZmVyR2VvbSIsInNraXBFZGdlcyIsImRlYyIsIm1lc2giLCJ2YmxheW91dCIsIkZsb2F0MzJBcnJheSIsImJvdW5kaW5nQm94IiwiYm91bmRpbmdTcGhlcmUiLCJ1dkNvdW50IiwiaW5kaWNlcyIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJtZGF0YSIsInBhY2tJZCIsIm1lc2hJbmRleCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/otg/OtgGeomCodec.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/otg/OtgWebSocket.js ": /*!****************************************************!*\ !*** ./src/file-loaders/lmvtk/otg/OtgWebSocket.js ***! \****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("const { WebSocketBase, STATE }=_ _webpack_require__(/*! ./WebSocketBase */ \ "./src/file-loaders/lmvtk/otg/WebSocketBase.js\");\nconst packedToBin=( __webpack_require__(/*! ./HashStrings */ \ "./src/file-loaders/lmvtk/otg/HashStrings.js\").packedToBin);\nconst binToPackedString=( __webpack_require__(/*! ./HashStrings */ \ "./src/file-loaders/lmvtk/otg/HashStrings.js\").binToPackedString);\n\n//OTG web socket protocol.\nclass OtgWs extends WebSocketBase {\n\n //Packed message format, where the response from the server may contain multiple items in the same\n //buffer.\n /*\n The format is as follows:\n Bytes Meaning\n ------------------------------\n 0-3 Magic number. The bytes 'OPK1'\n 4-7 Currently unused flags + resource type (ASCII 'm' or 'g') in byte 0 of this integer.\n 8-11 Number of items in the message stream. Little endian.\n 12-15 Offset of the first item in the data buffer (first item is implicitly at offset 0, so this is always zero)\n 16-19 Offset of the second item in the data buffer\n 20-... etc... subsequent offsets, one per item\n ...\n Remaining bytes: all items combined into single buffer\n */\n\n _decodeMessage(buffer) {\n const prefixLength=1 2;\n\n const headerInt=n ew Int32Array(buffer, 0, prefixLength / 4);\n\n if (headerInt[0] !==0 x314B504F) {\n console.error(\ "Invalid message format\", headerInt[0].toString(16), headerInt[1], buffer);\n return;\n }\n\n const resourceType=S tring.fromCharCode(headerInt[1] & 0xff);\n\n const numItems=h eaderInt[2];\n const offsets=n ew Int32Array(buffer, prefixLength, numItems);\n\n const baseOffset=p refixLength + numItems * 4;\n const items=n ew Uint8Array(buffer, baseOffset);\n\n const hashes=[ ];\n const lineageUrns=[ ];\n const arrays=[ ];\n\n for (let i=0 ; i < offsets.length; i++) {\n const start=o ffsets[i];\n const end=i < offsets.length - 1 ? offsets[i + 1] : items.byteLength;\n\n const hash=b inToPackedString(items, start, 20);\n const data=i tems.subarray(start + 20, end);\n\n this.numRequestsReceived++;\n if (resourceType===\ "e\") {\n // The first four bytes are a HTTP-statuscode-like error code. It doesn 't add anything to the message so we ignore it.\n // See https://git.autodesk.com/A360/platform-ds-ss/blob/6c439e82f3138eed3935b68096d2d980ffe95616/src/ws-server/ws-server.js#L310\n let errorMessage = new TextDecoder().decode(data.subarray(4));\n errorMessage = \"The service returned the following message: \" + errorMessage;\n let actualResourceType = this.inFlightRequests.get(hash).type;\n this.onResourceFailed(hash, actualResourceType, errorMessage);\n }\n hashes.push(hash);\n lineageUrns.push(this.inFlightRequests.get(hash).lineageUrn);\n arrays.push(data);\n this.inFlightRequests.delete(hash);\n }\n if (resourceType === \"e\") {\n return;\n }\n this.onResourcesReceived(hashes, lineageUrns, arrays, resourceType);\n }\n\n\n _flushSendQueue() {var _this$ws;\n if (((_this$ws = this.ws) === null || _this$ws === void 0 ? void 0 : _this$ws.readyState) !== STATE.OPEN) {\n return;\n }\n\n for (const [accountId, pendingsSendsOfAccount] of this._pendingSends) {\n\n // Set accountId for the following messages\n if (this.accountIdSent !== accountId) {\n this.ws.send(\"/account_id/\" + accountId);\n this.accountIdSent = accountId;\n }\n\n for (const [type, msgs] of pendingsSendsOfAccount) {\n if (!msgs.length)\n continue;\n\n this.numRequestsSent += msgs.length;\n\n //Send all hashes collected in requestResource in a single shot websocket message\n\n //Enlarge the accumulation buffer if needed\n const len = 1 + msgs.length * 20;\n if (this.msgBuffer.length < len) {\n this.msgBuffer = new Uint8Array(len);\n }\n\n this.msgBuffer[0] = type.charCodeAt(0);\n for (let i = 0; i < msgs.length; i++) {\n packedToBin(msgs[i], this.msgBuffer, 1 + i * 20);\n }\n this.ws.send(new Uint8Array(this.msgBuffer.buffer, 0, len));\n }\n }\n this._pendingSends.clear();\n this._numPendingSends = 0;\n }\n\n // @param {string} url - request url\n // @param {string} lineageUrn - lineage urn of the model\n // @param {string} hash - corresponding hash\n // @param {string} type - \"m\" or \"g\" (material or geometry)\n // @param {any} queryParams - additional data passed back into onConnectionFailed (currently only used for the HTTP fallback)\n requestResource(url, lineageUrn, hash, type, queryParams) {\n if (this.hasPermanentError) {\n console.error(\"requestResource called on unusable WebSocket\");\n return;\n }\n\n const wspath = url.slice(url.indexOf(\"/cdn/\") + 5);\n const accountId = wspath.split(\"/\")[1];\n\n if (!this._pendingSends.has(accountId)) {\n this._pendingSends.set(accountId, new Map([\n [\"g\", []],\n [\"m\", []]]\n ));\n }\n this._pendingSends.get(accountId).get(type).push(hash);\n this._numPendingSends++;\n this.inFlightRequests.set(hash, { url: url, lineageUrn: lineageUrn, type: type, queryParams: queryParams });\n }\n}\n\nmodule.exports.OtgWs = OtgWs;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL290Zy9PdGdXZWJTb2NrZXQuanMiLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxFQUFDQSxhQUFhLEVBQUVDLEtBQUssRUFBQyxHQUFHQyxtQkFBTyxDQUFDLHNFQUFpQixDQUFDO0FBQ3pELE1BQU1DLFdBQVcsR0FBR0QscUdBQW9DO0FBQ3hELE1BQU1FLGlCQUFpQixHQUFHRiwyR0FBMEM7O0FBRXBFO0FBQ0EsTUFBTUcsS0FBSyxTQUFTTCxhQUFhLENBQUM7O0VBRTlCO0VBQ0E7RUFDQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFSU0sY0FBY0EsQ0FBQ0MsTUFBTSxFQUFFO0lBQ25CLE1BQU1DLFlBQVksR0FBRyxFQUFFOztJQUV2QixNQUFNQyxTQUFTLEdBQUcsSUFBSUMsVUFBVSxDQUFDSCxNQUFNLEVBQUUsQ0FBQyxFQUFFQyxZQUFZLEdBQUcsQ0FBQyxDQUFDOztJQUU3RCxJQUFJQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxFQUFFO01BQzdCRSxPQUFPLENBQUNDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRUgsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUVKLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRUYsTUFBTSxDQUFDO01BQ3hGO0lBQ0o7O0lBRUEsTUFBTU8sWUFBWSxHQUFHQyxNQUFNLENBQUNDLFlBQVksQ0FBQ1AsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7SUFFN0QsTUFBTVEsUUFBUSxHQUFHUixTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU1TLE9BQU8sR0FBRyxJQUFJUixVQUFVLENBQUNILE1BQU0sRUFBRUMsWUFBWSxFQUFFUyxRQUFRLENBQUM7O0lBRTlELE1BQU1FLFVBQVUsR0FBR1gsWUFBWSxHQUFHUyxRQUFRLEdBQUcsQ0FBQztJQUM5QyxN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QUNsRCxNQUFNbEIsU0FBUyxHQUFHZ0IsTUFBTSxDQUFDRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV0QyxJQUFJLENBQUMsSUFBSSxDQUFDakIsYUFBYSxDQUFDa0IsR0FBRyxDQUFDcEIsU0FBUyxDQUFDLEVBQUU7TUFDcEMsSUFBSSxDQUFDRSxhQUFhLENBQUNtQixHQUFHLENBQUNyQixTQUFTLEVBQUUsSUFBSXNCLEdBQUcsQ0FBQztNQUN0QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7TUFDVCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7TUFDWixDQUFDLENBQUM7SUFDUDtJQUNBLElBQUksQ0FBQ3BCLGFBQWEsQ0FBQ2QsR0FBRyxDQUFDWSxTQUFTLENBQUMsQ0FBQ1osR0FBRyxDQUFDQyxJQUFJLENBQUMsQ0FBQ0UsSUFBSSxDQUFDWixJQUFJLENBQUM7SUFDdEQsSUFBSSxDQUFDZ0MsZ0JBQWdCLEVBQUU7SUFDdkIsSUFBSSxDQUFDeEIsZ0JBQWdCLENBQUNrQyxHQUFHLENBQUMxQyxJQUFJLEVBQUUsRUFBRWtDLEdBQUcsRUFBRUEsR0FBRyxFQUFFckIsVUFBVSxFQUFFQSxVQUFVLEVBQUVILElBQUksRUFBRUEsSUFBSSxFQUFFeUIsV0FBVyxFQUFFQSxXQUFXLENBQUMsQ0FBQyxDQUFDO0VBQy9HO0FBQ0o7O0FBRUFTLG9CQUFvQixHQUFHckUsS0FBSyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvb3RnL090Z1dlYlNvY2tldC5qcz9lNjYzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtXZWJTb2NrZXRCYXNlLCBTVEFURX0gPSByZXF1aXJlKCcuL1dlYlNvY2tldEJhc2UnKTtcbmNvbnN0IHBhY2tlZFRvQmluID0gcmVxdWlyZShcIi4vSGFzaFN0cmluZ3NcIikucGFja2VkVG9CaW47XG5jb25zdCBiaW5Ub1BhY2tlZFN0cmluZyA9IHJlcXVpcmUoXCIuL0hhc2hTdHJpbmdzXCIpLmJpblRvUGFja2VkU3RyaW5nO1xuXG4vL09URyB3ZWIgc29ja2V0IHByb3RvY29sLlxuY2xhc3MgT3RnV3MgZXh0ZW5kcyBXZWJTb2NrZXRCYXNlIHtcblxuICAgIC8vUGFja2VkIG1lc3NhZ2UgZm9ybWF0LCB3aGVyZSB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIG1heSBjb250YWluIG11bHRpcGxlIGl0ZW1zIGluIHRoZSBzYW1lXG4gICAgLy9idWZmZXIuXG4gICAgLypcbiAgICAgICAgVGhlIGZvcm1hdCBpcyBhcyBmb2xsb3dzOlxuXG4gICAgICAgIEJ5dGVzICAgICAgTWVhbmluZ1xuICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgMC0zICAgICAgICBNYWdpYyBudW1iZXIuIFRoZSBieXRlcyAnT1BLMSdcbiAgICAgICAgNC03ICAgICAgICBDdXJyZW50bHkgdW51c2VkIGZsYWdzICsgcmVzb3VyY2UgdHlwZSAoQVNDSUkgJ20nIG9yICdnJykgaW4gYnl0ZSAwIG9mIHRoaXMgaW50ZWdlci5cbiAgICAgICAgOC0xMSAgICAgICBOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIG1lc3NhZ2Ugc3RyZWFtLiBMaXR0bGUgZW5kaWFuLlxuICAgICAgICAxMi0xNSAgICAgIE9mZnNldCBvZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgZGF0YSBidWZmZXIgKGZpcnN0IGl0ZW0gaXMgaW1wbGljaXRseSBhdCBvZmZzZXQgMCwgc28gdGhpcyBpcyBhbHdheXMgemVybylcbiAgICAgICAgMTYtMTkgICAgICBPZmZzZXQgb2YgdGhlIHNlY29uZCBpdGVtIGluIHRoZSBkYXRhIGJ1ZmZlclxuICAgICAgICAyMC0uLi4gICAgIGV0Yy4uLiBzdWJzZXF1ZW50IG9mZnNldHMsIG9uZSBwZXIgaXRlbVxuICAgICAgICAuLi5cbiAgICAgICAgUmVtYWluaW5nIGJ5dGVzOiBhbGwgaXRlbXMgY29tYmluZWQgaW50byBzaW5nbGUgYnVmZmVyXG4gICAgKi9cbiAgICBfZGVjb2RlTWVzc2FnZShidWZmZXIpIHtcbiAgICAgICAgY29uc3QgcHJlZml4TGVuZ3RoID0gMTI7XG5cbiAgICAgICAgY29uc3QgaGVhZGVySW50ID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCAwLCBwcmVmaXhMZW5ndGggLyA0KTtcblxuICAgICAgICBpZiAoaGVhZGVySW50WzBdICE9PSAweDMxNEI1MDRGKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBtZXNzYWdlIGZvcm1hdFwiLCBoZWFkZXJJbnRbMF0udG9TdHJpbmcoMTYpLCBoZWFkZXJJbnRbMV0sIGJ1ZmZlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGhlYWRlckludFsxXSAmIDB4ZmYpO1xuXG4gICAgICAgIGNvbnN0IG51bUl0ZW1zID0gaGVhZGVySW50WzJdO1xuICAgICAgICBjb25zdCBvZmZzZXRzID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCBwcmVmaXhMZW5ndGgsIG51bUl0ZW1zKTtcblxuICAgICAgICBjb25zdCBiYXNlT2Zmc2V0ID0gcHJlZml4TGVuZ3RoICsgbnVtSXRlbXMgKiA0O1xuICAgICAgICBjb25zdCBpdGVtcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgYmFzZU9mZnNldCk7XG5cbiAgICAgICAgY29uc3QgaGFzaGVzID0gW107XG4gICAgICAgIGNvbnN0IGxpbmVhZ2VVcm5zID0gW107XG4gICAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxvZmZzZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IG9mZnNldHNbaV07XG4gICAgICAgICAgICBjb25zdCBlbmQgPSAoKGkgPCBvZmZzZXRzLmxlbmd0aCAtIDEpID8gb2Zmc2V0c1tpICsgMV0gOiBpdGVtcy5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgaGFzaCA9IGJpblRvUGFja2VkU3RyaW5nKGl0ZW1zLCBzdGFydCwgMjApO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGl0ZW1zLnN1YmFycmF5KHN0YXJ0ICsgMjAsIGVuZCk7XG5cbiAgICAgICAgICAgIHRoaXMubnVtUmVxdWVzdHNSZWNlaXZlZCsrO1xuICAgICAgICAgICAgaWYgKHJlc291cmNlVHlwZSA9PT0gXCJlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgZm91ciBieXRlcyBhcmUgYSBIVFRQLXN0YXR1c2NvZGUtbGlrZSBlcnJvciBjb2RlLiBJdCBkb2Vzbid0IGFkZCBhbnl0aGluZyB0byB0aGUgbWVzc2FnZSBzbyB3ZSBpZ25vcmUgaXQuXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0LmF1dG9kZXNrLmNvbS9BMzYwL3BsYXRmb3JtLWRzLXNzL2Jsb2IvNmM0MzllODJmMzEzOGVlZDM5MzViNjgwOTZkMmQ5ODBmZmU5NTYxNi9zcmMvd3Mtc2VydmVyL3dzLXNlcnZlci5qcyNMMzEwXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkYXRhLnN1YmFycmF5KDQpKTtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRoZSBzZXJ2aWNlIHJldHVybmVkIHRoZSBmb2xsb3dpbmcgbWVzc2FnZTogXCIgKyBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgbGV0IGFjdHVhbFJlc291cmNlVHlwZSA9IHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5nZXQoaGFzaCkudHlwZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmVzb3VyY2VGYWlsZWQoaGFzaCwgYWN0dWFsUmVzb3VyY2VUeXBlLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzaGVzLnB1c2goaGFzaCk7XG4gICAgICAgICAgICBsaW5lYWdlVXJucy5wdXNoKHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5nZXQoaGFzaCkubGluZWFnZVVybik7XG4gICAgICAgICAgICBhcnJheXMucHVzaChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5kZWxldGUoaGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc291cmNlVHlwZSA9PT0gXCJlXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uUmVzb3VyY2VzUmVjZWl2ZWQoaGFzaGVzLCBsaW5lYWdlVXJucywgYXJyYXlzLCByZXNvdXJjZVR5cGUpO1xuICAgIH1cblxuXG4gICAgX2ZsdXNoU2VuZFF1ZXVlKCkge1xuICAgICAgICBpZiAodGhpcy53cz8ucmVhZHlTdGF0ZSAhPT0gU1RBVEUuT1BFTikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbYWNjb3VudElkLCBwZW5kaW5nc1NlbmRzT2ZBY2NvdW50XSBvZiB0aGlzLl9wZW5kaW5nU2VuZHMpIHtcblxuICAgICAgICAgICAgLy8gU2V0IGFjY291bnRJZCBmb3IgdGhlIGZvbGxvd2luZyBtZXNzYWdlc1xuICAgICAgICAgICAgaWYgKHRoaXMuYWNjb3VudElkU2VudCAhPT0gYWNjb3VudElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cy5zZW5kKFwiL2FjY291bnRfaWQvXCIgKyBhY2NvdW50SWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudElkU2VudCA9IGFjY291bnRJZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBbdHlwZSwgbXNnc10gb2YgcGVuZGluZ3NTZW5kc09mQWNjb3VudCkge1xuICAgICAgICAgICAgICAgIGlmICghbXNncy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5udW1SZXF1ZXN0c1NlbnQgKz0gbXNncy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAvL1NlbmQgYWxsIGhhc2hlcyBjb2xsZWN0ZWQgaW4gcmVxdWVzdFJlc291cmNlIGluIGEgc2luZ2xlIHNob3Qgd2Vic29ja2V0IG1lc3NhZ2VcblxuICAgICAgICAgICAgICAgIC8vRW5sYXJnZSB0aGUgYWNjdW11bGF0aW9uIGJ1ZmZlciBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSAxICsgbXNncy5sZW5ndGgqMjA7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXNnQnVmZmVyLmxlbmd0aCA8IGxlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5tc2dCdWZmZXJbMF0gPSB0eXBlLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPG1zZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcGFja2VkVG9CaW4obXNnc1tpXSwgdGhpcy5tc2dCdWZmZXIsIDEgKyBpICogMjApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLndzLnNlbmQobmV3IFVpbnQ4QXJyYXkodGhpcy5tc2dCdWZmZXIuYnVmZmVyLCAwLCBsZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wZW5kaW5nU2VuZHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fbnVtUGVuZGluZ1NlbmRzID0gMDtcbiAgICB9XG5cbiAgICAvLyBAcGFyYW0ge3N0cmluZ30gICB1cmwgLSByZXF1ZXN0IHVybFxuICAgIC8vIEBwYXJhbSB7c3RyaW5nfSAgIGxpbmVhZ2VVcm4gLSBsaW5lYWdlIHVybiBvZiB0aGUgbW9kZWxcbiAgICAvLyBAcGFyYW0ge3N0cmluZ30gICBoYXNoIC0gY29ycmVzcG9uZGluZyBoYXNoXG4gICAgLy8gQHBhcmFtIHtzdHJpbmd9ICAgdHlwZSAtIFwibVwiIG9yIFwiZ1wiIChtYXRlcmlhbCBvciBnZW9tZXRyeSlcbiAgICAvLyBAcGFyYW0ge2FueX0gICAgICBxdWVyeVBhcmFtcyAtIGFkZGl0aW9uYWwgZGF0YSBwYXNzZWQgYmFjayBpbnRvIG9uQ29ubmVjdGlvbkZhaWxlZCAoY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgdGhlIEhUVFAgZmFsbGJhY2spXG4gICAgcmVxdWVzdFJlc291cmNlKHVybCwgbGluZWFnZVVybiwgaGFzaCwgdHlwZSwgcXVlcnlQYXJhbXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUGVybWFuZW50RXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJyZXF1ZXN0UmVzb3VyY2UgY2FsbGVkIG9uIHVudXNhYmxlIFdlYlNvY2tldFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3Qgd3NwYXRoID0gdXJsLnNsaWNlKHVybC5pbmRleE9mKFwiL2Nkbi9cIikgKyA1KTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gd3NwYXRoLnNwbGl0KFwiL1wiKVsxXTtcbiAgICAgICAgXG4gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1NlbmRzLmhhcyhhY2NvdW50SWQpKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nU2VuZHMuc2V0KGFjY291bnRJZCwgbmV3IE1hcChbXG4gICAgICAgICAgICAgICAgW1wiZ1wiLCBbXV0sXG4gICAgICAgICAgICAgICAgW1wibVwiLCBbXV0sXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGVuZGluZ1NlbmRzLmdldChhY2NvdW50SWQpLmdldCh0eXBlKS5wdXNoKGhhc2gpO1xuICAgICAgICB0aGlzLl9udW1QZW5kaW5nU2VuZHMrKztcbiAgICAgICAgdGhpcy5pbkZsaWdodFJlcXVlc3RzLnNldChoYXNoLCB7IHVybDogdXJsLCBsaW5lYWdlVXJuOiBsaW5lYWdlVXJuLCB0eXBlOiB0eXBlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMgfSk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5PdGdXcyA9IE90Z1dzOyJdLCJuYW1lcyI6WyJXZWJTb2NrZXRCYXNlIiwiU1RBVEUiLCJyZXF1aXJlIiwicGFja2VkVG9CaW4iLCJiaW5Ub1BhY2tlZFN0cmluZyIsIk90Z1dzIiwiX2RlY29kZU1lc3NhZ2UiLCJidWZmZXIiLCJwcmVmaXhMZW5ndGgiLCJoZWFkZXJJbnQiLCJJbnQzMkFycmF5IiwiY29uc29sZSIsImVycm9yIiwidG9TdHJpbmciLCJyZXNvdXJjZVR5cGUiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJudW1JdGVtcyIsIm9mZnNldHMiLCJiYXNlT2Zmc2V0IiwiaXRlbXMiLCJVaW50OEFycmF5IiwiaGFzaGVzIiwibGluZWFnZVVybnMiLCJhcnJheXMiLCJpIiwibGVuZ3RoIiwic3RhcnQiLCJlbmQiLCJieXRlTGVuZ3RoIiwiaGFzaCIsImRhdGEiLCJzdWJhcnJheSIsIm51bVJlcXVlc3RzUmVjZWl2ZWQiLCJlcnJvck1lc3NhZ2UiLCJUZXh0RGVjb2RlciIsImRlY29kZSIsImFjdHVhbFJlc291cmNlVHlwZSIsImluRmxpZ2h0UmVxdWVzdHMiLCJnZXQiLCJ0eXBlIiwib25SZXNvdXJjZUZhaWxlZCIsInB1c2giLCJsaW5lYWdlVXJuIiwiZGVsZXRlIiwib25SZXNvdXJjZXNSZWNlaXZlZCIsIl9mbHVzaFNlbmRRdWV1ZSIsIl90aGlzJHdzIiwid3MiLCJyZWFkeVN0YXRlIiwiT1BFTiIsImFjY291bnRJZCIsInBlbmRpbmdzU2VuZHNPZkFjY291bnQiLCJfcGVuZGluZ1NlbmRzIiwiYWNjb3VudElkU2VudCIsInNlbmQiLCJtc2dzIiwibnVtUmVxdWVzdHNTZW50IiwibGVuIiwibXNnQnVmZmVyIiwiY2hhckNvZGVBdCIsImNsZWFyIiwiX251bVBlbmRpbmdTZW5kcyIsInJlcXVlc3RSZXNvdXJjZSIsInVybCIsInF1ZXJ5UGFyYW1zIiwiaGFzUGVybWFuZW50RXJyb3IiLCJ3c3BhdGgiLCJzbGljZSIsImluZGV4T2YiLCJzcGxpdCIsImhhcyIsInNldCIsIk1hcCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/otg/OtgWebSocket.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/otg/WebSocketBase.js": /*!*****************************************************!*\ !*** ./src/file-loaders/lmvtk/otg/WebSocketBase.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("const WebSocket = __webpack_require__(/*! isomorphic-ws */ \"./node_modules/isomorphic-ws/browser.js\");\n\n//Copied from compat.js to avoid importing ES6 exports from plain node.js forge-tools.\nconst isBrowser = typeof navigator !== \"undefined\";\nconst isNodeJS = function () {\n return !isBrowser;\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState\nconst STATE = Object.freeze({\n CONNECTING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3\n});\n\n/** A base class for web socket based resource loading.\n * \n * Since this class has a history of race conditions and multiple attempts to fix them, here are some notes.\n * \n * States a WebSocketBase can be in:\n * ws === null: Constructor OR closeWebSocket called, but not _openWebSocket\n * ws.readyState === CONNECTING: _openWebSocket called, but not onopen.\n * ws.readyState === OPEN: onopen called, but not closeWebSocket or onclose. \n * ws.readyState === CLOSING: server/browser initiated a close, but onclose was not called yet. This is unexpected and will go to one of the error states.\n * ws.readyState === CLOSED && retryEvent: there was an unexpected error, and _openWebSocket will be called again shortly.\n * hasPermanentError: there was an unrecoverable error. Either WebSockets are not supported, or all retries to open one have failed.\n * \n * Apart from OtgLoadWorker calling any of the API methods at any point, be aware of the following events:\n * * retryEvent firing\n * * The browser closes the WebSocket because the internet connection broke down. (code: 1006)\n * * The server closes the WebSocket after one minute without requests. (code: 1000, reason: 'Idle timeout ')\n * * When using on-demand loading, this is not an error. The WebSocket must be reopened when requestResource is called again.\n * * The server closes the WebSocket if a resource was requested that was not authorized. (code: 1007, reason: '401 (Unauthorized) ')\n * * Any other internal server error.\n * * Also, be aware that closeWebSocket might never be called when on-demand loading is active.\n * \n * When the WebSocket is closing, one task switches it to CLOSING without calling any handler, and another one later switches\n * it to CLOSED and calls the close handler, see https://websockets.spec.whatwg.org/#feedback-from-the-protocol.\n * Since this is done in a task, the state cannot suddenly change while any of our code is running.\n * It's ok that there 's no onclosing handler: the CLOSING state will make every send() a noop, and our close/error handler will re-issue all requests.\n */\nclass WebSocketBase {\n\n constructor(url, queryParams, headers, onResourcesReceived, onResourceFailed, onConnectionFailed) {\n\n this.ws = null;\n this.url = url;\n this.queryParams = queryParams;\n this.headers = headers;\n this.numRequestsSent = 0;\n this.numRequestsReceived = 0;\n this.authorizeUrns = new Set();\n this._retriedOpen = 0;\n this.retryEvent = null;\n this.hasPermanentError = typeof WebSocket === \"undefined\" || !this.url;\n this.lastError = null;\n this.lastErrorNumInFlight = null;\n this.onResourcesReceived = onResourcesReceived;\n this.onResourceFailed = onResourceFailed;\n this.onConnectionFailed = onConnectionFailed;\n\n this._pendingSends = new Map();\n this._numPendingSends = 0;\n this.inFlightRequests = new Map();\n\n this.msgBuffer = new Uint8Array(201);\n }\n\n addAuthorizeUrn(authorizeUrn) {var _this$ws;\n if (this.authorizeUrns.has(authorizeUrn) || this.hasPermanentError) {\n return;\n }\n // Since this is also called on every requestResource, it's not strictly necessary here.\n // This is a performance optimization, to start opening the web socket as early as possible.\n this._openWebSocket();\n\n if (((_this$ws=t his.ws)===n ull || _this$ws===v oid 0 ? void 0 : _this$ws.readyState)===S TATE.OPEN) {\n // Since we won 't go through the onOpen handler anymore, authorize the new urns directly.\n this.ws.send(\"/auth/\" + authorizeUrn);\n }\n\n this.authorizeUrns.add(authorizeUrn);\n }\n\n _openWebSocket() {\n if (this.ws || this.hasPermanentError) {\n return;\n }\n\n //http and 7124->7125 are here to support local debugging, when the endpoints are overridden to\n //point directly to local node.js process(es).\n let url = this.url.replace(\"https:\", \"wss:\").replace(\"http:\", \"ws:\").replace(\":7124\", \":7125\");\n\n if (this.queryParams) {\n url += \"?\" + this.queryParams;\n }\n\n this.ws = new WebSocket(url, undefined, isNodeJS() ? { headers: this.headers } : {});\n\n this.ws.onopen = () => {\n this.accountIdSent = null;\n this.ws.binaryType = \"arraybuffer\";\n\n //On web clients that do not use the cookie approach, the headers\n //will not get sent (unlike on node.js WebSocket implementation\n //so we send the Authorization first thing after open\n if (!isNodeJS()) {\n this.ws.send(\"/headers/\" + JSON.stringify(this.headers));\n }\n\n //Tell the server that we expect batched responses\n this.ws.send(\"/options/\" + JSON.stringify({ batch_responses: true, report_errors: true }));\n\n //Tell the server to authorize the web socket\n //for the URNs that we will be loading\n for (const urn of this.authorizeUrns) {\n this.ws.send(\"/auth/\" + urn);\n }\n };\n\n this.ws.onmessage = (event) => this._decodeMessage(event.data);\n\n // We do not set onerror, since every error event is followed by a close event, so onclose is enough.\n // This will only be run for unexpected close events, because we reset the close event handler before closing the web socket intentionally \n this.ws.onclose = (event) => {\n\n // Close code 1000 means NORMAL_CLOSURE, currently only used by the server on idle timeout. \n // This is not an error and we don't wan 't to retry in this case.\n if (event.code === 1000 && this.inFlightRequests.size === 0) {\n this.closeWebSocket(); // It's already closed, but we want to also reset the state.\n return;\n }\n\n console.warn(\n \ "Abnormal socket close.\",\n \ "pending sends:\", this._numPendingSends,\n \ "in flight\", this.inFlightRequests.size,\n \ "event:\", event\n );\n\n this._pendingSends=n ew Map();\n this._numPendingSends=0 ;\n\n // try again opening later or give up\n if (this._retriedOpen < 3) {\n console.warn(\ "Retrying\");\n this._retriedOpen++;\n this.retryEvent=s etTimeout(()=> {\n this.retryEvent = null;\n this.ws = null;\n this._openWebSocket();\n }, 2000);\n } else {\n console.error(\"Too many WebSocket failures. Giving up.\");\n this.hasPermanentError = true;\n this.lastError = event;\n this.lastErrorNumInFlight = this.inFlightRequests.size;\n }\n\n this.onConnectionFailed(this.inFlightRequests);\n this.inFlightRequests.clear();\n };\n }\n\n /** This should be called when no new requests are expected. */\n closeWebSocket() {\n if (!this.ws) {\n return;\n }\n // Violating this assert won't break something here, but in-flight requests will be lost\n // and pending requests will be issued on next _openWebSocket, which is probably not intended\n console.assert(this.inFlightRequests.size === 0, \"closeWebSocket called even though there are requests in flight\");\n\n if (this.retryEvent) {\n clearTimeout(this.retryEvent);\n this.retryEvent = null;\n }\n\n // We don't care if anything goes wrong past this point.\n // By unsetting this on regular close, any call to our onclose handler is unexpected and is an error.\n // This seemed more robust than checking for our closing message in the close handler.\n this.ws.onclose = null;\n\n const ws = this.ws;\n if (this.ws.readyState === STATE.CONNECTING) {\n // We could just close the connection right away, which is allowed by the spec.\n // However, browsers will print a warning which is not nice, in particular for small cached models that load\n // faster than the WS open, this would mean a fair bit of console spam. So we wait for the WS to open first.\n this.ws.onopen = () => ws.close(1000, \"no more work expected\"); // close code 1000 means normal closure\n } else {\n // If this.ws is CLOSING or CLOSED, close() is a NOOP.\n this.ws.close(1000, \"no more work expected\");\n }\n this.ws = null;\n }\n\n _decodeMessage(buffer) {\n throw new Error('Implement!');\n }\n\n _flushSendQueue() {\n throw new Error('Implement!');\n }\n\n /** This must not be called before a corresponding call to addAuthorizeUrn, otherwise the server will close the WebSocket\n * and the WebSocketBase will go into the error state after retrying. */\n requestResource() {\n throw new Error('Implement!');\n }\n}\n\nmodule.exports.WebSocketBase = WebSocketBase;\nmodule.exports.STATE = STATE;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL290Zy9XZWJTb2NrZXRCYXNlLmpzIiwibWFwcGluZ3MiOiJBQUFBLE1BQU1BLFNBQVMsR0FBR0MsbUJBQU8sQ0FBQyw4REFBZSxDQUFDOztBQUUxQztBQUNBLE1BQU1DLFNBQVMsR0FBSSxPQUFPQyxTQUFTLEtBQUssV0FBWTtBQUNwRCxNQUFNQyxRQUFRLEdBQUcsU0FBQUEsQ0FBQSxFQUFXO0VBQ3hCLE9BQU8sQ0FBQ0YsU0FBUztBQUNyQixDQUFDOztBQUVEO0FBQ0EsTUFBTUcsS0FBSyxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQztFQUN4QkMsVUFBVSxFQUFFLENBQUM7RUFDYkMsSUFBSSxFQUFFLENBQUM7RUFDUEMsT0FBTyxFQUFFLENBQUM7RUFDVkMsTUFBTSxFQUFFO0FBQ1osQ0FBQyxDQUFDOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQyxhQUFhLENBQUM7O0VBRWhCQyxXQUFXQSxDQUFDQyxHQUFHLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxFQUFFQyxtQkFBbUIsRUFBRUMsZ0JBQWdCLEVBQUVDLGtCQUFrQixFQUFFOztJQUU5RixJQUFJLENBQUNDLEVBQUUsR0FBRyxJQUFJO0lBQ2QsSUFBSSxDQUFDTixHQUFHLEdBQUdBLEdBQUc7SUFDZCxJQUFJLENBQUNDLFdBQVcsR0FBR0EsV0FBVztJQUM5QixJQUFJLENBQUNDLE9BQU8sR0FBR0EsT0FBTztJQUN0QixJQUFJLENBQUNLLGVBQWUsR0FBRyxDQUFDO0lBQ3hCLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsQ0FBQztJQUM1QixJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUNDLFlBQVksR0FB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dUIsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQyxNQUFNO01BQ0g7TUFDQSxJQUFJLENBQUNqRCxFQUFFLENBQUNpRCxLQUFLLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDO0lBQ2hEO0lBQ0EsSUFBSSxDQUFDakQsRUFBRSxHQUFHLElBQUk7RUFDbEI7O0VBRUFvQyxjQUFjQSxDQUFDYyxNQUFNLEVBQUU7SUFDbkIsTUFBTSxJQUFJQyxLQUFLLENBQUMsWUFBWSxDQUFDO0VBQ2pDOztFQUVBQyxlQUFlQSxDQUFBLEVBQUc7SUFDZCxNQUFNLElBQUlELEtBQUssQ0FBQyxZQUFZLENBQUM7RUFDakM7O0VBRUE7QUFDSjtFQUNJRSxlQUFlQSxDQUFBLEVBQUc7SUFDZCxNQUFNLElBQUlGLEtBQUssQ0FBQyxZQUFZLENBQUM7RUFDakM7QUFDSjs7QUFFQUcsNEJBQTRCLEdBQUc5RCxhQUFhO0FBQzVDOEQsb0JBQW9CLEdBQUdyRSxLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9vdGcvV2ViU29ja2V0QmFzZS5qcz83ZGNiIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFdlYlNvY2tldCA9IHJlcXVpcmUoJ2lzb21vcnBoaWMtd3MnKTtcblxuLy9Db3BpZWQgZnJvbSBjb21wYXQuanMgdG8gYXZvaWQgaW1wb3J0aW5nIEVTNiBleHBvcnRzIGZyb20gcGxhaW4gbm9kZS5qcyBmb3JnZS10b29scy5cbmNvbnN0IGlzQnJvd3NlciA9ICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiKTtcbmNvbnN0IGlzTm9kZUpTID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICFpc0Jyb3dzZXI7XG59O1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViU29ja2V0L3JlYWR5U3RhdGVcbmNvbnN0IFNUQVRFID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgQ09OTkVDVElORzogMCxcbiAgICBPUEVOOiAxLFxuICAgIENMT1NJTkc6IDIsXG4gICAgQ0xPU0VEOiAzXG59KTtcblxuLyoqIEEgYmFzZSBjbGFzcyBmb3Igd2ViIHNvY2tldCBiYXNlZCByZXNvdXJjZSBsb2FkaW5nLlxuICogXG4gKiBTaW5jZSB0aGlzIGNsYXNzIGhhcyBhIGhpc3Rvcnkgb2YgcmFjZSBjb25kaXRpb25zIGFuZCBtdWx0aXBsZSBhdHRlbXB0cyB0byBmaXggdGhlbSwgaGVyZSBhcmUgc29tZSBub3Rlcy5cbiAqIFxuICogU3RhdGVzIGEgV2ViU29ja2V0QmFzZSBjYW4gYmUgaW46XG4gKiB3cyA9PT0gbnVsbDogQ29uc3RydWN0b3IgT1IgY2xvc2VXZWJTb2NrZXQgY2FsbGVkLCBidXQgbm90IF9vcGVuV2ViU29ja2V0XG4gKiB3cy5yZWFkeVN0YXRlID09PSBDT05ORUNUSU5HOiBfb3BlbldlYlNvY2tldCBjYWxsZWQsIGJ1dCBub3Qgb25vcGVuLlxuICogd3MucmVhZHlTdGF0ZSA9PT0gT1BFTjogb25vcGVuIGNhbGxlZCwgYnV0IG5vdCBjbG9zZVdlYlNvY2tldCBvciBvbmNsb3NlLiBcbiAqIHdzLnJlYWR5U3RhdGUgPT09IENMT1NJTkc6IHNlcnZlci9icm93c2VyIGluaXRpYXRlZCBhIGNsb3NlLCBidXQgb25jbG9zZSB3YXMgbm90IGNhbGxlZCB5ZXQuIFRoaXMgaXMgdW5leHBlY3RlZCBhbmQgd2lsbCBnbyB0byBvbmUgb2YgdGhlIGVycm9yIHN0YXRlcy5cbiAqIHdzLnJlYWR5U3RhdGUgPT09IENMT1NFRCAmJiByZXRyeUV2ZW50OiB0aGVyZSB3YXMgYW4gdW5leHBlY3RlZCBlcnJvciwgYW5kIF9vcGVuV2ViU29ja2V0IHdpbGwgYmUgY2FsbGVkIGFnYWluIHNob3J0bHkuXG4gKiBoYXNQZXJtYW5lbnRFcnJvcjogdGhlcmUgd2FzIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IuIEVpdGhlciBXZWJTb2NrZXRzIGFyZSBub3Qgc3VwcG9ydGVkLCBvciBhbGwgcmV0cmllcyB0byBvcGVuIG9uZSBoYXZlIGZhaWxlZC5cbiAqIFxuICogQXBhcnQgZnJvbSBPdGdMb2FkV29ya2VyIGNhbGxpbmcgYW55IG9mIHRoZSBBUEkgbWV0aG9kcyBhdCBhbnkgcG9pbnQsIGJlIGF3YXJlIG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuICogKiByZXRyeUV2ZW50IGZpcmluZ1xuICogKiBUaGUgYnJvd3NlciBjbG9zZXMgdGhlIFdlYlNvY2tldCBiZWNhdXNlIHRoZSBpbnRlcm5ldCBjb25uZWN0aW9uIGJyb2tlIGRvd24uIChjb2RlOiAxMDA2KVxuICogKiBUaGUgc2VydmVyIGNsb3NlcyB0aGUgV2ViU29ja2V0IGFmdGVyIG9uZSBtaW51dGUgd2l0aG91dCByZXF1ZXN0cy4gKGNvZGU6IDEwMDAsIHJlYXNvbjogJ0lkbGUgdGltZW91dCcpXG4gKiAgICAgKiBXaGVuIHVzaW5nIG9uLWRlbWFuZCBsb2FkaW5nLCB0aGlzIGlzIG5vdCBhbiBlcnJvci4gVGhlIFdlYlNvY2tldCBtdXN0IGJlIHJlb3BlbmVkIHdoZW4gcmVxdWVzdFJlc291cmNlIGlzIGNhbGxlZCBhZ2Fpbi5cbiAqICogVGhlIHNlcnZlciBjbG9zZXMgdGhlIFdlYlNvY2tldCBpZiBhIHJlc291cmNlIHdhcyByZXF1ZXN0ZWQgdGhhdCB3YXMgbm90IGF1dGhvcml6ZWQuIChjb2RlOiAxMDA3LCByZWFzb246ICc0MDEgKFVuYXV0aG9yaXplZCknKVxuICogKiBBbnkgb3RoZXIgaW50ZXJuYWwgc2VydmVyIGVycm9yLlxuICogKiBBbHNvLCBiZSBhd2FyZSB0aGF0IGNsb3NlV2ViU29ja2V0IG1pZ2h0IG5ldmVyIGJlIGNhbGxlZCB3aGVuIG9uLWRlbWFuZCBsb2FkaW5nIGlzIGFjdGl2ZS5cbiAqIFxuICogV2hlbiB0aGUgV2ViU29ja2V0IGlzIGNsb3NpbmcsIG9uZSB0YXNrIHN3aXRjaGVzIGl0IHRvIENMT1NJTkcgd2l0aG91dCBjYWxsaW5nIGFueSBoYW5kbGVyLCBhbmQgYW5vdGhlciBvbmUgbGF0ZXIgc3dpdGNoZXNcbiAqIGl0IHRvIENMT1NFRCBhbmQgY2FsbHMgdGhlIGNsb3NlIGhhbmRsZXIsIHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbC5cbiAqIFNpbmNlIHRoaXMgaXMgZG9uZSBpbiBhIHRhc2ssIHRoZSBzdGF0ZSBjYW5ub3Qgc3VkZGVubHkgY2hhbmdlIHdoaWxlIGFueSBvZiBvdXIgY29kZSBpcyBydW5uaW5nLlxuICogSXQncyBvayB0aGF0IHRoZXJlJ3Mgbm8gb25jbG9zaW5nIGhhbmRsZXI6IHRoZSBDTE9TSU5HIHN0YXRlIHdpbGwgbWFrZSBldmVyeSBzZW5kKCkgYSBub29wLCBhbmQgb3VyIGNsb3NlL2Vycm9yIGhhbmRsZXIgd2lsbCByZS1pc3N1ZSBhbGwgcmVxdWVzdHMuXG4gKi9cbmNsYXNzIFdlYlNvY2tldEJhc2Uge1xuXG4gICAgY29uc3RydWN0b3IodXJsLCBxdWVyeVBhcmFtcywgaGVhZGVycywgb25SZXNvdXJjZXNSZWNlaXZlZCwgb25SZXNvdXJjZUZhaWxlZCwgb25Db25uZWN0aW9uRmFpbGVkKSB7XG5cbiAgICAgICAgdGhpcy53cyA9IG51bGw7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXM7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMubnVtUmVxdWVzdHNTZW50ID0gMDtcbiAgICAgICAgdGhpcy5udW1SZXF1ZXN0c1JlY2VpdmVkID0gMDtcbiAgICAgICAgdGhpcy5hdXRob3JpemVVcm5zID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9yZXRyaWVkT3BlbiA9IDA7XG4gICAgICAgIHRoaXMucmV0cnlFdmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFzUGVybWFuZW50RXJyb3IgPSB0eXBlb2YgV2ViU29ja2V0ID09PSBcInVuZGVmaW5lZFwiIHx8ICF0aGlzLnVybDtcbiAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RFcnJvck51bUluRmxpZ2h0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5vblJlc291cmNlc1JlY2VpdmVkID0gb25SZXNvdXJjZXNSZWNlaXZlZDtcbiAgICAgICAgdGhpcy5vblJlc291cmNlRmFpbGVkID0gb25SZXNvdXJjZUZhaWxlZDtcbiAgICAgICAgdGhpcy5vbkNvbm5lY3Rpb25GYWlsZWQgPSBvbkNvbm5lY3Rpb25GYWlsZWQ7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9wZW5kaW5nU2VuZHMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuX251bVBlbmRpbmdTZW5kcyA9IDA7XG4gICAgICAgIHRoaXMuaW5GbGlnaHRSZXF1ZXN0cyA9IG5ldyBNYXAoKTtcblxuICAgICAgICB0aGlzLm1zZ0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KDIwMSk7XG4gICAgfVxuXG4gICAgYWRkQXV0aG9yaXplVXJuKGF1dGhvcml6ZVVybikge1xuICAgICAgICBpZiAodGhpcy5hdXRob3JpemVVcm5zLmhhcyhhdXRob3JpemVVcm4pIHx8IHRoaXMuaGFzUGVybWFuZW50RXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGFsc28gY2FsbGVkIG9uIGV2ZXJ5IHJlcXVlc3RSZXNvdXJjZSwgaXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGhlcmUuXG4gICAgICAgIC8vIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIHRvIHN0YXJ0IG9wZW5pbmcgdGhlIHdlYiBzb2NrZXQgYXMgZWFybHkgYXMgcG9zc2libGUuXG4gICAgICAgIHRoaXMuX29wZW5XZWJTb2NrZXQoKTtcblxuICAgICAgICBpZiAodGhpcy53cz8ucmVhZHlTdGF0ZSA9PT0gU1RBVEUuT1BFTikge1xuICAgICAgICAgICAgLy8gU2luY2Ugd2Ugd29uJ3QgZ28gdGhyb3VnaCB0aGUgb25PcGVuIGhhbmRsZXIgYW55bW9yZSwgYXV0aG9yaXplIHRoZSBuZXcgdXJucyBkaXJlY3RseS5cbiAgICAgICAgICAgIHRoaXMud3Muc2VuZChcIi9hdXRoL1wiICsgYXV0aG9yaXplVXJuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXV0aG9yaXplVXJucy5hZGQoYXV0aG9yaXplVXJuKTtcbiAgICB9XG5cbiAgICBfb3BlbldlYlNvY2tldCgpIHtcbiAgICAgICAgaWYgKHRoaXMud3MgfHwgdGhpcy5oYXNQZXJtYW5lbnRFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9odHRwIGFuZCA3MTI0LT43MTI1IGFyZSBoZXJlIHRvIHN1cHBvcnQgbG9jYWwgZGVidWdnaW5nLCB3aGVuIHRoZSBlbmRwb2ludHMgYXJlIG92ZXJyaWRkZW4gdG9cbiAgICAgICAgLy9wb2ludCBkaXJlY3RseSB0byBsb2NhbCBub2RlLmpzIHByb2Nlc3MoZXMpLlxuICAgICAgICBsZXQgdXJsID0gdGhpcy51cmwucmVwbGFjZShcImh0dHBzOlwiLCBcIndzczpcIikucmVwbGFjZShcImh0dHA6XCIsIFwid3M6XCIpLnJlcGxhY2UoXCI6NzEyNFwiLCBcIjo3MTI1XCIpO1xuXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB1cmwgKz0gXCI/XCIgKyB0aGlzLnF1ZXJ5UGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cyA9IG5ldyBXZWJTb2NrZXQodXJsLCB1bmRlZmluZWQgLCBpc05vZGVKUygpID8geyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSA6IHt9KTtcblxuICAgICAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudElkU2VudCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLndzLmJpbmFyeVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG5cbiAgICAgICAgICAgIC8vT24gd2ViIGNsaWVudHMgdGhhdCBkbyBub3QgdXNlIHRoZSBjb29raWUgYXBwcm9hY2gsIHRoZSBoZWFkZXJzXG4gICAgICAgICAgICAvL3dpbGwgbm90IGdldCBzZW50ICh1bmxpa2Ugb24gbm9kZS5qcyBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgIC8vc28gd2Ugc2VuZCB0aGUgQXV0aG9yaXphdGlvbiBmaXJzdCB0aGluZyBhZnRlciBvcGVuXG4gICAgICAgICAgICBpZiAoIWlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndzLnNlbmQoXCIvaGVhZGVycy9cIiArIEpTT04uc3RyaW5naWZ5KHRoaXMuaGVhZGVycykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL1RlbGwgdGhlIHNlcnZlciB0aGF0IHdlIGV4cGVjdCBiYXRjaGVkIHJlc3BvbnNlc1xuICAgICAgICAgICAgdGhpcy53cy5zZW5kKFwiL29wdGlvbnMvXCIgKyBKU09OLnN0cmluZ2lmeSh7YmF0Y2hfcmVzcG9uc2VzOnRydWUsIHJlcG9ydF9lcnJvcnM6dHJ1ZX0pKTtcblxuICAgICAgICAgICAgLy9UZWxsIHRoZSBzZXJ2ZXIgdG8gYXV0aG9yaXplIHRoZSB3ZWIgc29ja2V0XG4gICAgICAgICAgICAvL2ZvciB0aGUgVVJOcyB0aGF0IHdlIHdpbGwgYmUgbG9hZGluZ1xuICAgICAgICAgICAgZm9yIChjb25zdCB1cm4gb2YgdGhpcy5hdXRob3JpemVVcm5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cy5zZW5kKFwiL2F1dGgvXCIgKyB1cm4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMud3Mub25tZXNzYWdlID0gZXZlbnQgPT4gdGhpcy5fZGVjb2RlTWVzc2FnZShldmVudC5kYXRhKTtcblxuICAgICAgICAvLyBXZSBkbyBub3Qgc2V0IG9uZXJyb3IsIHNpbmNlIGV2ZXJ5IGVycm9yIGV2ZW50IGlzIGZvbGxvd2VkIGJ5IGEgY2xvc2UgZXZlbnQsIHNvIG9uY2xvc2UgaXMgZW5vdWdoLlxuICAgICAgICAvLyBUaGlzIHdpbGwgb25seSBiZSBydW4gZm9yIHVuZXhwZWN0ZWQgY2xvc2UgZXZlbnRzLCBiZWNhdXNlIHdlIHJlc2V0IHRoZSBjbG9zZSBldmVudCBoYW5kbGVyIGJlZm9yZSBjbG9zaW5nIHRoZSB3ZWIgc29ja2V0IGludGVudGlvbmFsbHkgXG4gICAgICAgIHRoaXMud3Mub25jbG9zZSA9IGV2ZW50ID0+IHtcblxuICAgICAgICAgICAgLy8gQ2xvc2UgY29kZSAxMDAwIG1lYW5zIE5PUk1BTF9DTE9TVVJFLCBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRoZSBzZXJ2ZXIgb24gaWRsZSB0aW1lb3V0LiBcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGFuIGVycm9yIGFuZCB3ZSBkb24ndCB3YW4ndCB0byByZXRyeSBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gMTAwMCAmJiB0aGlzLmluRmxpZ2h0UmVxdWVzdHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTsgLy8gSXQncyBhbHJlYWR5IGNsb3NlZCwgYnV0IHdlIHdhbnQgdG8gYWxzbyByZXNldCB0aGUgc3RhdGUuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgXCJBYm5vcm1hbCBzb2NrZXQgY2xvc2UuXCIsXG4gICAgICAgICAgICAgICAgXCJwZW5kaW5nIHNlbmRzOlwiLCB0aGlzLl9udW1QZW5kaW5nU2VuZHMsXG4gICAgICAgICAgICAgICAgXCJpbiBmbGlnaHRcIiwgdGhpcy5pbkZsaWdodFJlcXVlc3RzLnNpemUsXG4gICAgICAgICAgICAgICAgXCJldmVudDpcIiwgZXZlbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdTZW5kcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuX251bVBlbmRpbmdTZW5kcyA9IDA7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHRyeSBhZ2FpbiBvcGVuaW5nIGxhdGVyIG9yIGdpdmUgdXBcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZXRyaWVkT3BlbiA8IDMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJSZXRyeWluZ1wiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXRyaWVkT3BlbisrO1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cnlFdmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldHJ5RXZlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlbldlYlNvY2tldCgpO1xuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVG9vIG1hbnkgV2ViU29ja2V0IGZhaWx1cmVzLiBHaXZpbmcgdXAuXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzUGVybWFuZW50RXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3JOdW1JbkZsaWdodCA9IHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5zaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdGlvbkZhaWxlZCh0aGlzLmluRmxpZ2h0UmVxdWVzdHMpO1xuICAgICAgICAgICAgdGhpcy5pbkZsaWdodFJlcXVlc3RzLmNsZWFyKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIG5vIG5ldyByZXF1ZXN0cyBhcmUgZXhwZWN0ZWQuICovXG4gICAgY2xvc2VXZWJTb2NrZXQoKSB7XG4gICAgICAgIGlmICghdGhpcy53cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZpb2xhdGluZyB0aGlzIGFzc2VydCB3b24ndCBicmVhayBzb21ldGhpbmcgaGVyZSwgYnV0IGluLWZsaWdodCByZXF1ZXN0cyB3aWxsIGJlIGxvc3RcbiAgICAgICAgLy8gYW5kIHBlbmRpbmcgcmVxdWVzdHMgd2lsbCBiZSBpc3N1ZWQgb24gbmV4dCBfb3BlbldlYlNvY2tldCwgd2hpY2ggaXMgcHJvYmFibHkgbm90IGludGVuZGVkXG4gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuaW5GbGlnaHRSZXF1ZXN0cy5zaXplID09PSAwLCBcImNsb3NlV2ViU29ja2V0IGNhbGxlZCBldmVuIHRob3VnaCB0aGVyZSBhcmUgcmVxdWVzdHMgaW4gZmxpZ2h0XCIpO1xuXG4gICAgICAgIGlmKHRoaXMucmV0cnlFdmVudCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmV0cnlFdmVudCk7XG4gICAgICAgICAgICB0aGlzLnJldHJ5RXZlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGlmIGFueXRoaW5nIGdvZXMgd3JvbmcgcGFzdCB0aGlzIHBvaW50LlxuICAgICAgICAvLyBCeSB1bnNldHRpbmcgdGhpcyBvbiByZWd1bGFyIGNsb3NlLCBhbnkgY2FsbCB0byBvdXIgb25jbG9zZSBoYW5kbGVyIGlzIHVuZXhwZWN0ZWQgYW5kIGlzIGFuIGVycm9yLlxuICAgICAgICAvLyBUaGlzIHNlZW1lZCBtb3JlIHJvYnVzdCB0aGFuIGNoZWNraW5nIGZvciBvdXIgY2xvc2luZyBtZXNzYWdlIGluIHRoZSBjbG9zZSBoYW5kbGVyLlxuICAgICAgICB0aGlzLndzLm9uY2xvc2UgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0IHdzID0gdGhpcy53czsgXG4gICAgICAgIGlmICh0aGlzLndzLnJlYWR5U3RhdGUgPT09IFNUQVRFLkNPTk5FQ1RJTkcpIHtcbiAgICAgICAgICAgIC8vIFdlIGNvdWxkIGp1c3QgY2xvc2UgdGhlIGNvbm5lY3Rpb24gcmlnaHQgYXdheSwgd2hpY2ggaXMgYWxsb3dlZCBieSB0aGUgc3BlYy5cbiAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGJyb3dzZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIHdoaWNoIGlzIG5vdCBuaWNlLCBpbiBwYXJ0aWN1bGFyIGZvciBzbWFsbCBjYWNoZWQgbW9kZWxzIHRoYXQgbG9hZFxuICAgICAgICAgICAgLy8gZmFzdGVyIHRoYW4gdGhlIFdTIG9wZW4sIHRoaXMgd291bGQgbWVhbiBhIGZhaXIgYml0IG9mIGNvbnNvbGUgc3BhbS4gU28gd2Ugd2FpdCBmb3IgdGhlIFdTIHRvIG9wZW4gZmlyc3QuXG4gICAgICAgICAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHdzLmNsb3NlKDEwMDAsIFwibm8gbW9yZSB3b3JrIGV4cGVjdGVkXCIpOyAvLyBjbG9zZSBjb2RlIDEwMDAgbWVhbnMgbm9ybWFsIGNsb3N1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMud3MgaXMgQ0xPU0lORyBvciBDTE9TRUQsIGNsb3NlKCkgaXMgYSBOT09QLlxuICAgICAgICAgICAgdGhpcy53cy5jbG9zZSgxMDAwLCBcIm5vIG1vcmUgd29yayBleHBlY3RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndzID0gbnVsbDtcbiAgICB9XG5cbiAgICBfZGVjb2RlTWVzc2FnZShidWZmZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBsZW1lbnQhJyk7XG4gICAgfVxuXG4gICAgX2ZsdXNoU2VuZFF1ZXVlKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcGxlbWVudCEnKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtdXN0IG5vdCBiZSBjYWxsZWQgYmVmb3JlIGEgY29ycmVzcG9uZGluZyBjYWxsIHRvIGFkZEF1dGhvcml6ZVVybiwgb3RoZXJ3aXNlIHRoZSBzZXJ2ZXIgd2lsbCBjbG9zZSB0aGUgV2ViU29ja2V0XG4gICAgICogIGFuZCB0aGUgV2ViU29ja2V0QmFzZSB3aWxsIGdvIGludG8gdGhlIGVycm9yIHN0YXRlIGFmdGVyIHJldHJ5aW5nLiAqL1xuICAgIHJlcXVlc3RSZXNvdXJjZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBsZW1lbnQhJyk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5XZWJTb2NrZXRCYXNlID0gV2ViU29ja2V0QmFzZTtcbm1vZHVsZS5leHBvcnRzLlNUQVRFID0gU1RBVEU7Il0sIm5hbWVzIjpbIldlYlNvY2tldCIsInJlcXVpcmUiLCJpc0Jyb3dzZXIiLCJuYXZpZ2F0b3IiLCJpc05vZGVKUyIsIlNUQVRFIiwiT2JqZWN0IiwiZnJlZXplIiwiQ09OTkVDVElORyIsIk9QRU4iLCJDTE9TSU5HIiwiQ0xPU0VEIiwiV2ViU29ja2V0QmFzZSIsImNvbnN0cnVjdG9yIiwidXJsIiwicXVlcnlQYXJhbXMiLCJoZWFkZXJzIiwib25SZXNvdXJjZXNSZWNlaXZlZCIsIm9uUmVzb3VyY2VGYWlsZWQiLCJvbkNvbm5lY3Rpb25GYWlsZWQiLCJ3cyIsIm51bVJlcXVlc3RzU2VudCIsIm51bVJlcXVlc3RzUmVjZWl2ZWQiLCJhdXRob3JpemVVcm5zIiwiU2V0IiwiX3JldHJpZWRPcGVuIiwicmV0cnlFdmVudCIsImhhc1Blcm1hbmVudEVycm9yIiwibGFzdEVycm9yIiwibGFzdEVycm9yTnVtSW5GbGlnaHQiLCJfcGVuZGluZ1NlbmRzIiwiTWFwIiwiX251bVBlbmRpbmdTZW5kcyIsImluRmxpZ2h0UmVxdWVzdHMiLCJtc2dCdWZmZXIiLCJVaW50OEFycmF5IiwiYWRkQXV0aG9yaXplVXJuIiwiYXV0aG9yaXplVXJuIiwiX3RoaXMkd3MiLCJoYXMiLCJfb3BlbldlYlNvY2tldCIsInJlYWR5U3RhdGUiLCJzZW5kIiwiYWRkIiwicmVwbGFjZSIsInVuZGVmaW5lZCIsIm9ub3BlbiIsImFjY291bnRJZFNlbnQiLCJiaW5hcnlUeXBlIiwiSlNPTiIsInN0cmluZ2lmeSIsImJhdGNoX3Jlc3BvbnNlcyIsInJlcG9ydF9lcnJvcnMiLCJ1cm4iLCJvbm1lc3NhZ2UiLCJldmVudCIsIl9kZWNvZGVNZXNzYWdlIiwiZGF0YSIsIm9uY2xvc2UiLCJjb2RlIiwic2l6ZSIsImNsb3NlV2ViU29ja2V0IiwiY29uc29sZSIsIndhcm4iLCJzZXRUaW1lb3V0IiwiZXJyb3IiLCJjbGVhciIsImFzc2VydCIsImNsZWFyVGltZW91dCIsImNsb3NlIiwiYnVmZmVyIiwiRXJyb3IiLCJfZmx1c2hTZW5kUXVldWUiLCJyZXF1ZXN0UmVzb3VyY2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/otg/WebSocketBase.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/svf/Cameras.js": /*!***********************************************!*\ !*** ./src/file-loaders/lmvtk/svf/Cameras.js ***! \***********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readCameraDefinition: () => (/* binding */ readCameraDefinition)\n/* harmony export */ });\n\n\nfunction readCameraDefinition(pfr, inst) {\n var entry = inst.definition;\n var tse = pfr.seekToEntry(entry);\n if (!tse)\n return null;\n if (tse.version > 2 /*Constants::CameraDefinitionVersion*/)\n return null;\n\n var s = pfr.stream;\n var cam = {\n isPerspective: !s.getUint8(), /* 0 = perspective, 1 = ortho */\n position: pfr.readVector3f(),\n target: pfr.readVector3f(),\n up: pfr.readVector3f(),\n aspect: s.getFloat32(),\n fov: s.getFloat32() * (180 / Math.PI)\n };\n if (tse.version < 2) {\n // Skip the clip planes for old files.\n s.getFloat32();\n s.getFloat32();\n }\n\n cam.orthoScale=s .getFloat32();\n\n return cam;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL3N2Zi9DYW1lcmFzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBYTs7QUFFTixTQUFTQSxvQkFBb0JBLENBQUNDLEdBQUcsRUFBRUMsSUFBSSxFQUFFO0VBQzVDLElBQUlDLEtBQUssR0FBR0QsSUFBSSxDQUFDRSxVQUFVO0VBQzNCLElBQUlDLEdBQUcsR0FBR0osR0FBRyxDQUFDSyxXQUFXLENBQUNILEtBQUssQ0FBQztFQUNoQyxJQUFJLENBQUNFLEdBQUc7RUFDSixPQUFPLElBQUk7RUFDZixJQUFJQSxHQUFHLENBQUNFLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFDaEIsT0FBTyxJQUFJOztFQUVmLElBQUlDLENBQUMsR0FBR1AsR0FBRyxDQUFDUSxNQUFNO0VBQ2xCLElBQUlDLEdBQUcsR0FBRztJQUNOQyxhQUFhLEVBQUcsQ0FBQ0gsQ0FBQyxDQUFDSSxRQUFRLENBQUMsQ0FBQyxFQUFFO0lBQy9CQyxRQUFRLEVBQUdaLEdBQUcsQ0FBQ2EsWUFBWSxDQUFDLENBQUM7SUFDN0JDLE1BQU0sRUFBRWQsR0FBRyxDQUFDYSxZQUFZLENBQUMsQ0FBQztJQUMxQkUsRUFBRSxFQUFFZixHQUFHLENBQUNhLFlBQVksQ0FBQyxDQUFDO0lBQ3RCRyxNQUFNLEVBQUVULENBQUMsQ0FBQ1UsVUFBVSxDQUFDLENBQUM7SUFDdEJDLEdBQUcsRUFBRVgsQ0FBQyxDQUFDVSxVQUFVLENBQUMsQ0FBQyxJQUFFLEdBQUcsR0FBQ0UsSUFBSSxDQUFDQyxFQUFFO0VBQ3BDLENBQUM7RUFDRCxJQUFJaEIsR0FBRyxDQUFDRSxPQUFPLEdBQUcsQ0FBQyxFQUFFO0lBQ2pCO0lBQ0FDLENBQUMsQ0FBQ1UsVUFBVSxDQUFDLENBQUM7SUFDZFYsQ0FBQyxDQUFDVSxVQUFVLENBQUMsQ0FBQztFQUNsQjs7RUFFQVIsR0FBRyxDQUFDWSxVQUFVLEdBQUdkLENBQUMsQ0FBQ1UsVUFBVSxDQUFDLENBQUM7O0VBRS9CLE9BQU9SLEdBQUc7QUFDZCIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvc3ZmL0NhbWVyYXMuanM/ZTE4YyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDYW1lcmFEZWZpbml0aW9uKHBmciwgaW5zdCkge1xuICAgIHZhciBlbnRyeSA9IGluc3QuZGVmaW5pdGlvbjtcbiAgICB2YXIgdHNlID0gcGZyLnNlZWtUb0VudHJ5KGVudHJ5KTtcbiAgICBpZiAoIXRzZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRzZS52ZXJzaW9uID4gMiAvKkNvbnN0YW50czo6Q2FtZXJhRGVmaW5pdGlvblZlcnNpb24qLylcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgcyA9IHBmci5zdHJlYW07XG4gICAgdmFyIGNhbSA9IHtcbiAgICAgICAgaXNQZXJzcGVjdGl2ZSA6ICFzLmdldFVpbnQ4KCksIC8qIDAgPSBwZXJzcGVjdGl2ZSwgMSA9IG9ydGhvICovXG4gICAgICAgIHBvc2l0aW9uIDogcGZyLnJlYWRWZWN0b3IzZigpLFxuICAgICAgICB0YXJnZXQ6IHBmci5yZWFkVmVjdG9yM2YoKSxcbiAgICAgICAgdXA6IHBmci5yZWFkVmVjdG9yM2YoKSxcbiAgICAgICAgYXNwZWN0OiBzLmdldEZsb2F0MzIoKSxcbiAgICAgICAgZm92OiBzLmdldEZsb2F0MzIoKSooMTgwL01hdGguUEkpXG4gICAgfTtcbiAgICBpZiAodHNlLnZlcnNpb24gPCAyKSB7XG4gICAgICAgIC8vIFNraXAgdGhlIGNsaXAgcGxhbmVzIGZvciBvbGQgZmlsZXMuXG4gICAgICAgIHMuZ2V0RmxvYXQzMigpO1xuICAgICAgICBzLmdldEZsb2F0MzIoKTtcbiAgICB9XG5cbiAgICBjYW0ub3J0aG9TY2FsZSA9IHMuZ2V0RmxvYXQzMigpO1xuXG4gICAgcmV0dXJuIGNhbTtcbn1cbiJdLCJuYW1lcyI6WyJyZWFkQ2FtZXJhRGVmaW5pdGlvbiIsInBmciIsImluc3QiLCJlbnRyeSIsImRlZmluaXRpb24iLCJ0c2UiLCJzZWVrVG9FbnRyeSIsInZlcnNpb24iLCJzIiwic3RyZWFtIiwiY2FtIiwiaXNQZXJzcGVjdGl2ZSIsImdldFVpbnQ4IiwicG9zaXRpb24iLCJyZWFkVmVjdG9yM2YiLCJ0YXJnZXQiLCJ1cCIsImFzcGVjdCIsImdldEZsb2F0MzIiLCJmb3YiLCJNYXRoIiwiUEkiLCJvcnRob1NjYWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/svf/Cameras.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/svf/Fragments.js ": /*!*************************************************!*\ !*** ./src/file-loaders/lmvtk/svf/Fragments.js ***! \*************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FragList: ()=> (/* binding */ FragList),\n/* harmony export */ filterFragments: () => (/* binding */ filterFragments),\n/* harmony export */ readFragments: () => (/* binding */ readFragments),\n/* harmony export */ readGeometryMetadata: () => (/* binding */ readGeometryMetadata),\n/* harmony export */ readGeometryMetadataIntoFragments: () => (/* binding */ readGeometryMetadataIntoFragments)\n/* harmony export */ });\n/* harmony import */ var _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../wgs/scene/LmvBox3 */ \"./src/wgs/scene/LmvBox3.js\");\n/* harmony import */ var _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../wgs/scene/LmvMatrix4 */ \"./src/wgs/scene/LmvMatrix4.js\");\n/* harmony import */ var _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../wgs/scene/LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../compat */ \"./src/compat.js\");\n/* harmony import */ var _wgs_scene_MeshFlags__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../wgs/scene/MeshFlags */ \"./src/wgs/scene/MeshFlags.js\");\n\n\n\n\n\n\n//FragList represents an array of fragments, stored in Structure of Arrays form\n//which allows us to free some parts easily and transfer the fragment information in large chunks.\nvar NUM_FRAGMENT_LIMITS = (0,_compat__WEBPACK_IMPORTED_MODULE_3__.isMobileDevice)() ? null : null;\nvar MAX_BBOX_RATIO = 100;\n\n/** @constructor */\n// note: update transferable var list in SvfWorker.ts if you add a new field\nfunction FragList() {\n this.length = 0;\n this.numLoaded = 0;\n\n this.boxes = null;\n this.transforms = null;\n this.materials = null;\n\n this.packIds = null;\n this.entityIndexes = null;\n\n this.fragId2dbId = null;\n\n this.topoIndexes = null;\n\n this.visibilityFlags = null;\n}\n\nfunction readGeometryMetadataIntoFragments(pfr, fragments) {\n var length = fragments.geomDataIndexes.length;\n var stream = pfr.stream;\n var primsCount = 0;\n\n // Read from cache if the same entry has been reading from stream.\n var entryCache = {};\n var mesh2frag = fragments.mesh2frag = {};\n fragments.polygonCounts = fragments.geomDataIndexes;\n for (var g = 0; g < length; g++) {\n var entry=f ragments.geomDataIndexes[g];\n\n if (entryCache[entry]) {\n var i=e ntryCache[entry];\n fragments.polygonCounts[g]=f ragments.polygonCounts[i];\n fragments.packIds[g]=f ragments.packIds[i];\n fragments.entityIndexes[g]=f ragments.entityIndexes[i];\n primsCount +=f ragments.polygonCounts[g];\n } else\n {\n var tse=p fr.seekToEntry(entry);\n if (!tse)\n return;\n\n // Frag type, seems no use any more.\n stream.getUint8();\n //skip past object space bbox -- we don 't use that\n stream.seek(stream.offset + 24);\n\n fragments.polygonCounts[g] = stream.getUint16();\n fragments.packIds[g] = parseInt(pfr.readString());\n fragments.entityIndexes[g] = pfr.readU32V();\n primsCount += fragments.polygonCounts[g];\n\n entryCache[entry] = g;\n }\n\n // Construct mesh2frag here directly\n var meshid = fragments.packIds[g] + \":\" + fragments.entityIndexes[g];\n var meshRefs = mesh2frag[meshid];\n if (meshRefs === undefined) {\n //If it's the first fragments for this mesh,\n //store the index directly -- most common case.\n mesh2frag[meshid]=g ;\n } else\n if (!Array.isArray(meshRefs)) {\n //otherwise put the fragments that\n //reference the mesh into an array\n mesh2frag[meshid]=[ meshRefs, g];\n } else\n {\n //already is an array\n meshRefs.push(g);\n }\n\n }\n fragments.geomDataIndexes=n ull;\n entryCache=n ull;\n\n return primsCount;\n}\n\nfunction readGeometryMetadata(pfr, geoms)\n{\n var numGeoms=p fr.getEntryCounts();\n var stream=p fr.stream;\n\n geoms.length=n umGeoms;\n var fragTypes=g eoms.fragTypes=n ew Uint8Array(numGeoms);\n var primCounts=g eoms.primCounts=n ew Uint16Array(numGeoms);\n var packIds=g eoms.packIds=n ew Int32Array(numGeoms);\n var entityIndexes=g eoms.entityIndexes=n ew Int32Array(numGeoms);\n // Holds the indexes to the topology data.\n var topoIndexes;\n\n for (var g=0 , gEnd=n umGeoms; g < gEnd; g++) {\n var tse=p fr.seekToEntry(g);\n if (!tse)\n return;\n\n fragTypes[g]=s tream.getUint8();\n //skip past object space bbox -- we don 't use that\n stream.seek(stream.offset + 24);\n primCounts[g] = stream.getUint16();\n packIds[g] = parseInt(pfr.readString());\n entityIndexes[g] = pfr.readU32V();\n\n if (tse.version > 2) {\n var topoIndex = stream.getInt32();\n if (topoIndex != -1 && topoIndexes === undefined) {\n topoIndexes = geoms.topoIndexes = new Int32Array(numGeoms);\n // Fill in the first entries to indicate\n for (var i = 0; i < g; i++)\n topoIndexes[i] = -1;\n }\n\n if (topoIndexes != undefined)\n topoIndexes[g] = topoIndex;\n }\n\n }\n}\n\n// Convert a list of object id (dbid) to a list of integers where each integer is an index of the fragment\n// in fragment list that associated with the object id.\nfunction objectIds2FragmentIndices(pfr, ids) {\n var ret = [];\n\n if (!ids) {\n return ret;\n }\n\n var counts = pfr.getEntryCounts();\n var stream = pfr.stream;\n for (var entry = 0; entry < counts; entry++) {\n var tse = pfr.seekToEntry(entry);\n if (!tse)\n return;\n if (tse.version > 5)\n return;\n\n // Keep reading fragment fields as usual, but does not store anything as we only\n // interested in the data base id / object id field at the very end.\n if (tse.version > 4) {\n // Flag byte.\n pfr.readU8();\n }\n // Material index\n pfr.readU32V();\n if (tse.version > 2) {\n // Geometry metadata reference\n pfr.readU32V();\n } else {\n // Pack file reference\n pfr.readString();\n pfr.readU32V();\n }\n\n // Transform\n pfr.readTransform(entry, null, 12 * entry);\n\n // Bounding box\n for (var i = 0; i < 6; i++) {\n stream.getFloat32();\n }\n\n if (tse.version > 1) {\n var dbid = pfr.readU32V();\n if (ids.indexOf(dbid) >= 0) {\n ret.push(entry);\n }\n }\n }\n\n return ret;\n}\n\nvar _tmpVector = new _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__.LmvVector3();\n\n// globalOffset: GlobalOffset as specified by loadOptions (may be undefined)\n// defaultGlobalOffset: GlobalOffset as initially chosen by SvfPlacementUtil.initPlacement\nfunction readFragments(pfr, frags, globalOffset, placementTransform, fragmentTransformsDouble, ids, bbox, defaultGlobalOffset) {\n var filteredIndices = objectIds2FragmentIndices(pfr, ids);\n\n //Initialize all the fragments structures\n //once we know how many fragments we have.\n var numFrags = filteredIndices.length ? filteredIndices.length : pfr.getEntryCounts();\n var stream = pfr.stream;\n\n if (NUM_FRAGMENT_LIMITS && numFrags > NUM_FRAGMENT_LIMITS) {\n numFrags = NUM_FRAGMENT_LIMITS;\n }\n\n // Recored the total length of the fragments\n frags.totalLength = pfr.getEntryCounts();\n frags.length = numFrags;\n frags.numLoaded = 0;\n\n //Allocate flat array per fragment property\n var fragBoxes = frags.boxes = fragmentTransformsDouble ? new Float64Array(6 * numFrags) : new Float32Array(6 * numFrags);\n var transforms = frags.transforms = fragmentTransformsDouble ? new Float64Array(12 * numFrags) : new Float32Array(12 * numFrags);\n var materials = frags.materials = new Int32Array(numFrags);\n var packIds = frags.packIds = new Int32Array(numFrags);\n var entityIndexes = frags.entityIndexes = new Int32Array(numFrags);\n var geomDataIndexes = frags.geomDataIndexes = new Int32Array(numFrags);\n var fragId2dbId = frags.fragId2dbId = new Int32Array(numFrags); //NOTE: this potentially truncates IDs bigger than 4 billion -- can be converted to array if needed.\n var visibilityFlags = frags.visibilityFlags = new Uint16Array(numFrags);\n\n var tmpBox;\n var tmpMat;\n var boxTranslation = [0, 0, 0];\n if (placementTransform) {\n tmpBox = new _wgs_scene_LmvBox3__WEBPACK_IMPORTED_MODULE_0__.LmvBox3();\n tmpMat = new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_1__.LmvMatrix4(true).fromArray(placementTransform.elements);\n }\n\n var calculateOffset = !globalOffset && bbox;\n var dpTranslations = transforms;\n // Normally the translations component of transforms is 12 entries for each\n // transform and then offset by 9 in the transform.\n var translationSize = 12;\n var translationOff = 9;\n if (calculateOffset) {\n // A global offset wasn't specified in the load context, so we will calculate one\n // here. We normally use the center of the bbox, but if the bbox is signficantly\n // larger than the objects in the model, then we make the global offset the\n // average of the centers of the fragment bounding boxes, which will push\n // offset toward places where there are more fragments.\n if (!fragmentTransformsDouble) {\n // We need to keep bboxes and transform translations in double precision\n // to guarantee precision in large bbox cases\n fragBoxes=n ew Float64Array(6 * numFrags);\n dpTranslations=n ew Float64Array(3 * numFrags);\n // In this case the translations are 3 entries offset by 0\n translationSize=3 ;\n translationOff=0 ;\n }\n }\n\n //Helper functions used by the main fragment read loop.\n\n function applyPlacement(index) {\n if (placementTransform) {\n var offset=i ndex * 6;\n tmpBox.setFromArray(fragBoxes, offset);\n tmpBox.applyMatrix4(tmpMat);\n tmpBox.copyToArray(fragBoxes, offset);\n }\n }\n\n function readBoundingBox(entry) {\n var offset=e ntry * 6;\n for (var i=0 ; i < 6; i++)\n fragBoxes[offset++]=s tream.getFloat32();\n }\n\n function readBoundingBoxOffset(entry, boxTranslation) {\n var offset=e ntry * 6;\n for (var i=0 ; i < 6; i++)\n fragBoxes[offset++]=s tream.getFloat32() + boxTranslation[i % 3];\n }\n\n //Spin through all the fragments now\n for (var entry=0 , eEnd=f rags.length; entry < eEnd; entry++) {\n var tse=f ilteredIndices.length ? pfr.seekToEntry(filteredIndices[entry]) : pfr.seekToEntry(entry);\n\n if (!tse)\n return;\n if (tse.version> 5)\n return;\n\n var isVisible = true;\n if (tse.version > 4) {\n // Fragments v5+ include a flag byte, the LSB of which denotes\n // visibility\n var flags = pfr.readU8();\n isVisible = (flags & 0x01) != 0;\n }\n visibilityFlags[entry] = isVisible ? _wgs_scene_MeshFlags__WEBPACK_IMPORTED_MODULE_4__.MeshFlags.MESH_VISIBLE : 0;\n\n materials[entry] = pfr.readU32V();\n\n if (tse.version > 2) {\n //In case it's new style fragment that\n //points to a geometry metadata entry\n geomDataIndexes[entry] = pfr.readU32V();\n } else\n {\n //Old style fragment, pack reference is directly\n //encoded in the fragment entry\n packIds[entry] = parseInt(pfr.readString());\n entityIndexes[entry] = pfr.readU32V();\n }\n\n pfr.readTransform(entry, transforms, 12 * entry, placementTransform, globalOffset, boxTranslation);\n if (calculateOffset && dpTranslations !== transforms) {\n dpTranslations.set(boxTranslation, entry * translationSize + translationOff);\n }\n\n if (tse.version > 3) {\n // With this version the transform's (double precision) translation is subtracted from the BB,\n // so we have to add it back\n readBoundingBoxOffset(entry, boxTranslation);\n } else\n {\n readBoundingBox(entry);\n }\n\n //Apply the placement transform to the world space bbox\n applyPlacement(entry);\n\n //Apply any global offset to the world space bbox\n if (globalOffset) {\n var offset = entry * 6;\n fragBoxes[offset++] -= globalOffset.x;\n fragBoxes[offset++] -= globalOffset.y;\n fragBoxes[offset++] -= globalOffset.z;\n fragBoxes[offset++] -= globalOffset.x;\n fragBoxes[offset++] -= globalOffset.y;\n fragBoxes[offset++] -= globalOffset.z;\n }\n\n if (tse.version > 1) {\n fragId2dbId[entry] = pfr.readU32V();\n }\n // Skip reading path ID which is not in use now.\n // pfr.readPathID();\n }\n\n if (calculateOffset) {\n // We compare the size of the bbox against the size of the largest\n // max size of the bounding boxes in the model to see decide\n // what to use as the globalOffset.\n\n // First calculate the max of object box sizes\n var maxX = -1,maxY = -1,maxZ = -1;\n var boxEnd = fragBoxes.length;\n // Effectively this calculates the average of the centers of the fragment bboxes\n for (let i = 0; i < boxEnd; i +=6 ) {\n maxX=M ath.max(maxX, fragBoxes[i + 3] - fragBoxes[i]);\n maxY=M ath.max(maxY, fragBoxes[i + 4] - fragBoxes[i + 1]);\n maxZ=M ath.max(maxZ, fragBoxes[i + 5] - fragBoxes[i + 2]);\n }\n\n var size=b box.getSize(_tmpVector);\n if (size.x> maxX * MAX_BBOX_RATIO || size.y > maxY * MAX_BBOX_RATIO || size.z > maxZ * MAX_BBOX_RATIO) {\n // Now calculate the weighted offset. The weighted globalOffset is\n // weighted to be close to places with more fragments.\n var offsetX = 0,offsetY = 0,offsetZ = 0;\n // Effectively this calculates the average of the centers of the fragment bboxes\n for (let i = 0; i < boxEnd; i +=3 ) {\n offsetX +=f ragBoxes[i];\n offsetY +=f ragBoxes[i + 1];\n offsetZ +=f ragBoxes[i + 2];\n }\n globalOffset=n ew _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__.LmvVector3(offsetX * 3 / boxEnd, offsetY * 3 / boxEnd, offsetZ * 3 / boxEnd);\n } else {\n globalOffset=d efaultGlobalOffset;\n }\n\n // Need to addjust the bounding boxes, using the globalOffset\n var outBoxes=f rags.boxes;\n for (let i=0 ; i < boxEnd; i +=3 ) {\n outBoxes[i]=f ragBoxes[i] - globalOffset.x;\n outBoxes[i + 1]=f ragBoxes[i + 1] - globalOffset.y;\n outBoxes[i + 2]=f ragBoxes[i + 2] - globalOffset.z;\n }\n\n if (placementTransform && dpTranslations !==t ransforms) {\n var tmpVec=n ew _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__.LmvVector3();\n // And adjust the transforms, too\n for (entry=0 ; entry < eEnd; ++entry) {\n const from=e ntry * translationSize + translationOff;\n tmpVec.fromArray(dpTranslations, from).applyMatrix4(tmpMat).toArray(dpTranslations, from);\n }\n }\n\n // And adjust the transforms, too\n for (entry=0 ; entry < eEnd; ++entry) {\n var to=e ntry * 12 + 9;\n var from=e ntry * translationSize + translationOff;\n transforms[to]=d pTranslations[from] - globalOffset.x;\n transforms[to + 1]=d pTranslations[from + 1] - globalOffset.y;\n transforms[to + 2]=d pTranslations[from + 2] - globalOffset.z;\n }\n }\n\n frags.finishLoading=t rue;\n\n return globalOffset;\n}\n\n// Filter fragments based on specified object id list, by picking\n// up fragment whose id is in the specified id list, and dropping others.\n// This is used to produce a list of fragments that matches a search hit.\nfunction filterFragments(frags, ids) {\n frags.length=i ds.length;\n frags.numLoaded=0 ;\n let numFrags=f rags.length;\n let bb=[ Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity];\n\n let fragBoxes=n ew Float32Array(6 * numFrags);\n let transforms=n ew Float32Array(12 * numFrags);\n let materials=n ew Int32Array(numFrags);\n let packIds=n ew Int32Array(numFrags);\n let entityIndexes=n ew Int32Array(numFrags);\n let visibilityFlags=n ew Uint16Array(numFrags);\n let fragId2DbId=n ew Int32Array(numFrags);\n let polygonCounts=n ew Int32Array(numFrags);\n let geomDataIndexes=f rags.geomDataIndexes ? new Int32Array(numFrags) : null;\n let topoIndexes=f rags.topoIndexes ? new Int32Array(numFrags) : null;\n\n var mesh2frag={ };\n\n for (let i=0 ; i < ids.length; ++i) {\n let index=i ds[i];\n\n let idxOld=i ndex * 6;\n let idxNew=i * 6;\n for (let j=0 ; j < 6; ++j)\n fragBoxes[idxNew++]=f rags.boxes[idxOld++];\n\n idxOld=i ndex * 12;\n idxNew=i * 12;\n for (let j=0 ; j < 12; ++j)\n transforms[idxNew++]=f rags.transforms[idxOld++];\n\n materials[i]=f rags.materials[index];\n packIds[i]=f rags.packIds[index];\n entityIndexes[i]=f rags.entityIndexes[index];\n visibilityFlags[i]=f rags.visibilityFlags[index];\n fragId2DbId[i]=f rags.fragId2dbId[index];\n polygonCounts[i]=f rags.polygonCounts[index];\n if (geomDataIndexes) {\n geomDataIndexes[i]=f rags.geomDataIndexes[index];\n }\n if (topoIndexes) {\n topoIndexes[i]=f rags.topoIndexes[index];\n }\n\n // TODO: consolidate this with addToMeshMap.\n let meshID=f rags.packIds[index] + \ ":\" + frags.entityIndexes[index];\n let meshRefs=m esh2frag[meshID];\n if (meshRefs==u ndefined) {\n mesh2frag[meshID]=i ;\n } else\n if (!Array.isArray(meshRefs)) {\n mesh2frag[meshID]=[ meshRefs, i];\n } else\n {\n meshRefs.push(i);\n }\n\n let bbIndex=i * 6;\n for (let j=0 ; j < 3; ++j)\n if (fragBoxes[bbIndex + j] < bb[j])\n bb[j]=f ragBoxes[bbIndex + j];\n for (let j=3 ; j < 6; ++j)\n if (fragBoxes[bbIndex + j]> bb[j])\n bb[j] = fragBoxes[bbIndex + j];\n }\n\n frags.boxes = fragBoxes;\n frags.transforms = transforms;\n frags.materials = materials;\n frags.packIds = packIds;\n frags.entityIndexes = entityIndexes;\n frags.mesh2frag = mesh2frag;\n frags.visibilityFlags = visibilityFlags;\n frags.fragId2dbId = fragId2DbId;\n frags.polygonCounts = polygonCounts;\n frags.geomDataIndexes = geomDataIndexes;\n frags.topoIndexes = topoIndexes;\n\n frags.totalLength = numFrags;\n\n return bb;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL3N2Zi9GcmFnbWVudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFxRDtBQUNNO0FBQ0E7QUFDVjtBQUNROztBQUV6RDtBQUNBO0FBQ0EsSUFBSUssbUJBQW1CLEdBQUlGLHVEQUFjLENBQUMsQ0FBQyxHQUFJLElBQUksR0FBRyxJQUFJO0FBQzFELElBQUlHLGNBQWMsR0FBRyxHQUFHOztBQUV4QjtBQUNBO0FBQ08sU0FBU0MsUUFBUUEsQ0FBQSxFQUFHO0VBQ3ZCLElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUM7RUFDZixJQUFJLENBQUNDLFNBQVMsR0FBRyxDQUFDOztFQUVsQixJQUFJLENBQUNDLEtBQUssR0FBRyxJQUFJO0VBQ2pCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUk7RUFDdEIsSUFBSSxDQUFDQyxTQUFTLEdBQUcsSUFBSTs7RUFFckIsSUFBSSxDQUFDQyxPQUFPLEdBQUcsSUFBSTtFQUNuQixJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJOztFQUV6QixJQUFJLENBQUNDLFdBQVcsR0FBRyxJQUFJOztFQUV2QixJQUFJLENBQUNDLFdBQVcsR0FBRyxJQUFJOztFQUV2QixJQUFJLENBQUNDLGVBQWUsR0FBRyxJQUFJO0FBQy9COztBQUVPLFNBQVNDLGlDQUFpQ0EsQ0FBQ0MsR0FBRyxFQUFFQyxTQUFTLEVBQUU7RUFDOUQsSUFBSVosTUFBTSxHQUFHWSxTQUFTLENBQUNDLGVBQWUsQ0FBQ2IsTUFBTTtFQUM3QyxJQUFJYyxNQUFNLEdBQUdILEdBQUcsQ0FBQ0csTUFBTTtFQUN2QixJQUFJQyxVQUFVLEdBQUcsQ0FBQzs7RUFFbEI7RUFDQSxJQUFJQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLElBQUlDLFNBQVMsR0FBR0wsU0FBUyxDQUFDSyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDTCxTQUFTLENBQUNNLGFBQWEsR0FBR04sU0FBUyxDQUFDQyxlQUFlO0VBQ25ELEtBQUssSUFBSU0s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RCxPQUFPLEdBQUdGLENBQUMsQ0FBQyxHQUFHTCxFQUFFLENBQUNLLENBQUMsQ0FBQztJQUM5QkwsRUFBRSxDQUFDSyxDQUFDLENBQUMsR0FBR2xELFNBQVMsQ0FBQ29ELE9BQU8sR0FBR0YsQ0FBQyxDQUFDO0VBQzFDOztFQUVBM0QsS0FBSyxDQUFDM0QsS0FBSyxHQUFHb0UsU0FBUztFQUN2QlQsS0FBSyxDQUFDMUQsVUFBVSxHQUFHQSxVQUFVO0VBQzdCMEQsS0FBSyxDQUFDekQsU0FBUyxHQUFHQSxTQUFTO0VBQzNCeUQsS0FBSyxDQUFDeEQsT0FBTyxHQUFHQSxPQUFPO0VBQ3ZCd0QsS0FBSyxDQUFDdkQsYUFBYSxHQUFHQSxhQUFhO0VBQ25DdUQsS0FBSyxDQUFDNUMsU0FBUyxHQUFHQSxTQUFTO0VBQzNCNEMsS0FBSyxDQUFDcEQsZUFBZSxHQUFHQSxlQUFlO0VBQ3ZDb0QsS0FBSyxDQUFDdEQsV0FBVyxHQUFHOEcsV0FBVztFQUMvQnhELEtBQUssQ0FBQzNDLGFBQWEsR0FBR0EsYUFBYTtFQUNuQzJDLEtBQUssQ0FBQ2hELGVBQWUsR0FBR0EsZUFBZTtFQUN2Q2dELEtBQUssQ0FBQ3JELFdBQVcsR0FBR0EsV0FBVzs7RUFFL0JxRCxLQUFLLENBQUNRLFdBQVcsR0FBR0QsUUFBUTs7RUFFNUIsT0FBTytDLEVBQUU7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvc3ZmL0ZyYWdtZW50cy5qcz84ZDhiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExtdkJveDMgfSBmcm9tICcuLi8uLi8uLi93Z3Mvc2NlbmUvTG12Qm94Myc7XG5pbXBvcnQgeyBMbXZNYXRyaXg0IH0gZnJvbSAnLi4vLi4vLi4vd2dzL3NjZW5lL0xtdk1hdHJpeDQnO1xuaW1wb3J0IHsgTG12VmVjdG9yMyB9IGZyb20gJy4uLy4uLy4uL3dncy9zY2VuZS9MbXZWZWN0b3IzJztcbmltcG9ydCB7IGlzTW9iaWxlRGV2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tcGF0JztcbmltcG9ydCB7IE1lc2hGbGFncyB9IGZyb20gJy4uLy4uLy4uL3dncy9zY2VuZS9NZXNoRmxhZ3MnO1xuXG4vL0ZyYWdMaXN0IHJlcHJlc2VudHMgYW4gYXJyYXkgb2YgZnJhZ21lbnRzLCBzdG9yZWQgaW4gU3RydWN0dXJlIG9mIEFycmF5cyBmb3JtXG4vL3doaWNoIGFsbG93cyB1cyB0byBmcmVlIHNvbWUgcGFydHMgZWFzaWx5IGFuZCB0cmFuc2ZlciB0aGUgZnJhZ21lbnQgaW5mb3JtYXRpb24gaW4gbGFyZ2UgY2h1bmtzLlxudmFyIE5VTV9GUkFHTUVOVF9MSU1JVFMgPSAoaXNNb2JpbGVEZXZpY2UoKSkgPyBudWxsIDogbnVsbDtcbnZhciBNQVhfQkJPWF9SQVRJTyA9IDEwMDtcblxuLyoqIEBjb25zdHJ1Y3RvciAqL1xuLy8gbm90ZTogdXBkYXRlIHRyYW5zZmVyYWJsZSB2YXIgbGlzdCBpbiBTdmZXb3JrZXIudHMgaWYgeW91IGFkZCBhIG5ldyBmaWVsZFxuZXhwb3J0IGZ1bmN0aW9uIEZyYWdMaXN0KCkge1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLm51bUxvYWRlZCA9IDA7XG5cbiAgICB0aGlzLmJveGVzID0gbnVsbDtcbiAgICB0aGlzLnRyYW5zZm9ybXMgPSBudWxsO1xuICAgIHRoaXMubWF0ZXJpYWxzID0gbnVsbDtcblxuICAgIHRoaXMucGFja0lkcyA9IG51bGw7XG4gICAgdGhpcy5lbnRpdHlJbmRleGVzID0gbnVsbDtcblxuICAgIHRoaXMuZnJhZ0lkMmRiSWQgPSBudWxsO1xuXG4gICAgdGhpcy50b3BvSW5kZXhlcyA9IG51bGw7XG5cbiAgICB0aGlzLnZpc2liaWxpdHlGbGFncyA9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkR2VvbWV0cnlNZXRhZGF0YUludG9GcmFnbWVudHMocGZyLCBmcmFnbWVudHMpIHtcbiAgICB2YXIgbGVuZ3RoID0gZnJhZ21lbnRzLmdlb21EYXRhSW5kZXhlcy5sZW5ndGg7XG4gICAgdmFyIHN0cmVhbSA9IHBmci5zdHJlYW07XG4gICAgdmFyIHByaW1zQ291bnQgPSAwO1xuXG4gICAgLy8gUmVhZCBmcm9tIGNhY2hlIGlmIHRoZSBzYW1lIGVudHJ5IGhhcyBiZWVuIHJlYWRpbmcgZnJvbSBzdHJlYW0uXG4gICAgdmFyIGVudHJ5Q2FjaGUgPSB7fTtcbiAgICB2YXIgbWVzaDJmcmFnID0gZnJhZ21lbnRzLm1lc2gyZnJhZyA9IHt9O1xuICAgIGZyYWdtZW50cy5wb2x5Z29uQ291bnRzID0gZnJhZ21lbnRzLmdlb21EYXRhSW5kZXhlcztcbiAgICBmb3IgKHZhciBnID0gMDsgZyA8IGxlbmd0aDsgZysrKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGZyYWdtZW50cy5nZW9tRGF0YUluZGV4ZXNbZ107XG5cbiAgICAgICAgaWYgKGVudHJ5Q2FjaGVbZW50cnldKSB7XG4gICAgICAgICAgICB2YXIgaSA9IGVudHJ5Q2FjaGVbZW50cnldO1xuICAgICAgICAgICAgZnJhZ21lbnRzLnBvbHlnb25Db3VudHNbZ10gPSBmcmFnbWVudHMucG9seWdvbkNvdW50c1tpXTtcbiAgICAgICAgICAgIGZyYWdtZW50cy5wYWNrSWRzW2ddID0gZnJhZ21lbnRzLnBhY2tJZHNbaV07XG4gICAgICAgICAgICBmcmFnbWVudHMuZW50aXR5SW5kZXhlc1tnXSA9IGZyYWdtZW50cy5lbnRpdHlJbmRleGVzW2ldO1xuICAgICAgICAgICAgcHJpbXNDb3VudCArPSBmcmFnbWVudHMucG9seWdvbkNvdW50c1tnXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0c2UgPSBwZnIuc2Vla1RvRW50cnkoZW50cnkpO1xuICAgICAgICAgICAgaWYgKCF0c2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBGcmFnIHR5cGUsIHNlZW1zIG5vIHVzZSBhbnkgbW9yZS5cbiAgICAgICAgICAgIHN0cmVhbS5nZXRVaW50OCgpO1xuICAgICAgICAgICAgLy9za2lwIHBhc3Qgb2JqZWN0IHNwYWNlIGJib3ggLS0gd2UgZG9uJ3QgdXNlIHRoYXRcbiAgICAgICAgICAgIHN0cmVhbS5zZWVrKHN0cmVhbS5vZmZzZXQgKyAyNCk7XG5cbiAgICAgICAgICAgIGZyYWdtZW50cy5wb2x5Z29uQ291bnRzW2ddID0gc3RyZWFtLmdldFVpbnQxNigpO1xuICAgICAgICAgICAgZnJhZ21lbnRzLnBhY2tJZHNbZ10gPSBwYXJzZUludChwZnIucmVhZFN0cmluZygpKTtcbiAgICAgICAgICAgIGZyYWdtZW50cy5lbnRpdHlJbmRleGVzW2ddID0gcGZyLnJlYWRVMzJWKCk7XG4gICAgICAgICAgICBwcmltc0NvdW50ICs9IGZyYWdtZW50cy5wb2x5Z29uQ291bnRzW2ddO1xuXG4gICAgICAgICAgICBlbnRyeUNhY2hlW2VudHJ5XSA9IGc7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENvbnN0cnVjdCBtZXNoMmZyYWcgaGVyZSBkaXJlY3RseVxuICAgICAgICB2YXIgbWVzaGlkID0gZnJhZ21lbnRzLnBhY2tJZHNbZ10gKyBcIjpcIiArIGZyYWdtZW50cy5lbnRpdHlJbmRleGVzW2ddO1xuICAgICAgICB2YXIgbWVzaFJlZnMgPSBtZXNoMmZyYWdbbWVzaGlkXTtcbiAgICAgICAgaWYgKG1lc2hSZWZzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vSWYgaXQncyB0aGUgZmlyc3QgZnJhZ21lbnRzIGZvciB0aGlzIG1lc2gsXG4gICAgICAgICAgICAvL3N0b3JlIHRoZSBpbmRleCBkaXJlY3RseSAtLSBtb3N0IGNvbW1vbiBjYXNlLlxuICAgICAgICAgICAgbWVzaDJmcmFnW21lc2hpZF0gPSBnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1lc2hSZWZzKSkge1xuICAgICAgICAgICAgLy9vdGhlcndpc2UgcHV0IHRoZSBmcmFnbWVudHMgdGhhdFxuICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIG1lc2ggaW50byBhbiBhcnJheVxuICAgICAgICAgICAgbWVzaDJmcmFnW21lc2hpZF0gPSBbbWVzaFJlZnMsIGddO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy9hbHJlYWR5IGlzIGFuIGFycmF5XG4gICAgICAgICAgICBtZXNoUmVmcy5wdXNoKGcpO1xuICAgICAgICB9XG5cbiAgICB9XG4gICAgZnJhZ21lbnRzLmdlb21EYXRhSW5kZXhlcyA9IG51bGw7XG4gICAgZW50cnlDYWNoZSA9IG51bGw7XG5cbiAgICByZXR1cm4gcHJpbXNDb3VudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRHZW9tZXRyeU1ldGFkYXRhKHBmciwgZ2VvbXMpXG57XG4gICAgdmFyIG51bUdlb21zID0gcGZyLmdldEVudHJ5Q291bnRzKCk7XG4gICAgdmFyIHN0cmVhbSA9IHBmci5zdHJlYW07XG5cbiAgICBnZW9tcy5sZW5ndGggPSBudW1HZW9tcztcbiAgICB2YXIgZnJhZ1R5cGVzID0gZ2VvbXMuZnJhZ1R5cGVzID0gbmV3IFVpbnQ4QXJyYXkobnVtR2VvbXMpO1xuICAgIHZhciBwcmltQ291bnRzID0gZ2VvbXMucHJpbUNvdW50cyA9IG5ldyBVaW50MTZBcnJheShudW1HZW9tcyk7XG4gICAgdmFyIHBhY2tJZHMgPSBnZW9tcy5wYWNrSWRzID0gbmV3IEludDMyQXJyYXkobnVtR2VvbXMpO1xuICAgIHZhciBlbnRpdHlJbmRleGVzID0gZ2VvbXMuZW50aXR5SW5kZXhlcyA9IG5ldyBJbnQzMkFycmF5KG51bUdlb21zKTtcbiAgICAvLyBIb2xkcyB0aGUgaW5kZXhlcyB0byB0aGUgdG9wb2xvZ3kgZGF0YS5cbiAgICB2YXIgdG9wb0luZGV4ZXM7XG5cbiAgICBmb3IgKHZhciBnID0gMCwgZ0VuZCA9IG51bUdlb21zOyBnPGdFbmQ7IGcrKykge1xuICAgICAgICB2YXIgdHNlID0gcGZyLnNlZWtUb0VudHJ5KGcpO1xuICAgICAgICBpZiAoIXRzZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBmcmFnVHlwZXNbZ10gPSBzdHJlYW0uZ2V0VWludDgoKTtcbiAgICAgICAgLy9za2lwIHBhc3Qgb2JqZWN0IHNwYWNlIGJib3ggLS0gd2UgZG9uJ3QgdXNlIHRoYXRcbiAgICAgICAgc3RyZWFtLnNlZWsoc3RyZWFtLm9mZnNldCArIDI0KTtcbiAgICAgICAgcHJpbUNvdW50c1tnXSA9IHN0cmVhbS5nZXRVaW50MTYoKTtcbiAgICAgICAgcGFja0lkc1tnXSA9IHBhcnNlSW50KHBmci5yZWFkU3RyaW5nKCkpO1xuICAgICAgICBlbnRpdHlJbmRleGVzW2ddID0gcGZyLnJlYWRVMzJWKCk7XG5cbiAgICAgICAgaWYgKHRzZS52ZXJzaW9uID4gMikge1xuICAgICAgICAgICAgdmFyIHRvcG9JbmRleCA9IHN0cmVhbS5nZXRJbnQzMigpO1xuICAgICAgICAgICAgaWYgKHRvcG9JbmRleCAhPSAtMSAmJiB0b3BvSW5kZXhlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgIHRvcG9JbmRleGVzID0gZ2VvbXMudG9wb0luZGV4ZXMgPSBuZXcgSW50MzJBcnJheShudW1HZW9tcyk7XG4gICAgICAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIGZpcnN0IGVudHJpZXMgdG8gaW5kaWNhdGVcbiAgICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGc7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgIHRvcG9JbmRleGVzW2ldID0gLTE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0b3BvSW5kZXhlcyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgIHRvcG9JbmRleGVzW2ddID0gdG9wb0luZGV4O1xuICAgICAgICB9XG5cbiAgICB9XG59XG5cbi8vIENvbnZlcnQgYSBsaXN0IG9mIG9iamVjdCBpZCAoZGJpZCkgdG8gYSBsaXN0IG9mIGludGVnZXJzIHdoZXJlIGVhY2ggaW50ZWdlciBpcyBhbiBpbmRleCBvZiB0aGUgZnJhZ21lbnRcbi8vIGluIGZyYWdtZW50IGxpc3QgdGhhdCBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdCBpZC5cbmZ1bmN0aW9uIG9iamVjdElkczJGcmFnbWVudEluZGljZXMocGZyLCBpZHMpIHtcbiAgICB2YXIgcmV0ID0gW107XG5cbiAgICBpZiAoIWlkcykge1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHZhciBjb3VudHMgPSBwZnIuZ2V0RW50cnlDb3VudHMoKTtcbiAgICB2YXIgc3RyZWFtID0gcGZyLnN0cmVhbTtcbiAgICBmb3IgKHZhciBlbnRyeSA9IDA7IGVudHJ5IDwgY291bnRzOyBlbnRyeSsrKSB7XG4gICAgICAgIHZhciB0c2UgPSBwZnIuc2Vla1RvRW50cnkoZW50cnkpO1xuICAgICAgICBpZiAoIXRzZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRzZS52ZXJzaW9uID4gNSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAvLyBLZWVwIHJlYWRpbmcgZnJhZ21lbnQgZmllbGRzIGFzIHVzdWFsLCBidXQgZG9lcyBub3Qgc3RvcmUgYW55dGhpbmcgYXMgd2Ugb25seVxuICAgICAgICAvLyBpbnRlcmVzdGVkIGluIHRoZSBkYXRhIGJhc2UgaWQgLyBvYmplY3QgaWQgZmllbGQgYXQgdGhlIHZlcnkgZW5kLlxuICAgICAgICBpZiAoIHRzZS52ZXJzaW9uID4gNCApIHtcbiAgICAgICAgICAgIC8vIEZsYWcgYnl0ZS5cbiAgICAgICAgICAgIHBmci5yZWFkVTgoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYXRlcmlhbCBpbmRleFxuICAgICAgICBwZnIucmVhZFUzMlYoKTtcbiAgICAgICAgaWYgKHRzZS52ZXJzaW9uID4gMikge1xuICAgICAgICAgICAgLy8gR2VvbWV0cnkgbWV0YWRhdGEgcmVmZXJlbmNlXG4gICAgICAgICAgICBwZnIucmVhZFUzMlYoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFBhY2sgZmlsZSByZWZlcmVuY2VcbiAgICAgICAgICAgIHBmci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBwZnIucmVhZFUzMlYoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zZm9ybVxuICAgICAgICBwZnIucmVhZFRyYW5zZm9ybShlbnRyeSwgbnVsbCwgMTIgKiBlbnRyeSk7XG5cbiAgICAgICAgLy8gQm91bmRpbmcgYm94XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICBzdHJlYW0uZ2V0RmxvYXQzMigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRzZS52ZXJzaW9uID4gMSkge1xuICAgICAgICAgICAgdmFyIGRiaWQgPSBwZnIucmVhZFUzMlYoKTtcbiAgICAgICAgICAgIGlmIChpZHMuaW5kZXhPZihkYmlkKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0LnB1c2goZW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbn1cblxudmFyIF90bXBWZWN0b3IgPSBuZXcgTG12VmVjdG9yMygpO1xuXG4vLyBnbG9iYWxPZmZzZXQ6ICAgICAgICBHbG9iYWxPZmZzZXQgYXMgc3BlY2lmaWVkIGJ5IGxvYWRPcHRpb25zIChtYXkgYmUgdW5kZWZpbmVkKVxuLy8gZGVmYXVsdEdsb2JhbE9mZnNldDogR2xvYmFsT2Zmc2V0IGFzIGluaXRpYWxseSBjaG9zZW4gYnkgU3ZmUGxhY2VtZW50VXRpbC5pbml0UGxhY2VtZW50XG5leHBvcnQgZnVuY3Rpb24gcmVhZEZyYWdtZW50cyhwZnIsIGZyYWdzLCBnbG9iYWxPZmZzZXQsIHBsYWNlbWVudFRyYW5zZm9ybSwgZnJhZ21lbnRUcmFuc2Zvcm1zRG91YmxlLCBpZHMsIGJib3gsIGRlZmF1bHRHbG9iYWxPZmZzZXQpIHtcbiAgICB2YXIgZmlsdGVyZWRJbmRpY2VzID0gb2JqZWN0SWRzMkZyYWdtZW50SW5kaWNlcyhwZnIsIGlkcyk7XG5cbiAgICAvL0luaXRpYWxpemUgYWxsIHRoZSBmcmFnbWVudHMgc3RydWN0dXJlc1xuICAgIC8vb25jZSB3ZSBrbm93IGhvdyBtYW55IGZyYWdtZW50cyB3ZSBoYXZlLlxuICAgIHZhciBudW1GcmFncyA9IGZpbHRlcmVkSW5kaWNlcy5sZW5ndGggPyBmaWx0ZXJlZEluZGljZXMubGVuZ3RoIDogcGZyLmdldEVudHJ5Q291bnRzKCk7XG4gICAgdmFyIHN0cmVhbSA9IHBmci5zdHJlYW07XG5cbiAgICBpZiAoTlVNX0ZSQUdNRU5UX0xJTUlUUyAmJiBudW1GcmFncyA+IE5VTV9GUkFHTUVOVF9MSU1JVFMpIHtcbiAgICAgICAgbnVtRnJhZ3MgPSBOVU1fRlJBR01FTlRfTElNSVRTO1xuICAgIH1cblxuICAgIC8vIFJlY29yZWQgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgZnJhZ21lbnRzXG4gICAgZnJhZ3MudG90YWxMZW5ndGggPSBwZnIuZ2V0RW50cnlDb3VudHMoKTtcbiAgICBmcmFncy5sZW5ndGggPSBudW1GcmFncztcbiAgICBmcmFncy5udW1Mb2FkZWQgPSAwO1xuXG4gICAgLy9BbGxvY2F0ZSBmbGF0IGFycmF5IHBlciBmcmFnbWVudCBwcm9wZXJ0eVxuICAgIHZhciBmcmFnQm94ZXMgICAgICAgPSBmcmFncy5ib3hlcyA9ICAgICAgICAgICAgICAgICBmcmFnbWVudFRyYW5zZm9ybXNEb3VibGUgPyBuZXcgRmxvYXQ2NEFycmF5KDYqbnVtRnJhZ3MpIDogbmV3IEZsb2F0MzJBcnJheSg2Km51bUZyYWdzKTtcbiAgICB2YXIgdHJhbnNmb3JtcyAgICAgID0gZnJhZ3MudHJhbnNmb3JtcyA9ICAgICAgICAgICAgZnJhZ21lbnRUcmFuc2Zvcm1zRG91YmxlID8gbmV3IEZsb2F0NjRBcnJheSgxMipudW1GcmFncyk6IG5ldyBGbG9hdDMyQXJyYXkoMTIqbnVtRnJhZ3MpO1xuICAgIHZhciBtYXRlcmlhbHMgICAgICAgPSBmcmFncy5tYXRlcmlhbHMgPSAgICAgICAgICAgICBuZXcgSW50MzJBcnJheShudW1GcmFncyk7XG4gICAgdmFyIHBhY2tJZHMgICAgICAgICA9IGZyYWdzLnBhY2tJZHMgPSAgICAgICAgICAgICAgIG5ldyBJbnQzMkFycmF5KG51bUZyYWdzKTtcbiAgICB2YXIgZW50aXR5SW5kZXhlcyAgID0gZnJhZ3MuZW50aXR5SW5kZXhlcyA9ICAgICAgICAgbmV3IEludDMyQXJyYXkobnVtRnJhZ3MpO1xuICAgIHZhciBnZW9tRGF0YUluZGV4ZXMgPSBmcmFncy5nZW9tRGF0YUluZGV4ZXMgPSAgICAgICBuZXcgSW50MzJBcnJheShudW1GcmFncyk7XG4gICAgdmFyIGZyYWdJZDJkYklkICAgICA9IGZyYWdzLmZyYWdJZDJkYklkID0gICAgICAgICAgIG5ldyBJbnQzMkFycmF5KG51bUZyYWdzKTsgLy9OT1RFOiB0aGlzIHBvdGVudGlhbGx5IHRydW5jYXRlcyBJRHMgYmlnZ2VyIHRoYW4gNCBiaWxsaW9uIC0tIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYXJyYXkgaWYgbmVlZGVkLlxuICAgIHZhciB2aXNpYmlsaXR5RmxhZ3MgPSBmcmFncy52aXNpYmlsaXR5RmxhZ3MgPSAgICAgICBuZXcgVWludDE2QXJyYXkobnVtRnJhZ3MpO1xuXG4gICAgdmFyIHRtcEJveDtcbiAgICB2YXIgdG1wTWF0O1xuICAgIHZhciBib3hUcmFuc2xhdGlvbiA9IFswLDAsMF07XG4gICAgaWYgKHBsYWNlbWVudFRyYW5zZm9ybSkge1xuICAgICAgICB0bXBCb3ggPSBuZXcgTG12Qm94MygpO1xuICAgICAgICB0bXBNYXQgPSBuZXcgTG12TWF0cml4NCh0cnVlKS5mcm9tQXJyYXkocGxhY2VtZW50VHJhbnNmb3JtLmVsZW1lbnRzKTtcbiAgICB9XG5cbiAgICB2YXIgY2FsY3VsYXRlT2Zmc2V0ID0gIWdsb2JhbE9mZnNldCAmJiBiYm94O1xuICAgIHZhciBkcFRyYW5zbGF0aW9ucyA9IHRyYW5zZm9ybXM7XG4gICAgLy8gTm9ybWFsbHkgdGhlIHRyYW5zbGF0aW9ucyBjb21wb25lbnQgb2YgdHJhbnNmb3JtcyBpcyAxMiBlbnRyaWVzIGZvciBlYWNoXG4gICAgLy8gdHJhbnNmb3JtIGFuZCB0aGVuIG9mZnNldCBieSA5IGluIHRoZSB0cmFuc2Zvcm0uXG4gICAgdmFyIHRyYW5zbGF0aW9uU2l6ZSA9IDEyO1xuICAgIHZhciB0cmFuc2xhdGlvbk9mZiA9IDk7XG4gICAgaWYgKGNhbGN1bGF0ZU9mZnNldCkge1xuICAgICAgICAvLyBBIGdsb2JhbCBvZmZzZXQgd2Fzbid0IHNwZWNpZmllZCBpbiB0aGUgbG9hZCBjb250ZXh0LCBzbyB3ZSB3aWxsIGNhbGN1bGF0ZSBvbmVcbiAgICAgICAgLy8gaGVyZS4gV2Ugbm9ybWFsbHkgdXNlIHRoZSBjZW50ZXIgb2YgdGhlIGJib3gsIGJ1dCBpZiB0aGUgYmJveCBpcyBzaWduZmljYW50bHlcbiAgICAgICAgLy8gbGFyZ2VyIHRoYW4gdGhlIG9iamVjdHMgaW4gdGhlIG1vZGVsLCB0aGVuIHdlIG1ha2UgdGhlIGdsb2JhbCBvZmZzZXQgdGhlXG4gICAgICAgIC8vIGF2ZXJhZ2Ugb2YgdGhlIGNlbnRlcnMgb2YgdGhlIGZyYWdtZW50IGJvdW5kaW5nIGJveGVzLCB3aGljaCB3aWxsIHB1c2hcbiAgICAgICAgLy8gb2Zmc2V0IHRvd2FyZCBwbGFjZXMgd2hlcmUgdGhlcmUgYXJlIG1vcmUgZnJhZ21lbnRzLlxuICAgICAgICBpZiAoIWZyYWdtZW50VHJhbnNmb3Jtc0RvdWJsZSkge1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBrZWVwIGJib3hlcyBhbmQgdHJhbnNmb3JtIHRyYW5zbGF0aW9ucyBpbiBkb3VibGUgcHJlY2lzaW9uXG4gICAgICAgICAgICAvLyB0byBndWFyYW50ZWUgcHJlY2lzaW9uIGluIGxhcmdlIGJib3ggY2FzZXNcbiAgICAgICAgICAgIGZyYWdCb3hlcyA9IG5ldyBGbG9hdDY0QXJyYXkoNipudW1GcmFncyk7XG4gICAgICAgICAgICBkcFRyYW5zbGF0aW9ucyA9IG5ldyBGbG9hdDY0QXJyYXkoMypudW1GcmFncyk7XG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0aW9ucyBhcmUgMyBlbnRyaWVzIG9mZnNldCBieSAwXG4gICAgICAgICAgICB0cmFuc2xhdGlvblNpemUgPSAzO1xuICAgICAgICAgICAgdHJhbnNsYXRpb25PZmYgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9IZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG1haW4gZnJhZ21lbnQgcmVhZCBsb29wLlxuXG4gICAgZnVuY3Rpb24gYXBwbHlQbGFjZW1lbnQoaW5kZXgpIHtcbiAgICAgICAgaWYgKHBsYWNlbWVudFRyYW5zZm9ybSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IGluZGV4ICogNjtcbiAgICAgICAgICAgIHRtcEJveC5zZXRGcm9tQXJyYXkoZnJhZ0JveGVzLCBvZmZzZXQpO1xuICAgICAgICAgICAgdG1wQm94LmFwcGx5TWF0cml4NCh0bXBNYXQpO1xuICAgICAgICAgICAgdG1wQm94LmNvcHlUb0FycmF5KGZyYWdCb3hlcywgb2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRCb3VuZGluZ0JveChlbnRyeSkge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gZW50cnkgKiA2O1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8NjsgaSsrKVxuICAgICAgICAgICAgZnJhZ0JveGVzW29mZnNldCsrXSA9IHN0cmVhbS5nZXRGbG9hdDMyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZEJvdW5kaW5nQm94T2Zmc2V0KGVudHJ5LCBib3hUcmFuc2xhdGlvbikge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gZW50cnkgKiA2O1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8NjsgaSsrKVxuICAgICAgICAgICAgZnJhZ0JveGVzW29mZnNldCsrXSA9IHN0cmVhbS5nZXRGbG9hdDMyKCkgKyBib3hUcmFuc2xhdGlvbltpICUgM107XG4gICAgfVxuXG4gICAgLy9TcGluIHRocm91Z2ggYWxsIHRoZSBmcmFnbWVudHMgbm93XG4gICAgZm9yICh2YXIgZW50cnk9MCwgZUVuZD1mcmFncy5sZW5ndGg7IGVudHJ5PGVFbmQ7IGVudHJ5KyspIHtcbiAgICAgICAgdmFyIHRzZSA9IGZpbHRlcmVkSW5kaWNlcy5sZW5ndGggPyBwZnIuc2Vla1RvRW50cnkoZmlsdGVyZWRJbmRpY2VzW2VudHJ5XSkgOiBwZnIuc2Vla1RvRW50cnkoZW50cnkpO1xuXG4gICAgICAgIGlmICghdHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHNlLnZlcnNpb24gPiA1KVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHZhciBpc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICBpZiAoIHRzZS52ZXJzaW9uID4gNCApIHtcbiAgICAgICAgICAgIC8vIEZyYWdtZW50cyB2NSsgaW5jbHVkZSBhIGZsYWcgYnl0ZSwgdGhlIExTQiBvZiB3aGljaCBkZW5vdGVzXG4gICAgICAgICAgICAvLyB2aXNpYmlsaXR5XG4gICAgICAgICAgICB2YXIgZmxhZ3MgPSBwZnIucmVhZFU4KCk7XG4gICAgICAgICAgICBpc1Zpc2libGUgPSAoZmxhZ3MgJiAweDAxKSAhPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZpc2liaWxpdHlGbGFnc1tlbnRyeV0gPSBpc1Zpc2libGUgPyBNZXNoRmxhZ3MuTUVTSF9WSVNJQkxFIDogMDtcblxuICAgICAgICBtYXRlcmlhbHNbZW50cnldID0gcGZyLnJlYWRVMzJWKCk7XG5cbiAgICAgICAgaWYgKHRzZS52ZXJzaW9uID4gMikge1xuICAgICAgICAgICAgLy9JbiBjYXNlIGl0J3MgbmV3IHN0eWxlIGZyYWdtZW50IHRoYXRcbiAgICAgICAgICAgIC8vcG9pbnRzIHRvIGEgZ2VvbWV0cnkgbWV0YWRhdGEgZW50cnlcbiAgICAgICAgICAgIGdlb21EYXRhSW5kZXhlc1tlbnRyeV0gPSBwZnIucmVhZFUzMlYoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vT2xkIHN0eWxlIGZyYWdtZW50LCBwYWNrIHJlZmVyZW5jZSBpcyBkaXJlY3RseVxuICAgICAgICAgICAgLy9lbmNvZGVkIGluIHRoZSBmcmFnbWVudCBlbnRyeVxuICAgICAgICAgICAgcGFja0lkc1tlbnRyeV0gPSBwYXJzZUludChwZnIucmVhZFN0cmluZygpKTtcbiAgICAgICAgICAgIGVudGl0eUluZGV4ZXNbZW50cnldID0gcGZyLnJlYWRVMzJWKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwZnIucmVhZFRyYW5zZm9ybShlbnRyeSwgdHJhbnNmb3JtcywgMTIqZW50cnksIHBsYWNlbWVudFRyYW5zZm9ybSwgZ2xvYmFsT2Zmc2V0LCBib3hUcmFuc2xhdGlvbik7XG4gICAgICAgIGlmIChjYWxjdWxhdGVPZmZzZXQgJiYgZHBUcmFuc2xhdGlvbnMgIT09IHRyYW5zZm9ybXMpIHtcbiAgICAgICAgICAgIGRwVHJhbnNsYXRpb25zLnNldChib3hUcmFuc2xhdGlvbiwgZW50cnkgKiB0cmFuc2xhdGlvblNpemUgKyB0cmFuc2xhdGlvbk9mZik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHNlLnZlcnNpb24gPiAzKSB7XG4gICAgICAgICAgICAvLyBXaXRoIHRoaXMgdmVyc2lvbiB0aGUgdHJhbnNmb3JtJ3MgKGRvdWJsZSBwcmVjaXNpb24pIHRyYW5zbGF0aW9uIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgQkIsXG4gICAgICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBiYWNrXG4gICAgICAgICAgICByZWFkQm91bmRpbmdCb3hPZmZzZXQoZW50cnksIGJveFRyYW5zbGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlYWRCb3VuZGluZ0JveChlbnRyeSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL0FwcGx5IHRoZSBwbGFjZW1lbnQgdHJhbnNmb3JtIHRvIHRoZSB3b3JsZCBzcGFjZSBiYm94XG4gICAgICAgIGFwcGx5UGxhY2VtZW50KGVudHJ5KTtcblxuICAgICAgICAvL0FwcGx5IGFueSBnbG9iYWwgb2Zmc2V0IHRvIHRoZSB3b3JsZCBzcGFjZSBiYm94XG4gICAgICAgIGlmIChnbG9iYWxPZmZzZXQpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBlbnRyeSAqIDY7XG4gICAgICAgICAgICBmcmFnQm94ZXNbb2Zmc2V0KytdIC09IGdsb2JhbE9mZnNldC54O1xuICAgICAgICAgICAgZnJhZ0JveGVzW29mZnNldCsrXSAtPSBnbG9iYWxPZmZzZXQueTtcbiAgICAgICAgICAgIGZyYWdCb3hlc1tvZmZzZXQrK10gLT0gZ2xvYmFsT2Zmc2V0Lno7XG4gICAgICAgICAgICBmcmFnQm94ZXNbb2Zmc2V0KytdIC09IGdsb2JhbE9mZnNldC54O1xuICAgICAgICAgICAgZnJhZ0JveGVzW29mZnNldCsrXSAtPSBnbG9iYWxPZmZzZXQueTtcbiAgICAgICAgICAgIGZyYWdCb3hlc1tvZmZzZXQrK10gLT0gZ2xvYmFsT2Zmc2V0Lno7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHNlLnZlcnNpb24gPiAxKSB7XG4gICAgICAgICAgICBmcmFnSWQyZGJJZFtlbnRyeV0gPSBwZnIucmVhZFUzMlYoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTa2lwIHJlYWRpbmcgcGF0aCBJRCB3aGljaCBpcyBub3QgaW4gdXNlIG5vdy5cbiAgICAgICAgLy8gcGZyLnJlYWRQYXRoSUQoKTtcbiAgICB9XG5cbiAgICBpZiAoY2FsY3VsYXRlT2Zmc2V0KSB7XG4gICAgICAgIC8vIFdlIGNvbXBhcmUgdGhlIHNpemUgb2YgdGhlIGJib3ggYWdhaW5zdCB0aGUgc2l6ZSBvZiB0aGUgbGFyZ2VzdFxuICAgICAgICAvLyBtYXggc2l6ZSBvZiB0aGUgYm91bmRpbmcgYm94ZXMgaW4gdGhlIG1vZGVsIHRvIHNlZSBkZWNpZGVcbiAgICAgICAgLy8gd2hhdCB0byB1c2UgYXMgdGhlIGdsb2JhbE9mZnNldC5cblxuICAgICAgICAvLyBGaXJzdCBjYWxjdWxhdGUgdGhlIG1heCBvZiBvYmplY3QgYm94IHNpemVzXG4gICAgICAgIHZhciBtYXhYID0gLTEsIG1heFkgPSAtMSwgbWF4WiA9IC0xO1xuICAgICAgICB2YXIgYm94RW5kID0gZnJhZ0JveGVzLmxlbmd0aDtcbiAgICAgICAgLy8gRWZmZWN0aXZlbHkgdGhpcyBjYWxjdWxhdGVzIHRoZSBhdmVyYWdlIG9mIHRoZSBjZW50ZXJzIG9mIHRoZSBmcmFnbWVudCBiYm94ZXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib3hFbmQ7IGkgKz0gNikge1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGZyYWdCb3hlc1tpICsgM10gLSBmcmFnQm94ZXNbaV0pO1xuICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIGZyYWdCb3hlc1tpICsgNF0gLSBmcmFnQm94ZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG1heFogPSBNYXRoLm1heChtYXhaLCBmcmFnQm94ZXNbaSArIDVdIC0gZnJhZ0JveGVzW2kgKyAyXSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2l6ZSA9IGJib3guZ2V0U2l6ZShfdG1wVmVjdG9yKTtcbiAgICAgICAgaWYgKHNpemUueCA+IG1heFggKiBNQVhfQkJPWF9SQVRJTyB8fCBzaXplLnkgPiBtYXhZICogTUFYX0JCT1hfUkFUSU8gfHwgc2l6ZS56ID4gbWF4WiAqIE1BWF9CQk9YX1JBVElPKSB7XG4gICAgICAgICAgICAvLyBOb3cgY2FsY3VsYXRlIHRoZSB3ZWlnaHRlZCBvZmZzZXQuIFRoZSB3ZWlnaHRlZCBnbG9iYWxPZmZzZXQgaXNcbiAgICAgICAgICAgIC8vIHdlaWdodGVkIHRvIGJlIGNsb3NlIHRvIHBsYWNlcyB3aXRoIG1vcmUgZnJhZ21lbnRzLlxuICAgICAgICAgICAgdmFyIG9mZnNldFggPSAwLCBvZmZzZXRZID0gMCwgb2Zmc2V0WiA9IDA7XG4gICAgICAgICAgICAvLyBFZmZlY3RpdmVseSB0aGlzIGNhbGN1bGF0ZXMgdGhlIGF2ZXJhZ2Ugb2YgdGhlIGNlbnRlcnMgb2YgdGhlIGZyYWdtZW50IGJib3hlc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib3hFbmQ7IGkgKz0gMykge1xuICAgICAgICAgICAgICAgIG9mZnNldFggKz0gZnJhZ0JveGVzW2ldO1xuICAgICAgICAgICAgICAgIG9mZnNldFkgKz0gZnJhZ0JveGVzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBvZmZzZXRaICs9IGZyYWdCb3hlc1tpICsgMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnbG9iYWxPZmZzZXQgPSBuZXcgTG12VmVjdG9yMyhvZmZzZXRYICogMyAvIGJveEVuZCwgb2Zmc2V0WSAqIDMgLyBib3hFbmQsIG9mZnNldFogKiAzIC8gYm94RW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbE9mZnNldCA9IGRlZmF1bHRHbG9iYWxPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZWVkIHRvIGFkZGp1c3QgdGhlIGJvdW5kaW5nIGJveGVzLCB1c2luZyB0aGUgZ2xvYmFsT2Zmc2V0XG4gICAgICAgIHZhciBvdXRCb3hlcyA9IGZyYWdzLmJveGVzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJveEVuZDsgaSArPSAzKSB7XG4gICAgICAgICAgICBvdXRCb3hlc1tpXSA9IGZyYWdCb3hlc1tpXSAtIGdsb2JhbE9mZnNldC54O1xuICAgICAgICAgICAgb3V0Qm94ZXNbaSArIDFdID0gZnJhZ0JveGVzW2kgKyAxXSAtIGdsb2JhbE9mZnNldC55O1xuICAgICAgICAgICAgb3V0Qm94ZXNbaSArIDJdID0gZnJhZ0JveGVzW2kgKyAyXSAtIGdsb2JhbE9mZnNldC56O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBsYWNlbWVudFRyYW5zZm9ybSAmJiBkcFRyYW5zbGF0aW9ucyAhPT0gdHJhbnNmb3Jtcykge1xuICAgICAgICAgICAgdmFyIHRtcFZlYyA9IG5ldyBMbXZWZWN0b3IzKCk7XG4gICAgICAgICAgICAvLyBBbmQgYWRqdXN0IHRoZSB0cmFuc2Zvcm1zLCB0b29cbiAgICAgICAgICAgIGZvciAoZW50cnkgPSAwOyBlbnRyeSA8IGVFbmQ7ICsrZW50cnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmcm9tID0gZW50cnkgKiB0cmFuc2xhdGlvblNpemUgKyB0cmFuc2xhdGlvbk9mZjtcbiAgICAgICAgICAgICAgICB0bXBWZWMuZnJvbUFycmF5KGRwVHJhbnNsYXRpb25zLCBmcm9tKS5hcHBseU1hdHJpeDQodG1wTWF0KS50b0FycmF5KGRwVHJhbnNsYXRpb25zLCBmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFuZCBhZGp1c3QgdGhlIHRyYW5zZm9ybXMsIHRvb1xuICAgICAgICBmb3IgKGVudHJ5ID0gMDsgZW50cnkgPCBlRW5kOyArK2VudHJ5KSB7XG4gICAgICAgICAgICB2YXIgdG8gPSBlbnRyeSAqIDEyICsgOTtcbiAgICAgICAgICAgIHZhciBmcm9tID0gZW50cnkgKiB0cmFuc2xhdGlvblNpemUgKyB0cmFuc2xhdGlvbk9mZjtcbiAgICAgICAgICAgIHRyYW5zZm9ybXNbdG9dID0gZHBUcmFuc2xhdGlvbnNbZnJvbV0gLSBnbG9iYWxPZmZzZXQueDtcbiAgICAgICAgICAgIHRyYW5zZm9ybXNbdG8gKyAxXSA9IGRwVHJhbnNsYXRpb25zW2Zyb20gKyAxXSAtIGdsb2JhbE9mZnNldC55O1xuICAgICAgICAgICAgdHJhbnNmb3Jtc1t0byArIDJdID0gZHBUcmFuc2xhdGlvbnNbZnJvbSArIDJdIC0gZ2xvYmFsT2Zmc2V0Lno7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmcmFncy5maW5pc2hMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBnbG9iYWxPZmZzZXQ7XG59XG5cbi8vIEZpbHRlciBmcmFnbWVudHMgYmFzZWQgb24gc3BlY2lmaWVkIG9iamVjdCBpZCBsaXN0LCBieSBwaWNraW5nXG4vLyB1cCBmcmFnbWVudCB3aG9zZSBpZCBpcyBpbiB0aGUgc3BlY2lmaWVkIGlkIGxpc3QsIGFuZCBkcm9wcGluZyBvdGhlcnMuXG4vLyBUaGlzIGlzIHVzZWQgdG8gcHJvZHVjZSBhIGxpc3Qgb2YgZnJhZ21lbnRzIHRoYXQgbWF0Y2hlcyBhIHNlYXJjaCBoaXQuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRnJhZ21lbnRzKGZyYWdzLCBpZHMpIHtcbiAgICBmcmFncy5sZW5ndGggPSBpZHMubGVuZ3RoO1xuICAgIGZyYWdzLm51bUxvYWRlZCA9IDA7XG4gICAgbGV0IG51bUZyYWdzID0gZnJhZ3MubGVuZ3RoO1xuICAgIGxldCBiYiA9IFtJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcblxuICAgIGxldCBmcmFnQm94ZXMgICAgICAgPSBuZXcgRmxvYXQzMkFycmF5KDYgKiBudW1GcmFncyk7XG4gICAgbGV0IHRyYW5zZm9ybXMgICAgICA9IG5ldyBGbG9hdDMyQXJyYXkoMTIgKiBudW1GcmFncyk7XG4gICAgbGV0IG1hdGVyaWFscyAgICAgICA9IG5ldyBJbnQzMkFycmF5KG51bUZyYWdzKTtcbiAgICBsZXQgcGFja0lkcyAgICAgICAgID0gbmV3IEludDMyQXJyYXkobnVtRnJhZ3MpO1xuICAgIGxldCBlbnRpdHlJbmRleGVzICAgPSBuZXcgSW50MzJBcnJheShudW1GcmFncyk7XG4gICAgbGV0IHZpc2liaWxpdHlGbGFncyA9IG5ldyBVaW50MTZBcnJheShudW1GcmFncyk7XG4gICAgbGV0IGZyYWdJZDJEYklkICAgICA9IG5ldyBJbnQzMkFycmF5KG51bUZyYWdzKTtcbiAgICBsZXQgcG9seWdvbkNvdW50cyAgID0gbmV3IEludDMyQXJyYXkobnVtRnJhZ3MpO1xuICAgIGxldCBnZW9tRGF0YUluZGV4ZXMgPSBmcmFncy5nZW9tRGF0YUluZGV4ZXMgPyBuZXcgSW50MzJBcnJheShudW1GcmFncykgOiBudWxsO1xuICAgIGxldCB0b3BvSW5kZXhlcyAgICAgPSBmcmFncy50b3BvSW5kZXhlcyA/IG5ldyBJbnQzMkFycmF5KG51bUZyYWdzKSA6IG51bGw7XG5cbiAgICB2YXIgbWVzaDJmcmFnID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBsZXQgaW5kZXggPSBpZHNbaV07XG5cbiAgICAgICAgbGV0IGlkeE9sZCA9IGluZGV4ICogNjtcbiAgICAgICAgbGV0IGlkeE5ldyA9IGkgKiA2O1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDY7ICsrailcbiAgICAgICAgICAgIGZyYWdCb3hlc1tpZHhOZXcrK10gPSBmcmFncy5ib3hlc1tpZHhPbGQrK107XG5cbiAgICAgICAgaWR4T2xkID0gaW5kZXggKiAxMjtcbiAgICAgICAgaWR4TmV3ID0gaSAqIDEyO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDEyOyArK2opXG4gICAgICAgICAgICB0cmFuc2Zvcm1zW2lkeE5ldysrXSA9IGZyYWdzLnRyYW5zZm9ybXNbaWR4T2xkKytdO1xuXG4gICAgICAgIG1hdGVyaWFsc1tpXSA9IGZyYWdzLm1hdGVyaWFsc1tpbmRleF07XG4gICAgICAgIHBhY2tJZHNbaV0gPSBmcmFncy5wYWNrSWRzW2luZGV4XTtcbiAgICAgICAgZW50aXR5SW5kZXhlc1tpXSA9IGZyYWdzLmVudGl0eUluZGV4ZXNbaW5kZXhdO1xuICAgICAgICB2aXNpYmlsaXR5RmxhZ3NbaV0gPSBmcmFncy52aXNpYmlsaXR5RmxhZ3NbaW5kZXhdO1xuICAgICAgICBmcmFnSWQyRGJJZFtpXSA9IGZyYWdzLmZyYWdJZDJkYklkW2luZGV4XTtcbiAgICAgICAgcG9seWdvbkNvdW50c1tpXSA9IGZyYWdzLnBvbHlnb25Db3VudHNbaW5kZXhdO1xuICAgICAgICBpZiAoZ2VvbURhdGFJbmRleGVzKSB7XG4gICAgICAgICAgICBnZW9tRGF0YUluZGV4ZXNbaV0gPSBmcmFncy5nZW9tRGF0YUluZGV4ZXNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3BvSW5kZXhlcykge1xuICAgICAgICAgICAgdG9wb0luZGV4ZXNbaV0gPSBmcmFncy50b3BvSW5kZXhlc1tpbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBjb25zb2xpZGF0ZSB0aGlzIHdpdGggYWRkVG9NZXNoTWFwLlxuICAgICAgICBsZXQgbWVzaElEID0gZnJhZ3MucGFja0lkc1tpbmRleF0gKyBcIjpcIiArIGZyYWdzLmVudGl0eUluZGV4ZXNbaW5kZXhdO1xuICAgICAgICBsZXQgbWVzaFJlZnMgPSBtZXNoMmZyYWdbbWVzaElEXTtcbiAgICAgICAgaWYgKG1lc2hSZWZzID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbWVzaDJmcmFnW21lc2hJRF0gPSBpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1lc2hSZWZzKSkge1xuICAgICAgICAgICAgbWVzaDJmcmFnW21lc2hJRF0gPSBbbWVzaFJlZnMsIGldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWVzaFJlZnMucHVzaChpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBiYkluZGV4ID0gaSAqIDY7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMzsgKytqKVxuICAgICAgICAgICAgaWYgKGZyYWdCb3hlc1tiYkluZGV4ICsgal0gPCBiYltqXSlcbiAgICAgICAgICAgICAgICBiYltqXSA9IGZyYWdCb3hlc1tiYkluZGV4ICsgal07XG4gICAgICAgIGZvciAobGV0IGogPSAzOyBqIDwgNjsgKytqKVxuICAgICAgICAgICAgaWYgKGZyYWdCb3hlc1tiYkluZGV4ICsgal0gPiBiYltqXSlcbiAgICAgICAgICAgICAgICBiYltqXSA9IGZyYWdCb3hlc1tiYkluZGV4ICsgal07XG4gICAgfVxuXG4gICAgZnJhZ3MuYm94ZXMgPSBmcmFnQm94ZXM7XG4gICAgZnJhZ3MudHJhbnNmb3JtcyA9IHRyYW5zZm9ybXM7XG4gICAgZnJhZ3MubWF0ZXJpYWxzID0gbWF0ZXJpYWxzO1xuICAgIGZyYWdzLnBhY2tJZHMgPSBwYWNrSWRzO1xuICAgIGZyYWdzLmVudGl0eUluZGV4ZXMgPSBlbnRpdHlJbmRleGVzO1xuICAgIGZyYWdzLm1lc2gyZnJhZyA9IG1lc2gyZnJhZztcbiAgICBmcmFncy52aXNpYmlsaXR5RmxhZ3MgPSB2aXNpYmlsaXR5RmxhZ3M7XG4gICAgZnJhZ3MuZnJhZ0lkMmRiSWQgPSBmcmFnSWQyRGJJZDtcbiAgICBmcmFncy5wb2x5Z29uQ291bnRzID0gcG9seWdvbkNvdW50cztcbiAgICBmcmFncy5nZW9tRGF0YUluZGV4ZXMgPSBnZW9tRGF0YUluZGV4ZXM7XG4gICAgZnJhZ3MudG9wb0luZGV4ZXMgPSB0b3BvSW5kZXhlcztcblxuICAgIGZyYWdzLnRvdGFsTGVuZ3RoID0gbnVtRnJhZ3M7XG5cbiAgICByZXR1cm4gYmI7XG59XG4iXSwibmFtZXMiOlsiTG12Qm94MyIsIkxtdk1hdHJpeDQiLCJMbXZWZWN0b3IzIiwiaXNNb2JpbGVEZXZpY2UiLCJNZXNoRmxhZ3MiLCJOVU1fRlJBR01FTlRfTElNSVRTIiwiTUFYX0JCT1hfUkFUSU8iLCJGcmFnTGlzdCIsImxlbmd0aCIsIm51bUxvYWRlZCIsImJveGVzIiwidHJhbnNmb3JtcyIsIm1hdGVyaWFscyIsInBhY2tJZHMiLCJlbnRpdHlJbmRleGVzIiwiZnJhZ0lkMmRiSWQiLCJ0b3BvSW5kZXhlcyIsInZpc2liaWxpdHlGbGFncyIsInJlYWRHZW9tZXRyeU1ldGFkYXRhSW50b0ZyYWdtZW50cyIsInBmciIsImZyYWdtZW50cyIsImdlb21EYXRhSW5kZXhlcyIsInN0cmVhbSIsInByaW1zQ291bnQiLCJlbnRyeUNhY2hlIiwibWVzaDJmcmFnIiwicG9seWdvbkNvdW50cyIsImciLCJlbnRyeSIsImkiLCJ0c2UiLCJzZWVrVG9FbnRyeSIsImdldFVpbnQ4Iiwic2VlayIsIm9mZnNldCIsImdldFVpbnQxNiIsInBhcnNlSW50IiwicmVhZFN0cmluZyIsInJlYWRVMzJWIiwibWVzaGlkIiwibWVzaFJlZnMiLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwicmVhZEdlb21ldHJ5TWV0YWRhdGEiLCJnZW9tcyIsIm51bUdlb21zIiwiZ2V0RW50cnlDb3VudHMiLCJmcmFnVHlwZXMiLCJVaW50OEFycmF5IiwicHJpbUNvdW50cyIsIlVpbnQxNkFycmF5IiwiSW50MzJBcnJheSIsImdFbmQiLCJ2ZXJzaW9uIiwidG9wb0luZGV4IiwiZ2V0SW50MzIiLCJvYmplY3RJZHMyRnJhZ21lbnRJbmRpY2VzIiwiaWRzIiwicmV0IiwiY291bnRzIiwicmVhZFU4IiwicmVhZFRyYW5zZm9ybSIsImdldEZsb2F0MzIiLCJkYmlkIiwiaW5kZXhPZiIsIl90bXBWZWN0b3IiLCJyZWFkRnJhZ21lbnRzIiwiZnJhZ3MiLCJnbG9iYWxPZmZzZXQiLCJwbGFjZW1lbnRUcmFuc2Zvcm0iLCJmcmFnbWVudFRyYW5zZm9ybXNEb3VibGUiLCJiYm94IiwiZGVmYXVsdEdsb2JhbE9mZnNldCIsImZpbHRlcmVkSW5kaWNlcyIsIm51bUZyYWdzIiwidG90YWxMZW5ndGgiLCJmcmFnQm94ZXMiLCJGbG9hdDY0QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJ0bXBCb3giLCJ0bXBNYXQiLCJib3hUcmFuc2xhdGlvbiIsImZyb21BcnJheSIsImVsZW1lbnRzIiwiY2FsY3VsYXRlT2Zmc2V0IiwiZHBUcmFuc2xhdGlvbnMiLCJ0cmFuc2xhdGlvblNpemUiLCJ0cmFuc2xhdGlvbk9mZiIsImFwcGx5UGxhY2VtZW50IiwiaW5kZXgiLCJzZXRGcm9tQXJyYXkiLCJhcHBseU1hdHJpeDQiLCJjb3B5VG9BcnJheSIsInJlYWRCb3VuZGluZ0JveCIsInJlYWRCb3VuZGluZ0JveE9mZnNldCIsImVFbmQiLCJpc1Zpc2libGUiLCJmbGFncyIsIk1FU0hfVklTSUJMRSIsInNldCIsIngiLCJ5IiwieiIsIm1heFgiLCJtYXhZIiwibWF4WiIsImJveEVuZCIsIk1hdGgiLCJtYXgiLCJzaXplIiwiZ2V0U2l6ZSIsIm9mZnNldFgiLCJvZmZzZXRZIiwib2Zmc2V0WiIsIm91dEJveGVzIiwidG1wVmVjIiwiZnJvbSIsInRvQXJyYXkiLCJ0byIsImZpbmlzaExvYWRpbmciLCJmaWx0ZXJGcmFnbWVudHMiLCJiYiIsIkluZmluaXR5IiwiZnJhZ0lkMkRiSWQiLCJpZHhPbGQiLCJpZHhOZXciLCJqIiwibWVzaElEIiwiYmJJbmRleCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/svf/Fragments.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/svf/Geoms.js": /*!*********************************************!*\ !*** ./src/file-loaders/lmvtk/svf/Geoms.js ***! \*********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readGeometry: () => (/* binding */ readGeometry)\n/* harmony export */ });\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../compat */ \"./src/compat.js\");\n/* harmony import */ var _common_VbUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/VbUtils */ \"./src/file-loaders/lmvtk/common/VbUtils.js\");\n\n\n\n\"use strict\";\n\n//=====================================================================\n//=====================================================================\n//=====================================================================\n//=====================================================================\n//=====================================================================\n//=====================================================================\n//=====================================================================\n\nvar ntmp = new Float32Array(3);\n\nvar INV_PI = 1.0 / Math.PI;\n\nvar atan2 = Math.atan2;\nif (!(0,_compat__WEBPACK_IMPORTED_MODULE_0__.isNodeJS)()) {\n //Faster approximation to atan2\n //http://math.stackexchange.com/questions/1098487/atan2-faster-approximation\n //The algorithm does not deal with special cases such as x=0,y=0x=0,y=0,\n //nor does it consider special IEEE-754 floating-point operands such as infinities and NaN.\n atan2 = function (y, x) {\n var ax = Math.abs(x);\n var ay = Math.abs(y);\n //var a = (ax > ay) ? ay / ax : ax / ay;\n var a = Math.min(ax, ay) / Math.max(ax, ay);\n var s = a * a;\n var r = ((-0.0464964749 * s + 0.15931422) * s - 0.327622764) * s * a + a;\n if (ay > ax)\n r = 1.57079637 - r;\n if (x < 0)\n r=3 .14159274 - r;\n if (y < 0)\n r=- r;\n return r;\n };\n}\n\nfunction readOpenCTM_RAW(stream, mesh, dstBuffer, startOffset, estimateSizeOnly) {\n\n var readOpenCTMString=f unction () {\n return stream.getString(stream.getInt32());\n };\n\n //Now do the data reads\n var name=s tream.getString(4);\n if (name !=\ "INDX\") return null;\n\n var vcount=m esh.vertexCount;\n var tcount=m esh.triangleCount;\n var stride=m esh.vbstride;\n\n //We will create a single ArrayBuffer to back both the vertex and index buffers\n //The indices will be places after the vertex information, because we need alignment\n //of 4 bytes\n var vbSizeFloat=v count * stride;\n var totalSizeInFloats=v bSizeFloat + (tcount * 3 * 2 + 3) / 4 | 0;\n\n mesh.sharedBufferBytes=t otalSizeInFloats * 4;\n\n if (estimateSizeOnly) {\n return;\n }\n\n var vbf;\n if (!dstBuffer) {\n dstBuffer=n ew ArrayBuffer(totalSizeInFloats * 4);\n startOffset=0 ;\n }\n\n vbf=m esh.vb=n ew Float32Array(dstBuffer, startOffset, vbSizeFloat);\n mesh.indices=n ew Uint16Array(dstBuffer, startOffset + vbSizeFloat * 4, tcount * 3);\n stream.getIndicesArray(vbf.buffer, startOffset + vbSizeFloat * 4, tcount * 3);\n\n name=s tream.getString(4);\n if (name !=\ "VERT\") return null;\n\n var vbi;\n //See if we want to pack the normals into two shorts\n if (mesh.vblayout.normal && mesh.vblayout.normal.itemSize===2 )\n vbi=n ew Uint16Array(vbf.buffer, vbf.byteOffset, vbf.byteLength / 2);\n\n //Read positions\n stream.getVector3Array(vbf, vcount, mesh.vblayout[ 'position'].offset, stride);\n\n //Read normals\n var i, t, offset;\n if (mesh.flags & 1) {\n name=s tream.getString(4);\n if (name !=\ "NORM\") return null;\n\n if (vbi) {\n if (ntmp.length < vcount * 3)\n ntmp=n ew Float32Array(vcount * 3);\n stream.getVector3Array(ntmp, vcount, 0, 3);\n\n for (i=0 , offset=m esh.vblayout[ 'normal'].offset;\n i < vcount;\n i++, offset +=s tride)\n {\n var pnx=( atan2(ntmp[i * 3 + 1], ntmp[i * 3]) * INV_PI + 1.0) * 0.5;\n var pny=( ntmp[i * 3 + 2] + 1.0) * 0.5;\n\n vbi[offset * 2]=p nx * 65535 | 0;\n vbi[offset * 2 + 1]=p ny * 65535 | 0;\n }\n } else {\n stream.getVector3Array(vbf, vcount, mesh.vblayout[ 'normal'].offset, stride);\n }\n\n }\n\n //Read uv layers\n for (t=0 ; t < mesh.texMapCount; t++) {\n name=s tream.getString(4);\n if (name !=\ "TEXC\") return null;\n\n var uv={ \n name: readOpenCTMString(),\n file: readOpenCTMString()\n };\n mesh.uvs.push(uv);\n\n var uvname=\ "uv\";\n if (t)\n uvname +=( t + 1).toString();\n\n stream.getVector2Array(vbf, vcount, mesh.vblayout[uvname].offset, stride);\n }\n\n var attributeOffset=s tride - (mesh.attribMapCount || 0) * 3;\n\n //Read vertex colors and uvw (and skip any other attributes that we don 't know)\n for (t = 0; t < mesh.attribMapCount; t++) {\n name = stream.getString(4);\n if (name != \"ATTR\") return null;\n\n var attr = {\n name: readOpenCTMString()\n };\n\n // console.log(\"attribute\", attr.name);\n\n var attrname;\n if (attr.name.indexOf(\"Color\") != -1) //Special case of vertex colors\n attrname = 'color ';else\n if (attr.name.indexOf(\"UVW\") != -1) //Only used by prism 3d wood.\n attrname = 'uvw ';else\n {\n //Other attributes, though we don't know what to do with those\n mesh.attrs.push(attr);\n stream.getBytes(vcount * 16); //skip past\n continue;\n }\n\n mesh.vblayout[attrname]={ offset: attributeOffset, itemSize: 3 };\n\n var v4=[ 0, 0, 0, 0];\n for (i=0 , offset=a ttributeOffset;\n i < vcount;\n i++, offset +=s tride) {\n stream.getVector4(v4, 0);\n vbf[offset]=v 4[0];\n vbf[offset + 1]=v 4[1];\n vbf[offset + 2]=v 4[2];\n //Ignoring the alpha term. For color attribute, we can actually pack it in a 4-byte attribute,\n //but we do not know in advance (when we allocate the target buffer) if the OCTM attribute is UVW or color\n }\n attributeOffset +=3 ;\n }\n\n}\n\n// Helper function for calculating new vertex for wide lines\nvar getLineSplitVertex=f unction (stride, vbf, neighbourhoods, a, b) {\n // New vertex position\n var pos={ \n x: vbf[stride * a],\n y: vbf[stride * a + 1],\n z: vbf[stride * a + 2]\n };\n // Direction to the next vertex for segment (must be valid always)\n var next={ \n x: pos.x - vbf[stride * b],\n y: pos.y - vbf[stride * b + 1],\n z: pos.z - vbf[stride * b + 2]\n };\n\n // Index of previous point\n var prev_ind=n eighbourhoods[a].next==b ? neighbourhoods[a].prev : neighbourhoods[a].next;\n\n // Direction to previous point\n var prev;\n // If does not exist\n if (prev_ind < 0) {\n // mirror next direction\n prev={ \n x: next.x,\n y: next.y,\n z: next.z\n };\n } else {\n // else - set directly\n prev={ \n x: vbf[stride * prev_ind] - pos.x,\n y: vbf[stride * prev_ind + 1] - pos.y,\n z: vbf[stride * prev_ind + 2] - pos.z\n };\n }\n\n return {\n pos: pos,\n next: next,\n prev: prev\n };\n};\n\n// convert a line mesh into specially organised triangles, which will be drawn\n// as lines with a specific width\nvar convertToWideLines=f unction (mesh, stride, vbf, indexPairs, offset) {\n\n var numCoords=3 ;\n\n // add some extra vertex data to the mesh\n // prev & next are directions specific vertex positions, which are used to specify\n // the offset direction in the shader\n // side is the directed line width used for the magnitude of the offset in the shader\n offset=m esh.vbstride;\n mesh.vblayout[ 'prev']={ offset: offset, itemSize: numCoords };\n offset +=n umCoords;\n mesh.vblayout[ 'next']={ offset: offset, itemSize: numCoords };\n offset +=n umCoords;\n mesh.vblayout[ 'side']={ offset: offset, itemSize: 1 };\n\n mesh.vbstride +=7 ;\n\n // Count of shared vertexes\n var connections=0 ;\n\n // Build neighbourhoods of each vertex\n var neighbourhoods=n ew Array(mesh.vertexCount);\n var i, j, n, a, b;\n for (i=0 ; i < mesh.vertexCount; ++i) {\n neighbourhoods[i]={ \n prev: -1, // index of previous vertex\n next: -1, // index of next vertex\n prev_seg: -1 // index of previous segment\n };\n }\n\n for (j=0 ; j < indexPairs; ++j) {\n n=j * 2;\n a=m esh.indices[n];\n b=m esh.indices[n + 1];\n neighbourhoods[a].next=b ;\n if (neighbourhoods[a].prev>= 0) {\n ++connections;\n }\n\n neighbourhoods[b].prev = a;\n neighbourhoods[b].prev_seg = j;\n if (neighbourhoods[b].next >= 0) {\n ++connections;\n }\n }\n\n // Each segment will have its own vertexes\n var newBaseVertexCount = indexPairs * 2;\n var newBaseVertexies = new Array(newBaseVertexCount);\n\n // Indexes contains line segments and additional connection for shared vertexes\n var newIndices = new Uint16Array(2 * numCoords * (indexPairs + connections));\n var meshIndex = 0;\n\n // Split all vertexes and build indexes of all triangles\n for (j = 0; j < indexPairs; ++j) {\n n=j * 2;\n a=m esh.indices[n];\n b=m esh.indices[n + 1];\n // New vertexes with calculated next and previous points\n newBaseVertexies[n]=g etLineSplitVertex(stride, vbf, neighbourhoods, a, b);\n newBaseVertexies[n + 1]=g etLineSplitVertex(stride, vbf, neighbourhoods, b, a);\n\n // Segment triangles\n a=n ;\n b=n + 1;\n // First two coordinates form line segment are used in ray casting\n newIndices[meshIndex++]=2 * a + 1;\n newIndices[meshIndex++]=2 * b;\n newIndices[meshIndex++]=2 * a;\n newIndices[meshIndex++]=2 * b;\n newIndices[meshIndex++]=2 * b + 1;\n newIndices[meshIndex++]=2 * a;\n\n // Connection triangles for shared vertexes, if exist\n a=m esh.indices[n];\n if (neighbourhoods[a].prev>= 0) {\n b = neighbourhoods[a].prev_seg * 2 + 1;\n a = n;\n\n newIndices[meshIndex++] = 2 * b;\n newIndices[meshIndex++] = 2 * a;\n newIndices[meshIndex++] = 2 * b + 1;\n newIndices[meshIndex++] = 2 * a + 1;\n newIndices[meshIndex++] = 2 * a;\n newIndices[meshIndex++] = 2 * b;\n }\n }\n mesh.indices = newIndices;\n\n // Finally, fill vertex buffer with new data\n var newVertexCount = newBaseVertexCount * 2;\n mesh.vb = new Float32Array(newVertexCount * mesh.vbstride);\n\n offset = mesh.vblayout['position'].offset;\n for (var c = 0; c < newBaseVertexCount; ++c) {\n // Duplicate every vertex for each side\n for (var side=0 ; side < 2; ++side) {\n // Vertex position\n mesh.vb[offset]=n ewBaseVertexies[c].pos.x;\n mesh.vb[offset + 1]=n ewBaseVertexies[c].pos.y;\n mesh.vb[offset + 2]=n ewBaseVertexies[c].pos.z;\n offset +=s tride;\n\n // Previous vertex direction\n mesh.vb[offset]=n ewBaseVertexies[c].prev.x;\n mesh.vb[offset + 1]=n ewBaseVertexies[c].prev.y;\n mesh.vb[offset + 2]=n ewBaseVertexies[c].prev.z;\n offset +=n umCoords;\n\n // Next vertex direction\n mesh.vb[offset]=n ewBaseVertexies[c].next.x;\n mesh.vb[offset + 1]=n ewBaseVertexies[c].next.y;\n mesh.vb[offset + 2]=n ewBaseVertexies[c].next.z;\n offset +=n umCoords;\n\n // Side (offset direction)\n mesh.vb[offset]=s ide ? -1 : 1;\n offset +=1 ;\n }\n }\n\n mesh.vertexCount=n ewVertexCount;\n\n // flag to mark this mesh as special\n mesh.isWideLines=t rue;\n};\n\n//=====================================================================\n//=====================================================================\n//=====================================================================\n//=====================================================================\n//=====================================================================\n//=====================================================================\n//=====================================================================\n\n\nvar readOpenCTM=f unction (stream, dstBuffer, startOffset, estimateSizeOnly, packNormals) {\n\n var readOpenCTMString=f unction () {\n return stream.getString(stream.getInt32());\n };\n\n var fourcc=s tream.getString(4);\n if (fourcc !=\ "OCTM\") return null;\n\n var version=s tream.getInt32();\n if (version !=5 ) return null;\n\n var method=s tream.getString(3);\n stream.getUint8(); //read the last 0 char of the RAW or MG2 fourCC.\n\n var mesh={ \n stream: null,\n vertices: null,\n indices: null,\n normals: null,\n colors: null,\n uvs: [],\n attrs: []\n };\n\n mesh.vertexCount=s tream.getInt32();\n mesh.triangleCount=s tream.getInt32();\n mesh.texMapCount=s tream.getInt32();\n mesh.attribMapCount=s tream.getInt32();\n mesh.flags=s tream.getInt32();\n mesh.comment=r eadOpenCTMString();\n\n var usePackedNormals=p ackNormals;\n\n\n //Calculate stride of the interleaved buffer we need\n mesh.vbstride=3 ; //position is always there\n if (mesh.flags & 1)\n mesh.vbstride +=u sePackedNormals ? 1 : 3; //normal\n mesh.vbstride +=2 * (mesh.texMapCount || 0); //texture coords\n mesh.vbstride +=3 * (mesh.attribMapCount || 0); //we now support color and uvw. Both of them use three floats.\n\n mesh.vblayout={ };\n var offset=0 ;\n\n mesh.vblayout[ 'position']={ offset: offset, itemSize: 3 };\n\n offset +=3 ;\n if (mesh.flags & 1) {\n mesh.vblayout[ 'normal']={ offset: offset,\n itemSize: usePackedNormals ? 2 : 3,\n bytesPerItem: usePackedNormals ? 2 : 4,\n normalized: usePackedNormals };\n\n offset +=u sePackedNormals ? 1 : 3; //offset is counted in units of 4 bytes\n }\n if (mesh.texMapCount) {\n for (var i=0 ; i < mesh.texMapCount; i++) {\n var uvname=\ "uv\";\n if (i)\n uvname +=( i + 1).toString();\n\n mesh.vblayout[uvname]={ offset: offset, itemSize: 2 };\n offset +=2 ;\n }\n }\n\n //Now read and populate the mesh data\n if (method==\ "RAW\") {\n readOpenCTM_RAW(stream, mesh, dstBuffer, startOffset, estimateSizeOnly);\n if (!estimateSizeOnly) {\n _common_VbUtils__WEBPACK_IMPORTED_MODULE_1__.VBUtils.deduceUVRepetition(mesh);\n _common_VbUtils__WEBPACK_IMPORTED_MODULE_1__.VBUtils.computeBounds3D(mesh);\n }\n return mesh;\n } else\n if (method==\ "MG2\") {\n //This code path is never used, since MG2 compression is disabled at the LMVTK C++ level\n console.assert(false, \ "readOpenCTM_MG2(stream, mesh, dstBuffer, startOffset, estimateSizeOnly) not supported\");\n }\n return null;\n};\n\n\nvar readLinesOrPoints=f unction (pfr, tse, estimateSizeOnly, lines) {\n\n //TODO: Line geometry does not go into shared buffers yet\n if (estimateSizeOnly)\n return null;\n\n // Initialize mesh\n var mesh={ \n vertices: null,\n indices: null,\n colors: null,\n normals: null,\n uvs: [],\n attrs: [],\n lineWidth: 1.0\n };\n\n // Read vertex count, index count, polyline bound count\n var indexCount;\n if (lines) {\n // Read vertex count, index count, polyline bound count\n var polyLineBoundCount;\n if (tse.version> 1) {\n mesh.vertexCount = pfr.readU16();\n indexCount = pfr.readU16();\n polyLineBoundCount = pfr.readU16();\n\n if (tse.version > 2) {\n mesh.lineWidth = pfr.readF32();\n }\n } else {\n mesh.vertexCount = pfr.readU32V();\n indexCount = pfr.readU32V();\n polyLineBoundCount = pfr.readU32V();\n }\n mesh.isLines = true;\n } else {\n // Read vertex count, index count, point size\n mesh.vertexCount = pfr.readU16();\n indexCount = pfr.readU16();\n mesh.pointSize = pfr.readF32();\n mesh.isPoints = true;\n }\n\n // Determine if color is defined\n var hasColor = pfr.stream.getUint8() != 0;\n\n\n //Calculate stride of the interleaved buffer we need\n mesh.vbstride = 3; //position is always there\n if (hasColor)\n mesh.vbstride += 3; //we only interleave the color attribute, and we reduce that to RGB from ARGB.\n\n mesh.vblayout = {};\n var offset = 0;\n\n mesh.vblayout['position'] = { offset: offset, itemSize: 3 };\n\n offset += 3;\n if (hasColor) {\n mesh.vblayout['color'] = { offset: offset, itemSize: 3 };\n }\n\n mesh.vb = new Float32Array(mesh.vertexCount * mesh.vbstride);\n\n\n // Read vertices\n var vbf = mesh.vb;\n var stride = mesh.vbstride;\n var stream = pfr.stream;\n\n stream.getVector3Array(vbf, mesh.vertexCount, mesh.vblayout['position'].offset, stride);\n\n // Determine color if specified\n var c, cEnd;\n if (hasColor) {\n for (c = 0, offset = mesh.vblayout['color'].offset, cEnd = mesh.vertexCount;\n c < cEnd;\n c++, offset +=s tride)\n {\n vbf[offset]=s tream.getFloat32();\n vbf[offset + 1]=s tream.getFloat32();\n vbf[offset + 2]=s tream.getFloat32();\n stream.getFloat32(); //skip alpha -- TODO: convert color to ARGB 32 bit integer in the vertex layout and shader\n }\n }\n\n // Copies bytes from buffer\n var forceCopy=f unction (b) {\n return b.buffer.slice(b.byteOffset, b.byteOffset + b.length);\n };\n\n // Read indices and polyline bound buffer\n if (lines) {\n var indices;\n var polyLineBoundBuffer;\n if (tse.version> 1) {\n // 16 bit format\n indices = new Uint16Array(forceCopy(stream.getBytes(indexCount * 2)));\n polyLineBoundBuffer = new Uint16Array(forceCopy(stream.getBytes(polyLineBoundCount * 2)));\n } else\n {\n // 32 bit format\n indices = new Int32Array(forceCopy(stream.getBytes(indexCount * 4)));\n polyLineBoundBuffer = new Int32Array(forceCopy(stream.getBytes(polyLineBoundCount * 4)));\n }\n\n // three.js uses GL-style index pairs in its index buffer. We need one pair\n // per segment in each polyline\n var indexPairs = polyLineBoundBuffer[polyLineBoundCount - 1] - polyLineBoundCount + 1;\n\n mesh.indices = new Uint16Array(2 * indexPairs);\n\n // Extract the individual line segment index pairs\n var meshIndex = 0;\n for (var i = 0; i + 1 < polyLineBoundCount; i++) {\n for (var j=p olyLineBoundBuffer[i]; j + 1 < polyLineBoundBuffer[i + 1]; j++) {\n mesh.indices[meshIndex++]=i ndices[j];\n mesh.indices[meshIndex++]=i ndices[j + 1];\n }\n }\n } else {\n mesh.indices=n ew Uint16Array(forceCopy(stream.getBytes(indexCount * 2)));\n }\n\n if (mesh.lineWidth !=1 .0) {\n convertToWideLines(mesh, stride, vbf, indexPairs, offset);\n }\n\n _common_VbUtils__WEBPACK_IMPORTED_MODULE_1__.VBUtils.computeBounds3D(mesh);\n\n return mesh;\n};\n\nvar readLines=f unction (pfr, tse, estimateSizeOnly) {\n return readLinesOrPoints(pfr, tse, estimateSizeOnly, true);\n};\n\nvar readPoints=f unction (pfr, tse, estimateSizeOnly) {\n return readLinesOrPoints(pfr, tse, estimateSizeOnly, false);\n};\n\nfunction readGeometry(pfr, entry, options) {\n var tse=p fr.seekToEntry(entry);\n if (!tse)\n return null;\n\n if (tse.entryType==\ "Autodesk.CloudPlatform.OpenCTM\") {\n return readOpenCTM(pfr.stream, options.dstBuffer, options.startOffset, options.estimateSizeOnly, options.packNormals);\n } else\n if (tse.entryType==\ "Autodesk.CloudPlatform.Lines\") {\n return readLines(pfr, tse, options.estimateSizeOnly);\n } else\n if (tse.entryType==\ "Autodesk.CloudPlatform.Points\") {\n return readPoints(pfr, tse, options.estimateSizeOnly);\n }\n\n return null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LElBQUlrQixHQUFHLENBQUN3QixTQUFTLElBQUksOEJBQThCLEVBQUU7SUFDdEQsT0FBT04sU0FBUyxDQUFDbkIsR0FBRyxFQUFFQyxHQUFHLEVBQUVzQixPQUFPLENBQUNySCxnQkFBZ0IsQ0FBQztFQUN4RCxDQUFDO0VBQ0ksSUFBSStGLEdBQUcsQ0FBQ3dCLFNBQVMsSUFBSSwrQkFBK0IsRUFBRTtJQUN2RCxPQUFPTCxVQUFVLENBQUNwQixHQUFHLEVBQUVDLEdBQUcsRUFBRXNCLE9BQU8sQ0FBQ3JILGdCQUFnQixDQUFDO0VBQ3pEOztFQUVBLE9BQU8sSUFBSTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9zdmYvR2VvbXMuanM/ODIyNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGVKUyB9IGZyb20gXCIuLi8uLi8uLi9jb21wYXRcIjtcbmltcG9ydCB7IFZCVXRpbHMgfSBmcm9tICcuLi9jb21tb24vVmJVdGlscyc7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG52YXIgbnRtcCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG5cbnZhciBJTlZfUEkgPSAxLjAgLyBNYXRoLlBJO1xuXG52YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuaWYgKCFpc05vZGVKUygpKSB7XG4gICAgLy9GYXN0ZXIgYXBwcm94aW1hdGlvbiB0byBhdGFuMlxuICAgIC8vaHR0cDovL21hdGguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzEwOTg0ODcvYXRhbjItZmFzdGVyLWFwcHJveGltYXRpb25cbiAgICAvL1RoZSBhbGdvcml0aG0gZG9lcyBub3QgZGVhbCB3aXRoIHNwZWNpYWwgY2FzZXMgc3VjaCBhcyB4PTAseT0weD0wLHk9MCxcbiAgICAvL25vciBkb2VzIGl0IGNvbnNpZGVyIHNwZWNpYWwgSUVFRS03NTQgZmxvYXRpbmctcG9pbnQgb3BlcmFuZHMgc3VjaCBhcyBpbmZpbml0aWVzIGFuZCBOYU4uXG4gICAgYXRhbjIgPSBmdW5jdGlvbih5LCB4KSB7XG4gICAgICAgIHZhciBheCA9IE1hdGguYWJzKHgpO1xuICAgICAgICB2YXIgYXkgPSBNYXRoLmFicyh5KTtcbiAgICAgICAgLy92YXIgYSA9IChheCA+IGF5KSA/IGF5IC8gYXggOiBheCAvIGF5O1xuICAgICAgICB2YXIgYSA9IE1hdGgubWluKGF4LCBheSkgLyBNYXRoLm1heChheCwgYXkpO1xuICAgICAgICB2YXIgcyA9IGEgKiBhO1xuICAgICAgICB2YXIgciA9ICgoLTAuMDQ2NDk2NDc0OSAqIHMgKyAwLjE1OTMxNDIyKSAqIHMgLSAwLjMyNzYyMjc2NCkgKiBzICogYSArIGE7XG4gICAgICAgIGlmIChheSA+IGF4KVxuICAgICAgICAgICAgciA9IDEuNTcwNzk2MzcgLSByO1xuICAgICAgICBpZiAoeCA8IDApXG4gICAgICAgICAgICByID0gMy4xNDE1OTI3NCAtIHI7XG4gICAgICAgIGlmICh5IDwgMClcbiAgICAgICAgICAgIHIgPSAtcjtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gcmVhZE9wZW5DVE1fUkFXKHN0cmVhbSwgbWVzaCwgZHN0QnVmZmVyLCBzdGFydE9mZnNldCwgZXN0aW1hdGVTaXplT25seSkge1xuXG4gICAgdmFyIHJlYWRPcGVuQ1RNU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZ2V0U3RyaW5nKHN0cmVhbS5nZXRJbnQzMigpKTtcbiAgICB9O1xuXG4gICAgLy9Ob3cgZG8gdGhlIGRhdGEgcmVhZHNcbiAgICB2YXIgbmFtZSA9IHN0cmVhbS5nZXRTdHJpbmcoNCk7XG4gICAgaWYgKG5hbWUgIT0gXCJJTkRYXCIpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIHZjb3VudCA9IG1lc2gudmVydGV4Q291bnQ7XG4gICAgdmFyIHRjb3VudCA9IG1lc2gudHJpYW5nbGVDb3VudDtcbiAgICB2YXIgc3RyaWRlID0gbWVzaC52YnN0cmlkZTtcblxuICAgIC8vV2Ugd2lsbCBjcmVhdGUgYSBzaW5nbGUgQXJyYXlCdWZmZXIgdG8gYmFjayBib3RoIHRoZSB2ZXJ0ZXggYW5kIGluZGV4IGJ1ZmZlcnNcbiAgICAvL1RoZSBpbmRpY2VzIHdpbGwgYmUgcGxhY2VzIGFmdGVyIHRoZSB2ZXJ0ZXggaW5mb3JtYXRpb24sIGJlY2F1c2Ugd2UgbmVlZCBhbGlnbm1lbnRcbiAgICAvL29mIDQgYnl0ZXNcbiAgICB2YXIgdmJTaXplRmxvYXQgPSB2Y291bnQgKiBzdHJpZGU7XG4gICAgdmFyIHRvdGFsU2l6ZUluRmxvYXRzID0gdmJTaXplRmxvYXQgKyAoKHRjb3VudCozKjIgKyAzKSAvIDQpfDA7XG5cbiAgICBtZXNoLnNoYXJlZEJ1ZmZlckJ5dGVzID0gdG90YWxTaXplSW5GbG9hdHMgKiA0O1xuXG4gICAgaWYgKGVzdGltYXRlU2l6ZU9ubHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB2YmY7XG4gICAgaWYgKCFkc3RCdWZmZXIpIHtcbiAgICAgICAgZHN0QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRvdGFsU2l6ZUluRmxvYXRzICogNCk7XG4gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICB2YmYgPSBtZXNoLnZiID0gbmV3IEZsb2F0MzJBcnJheShkc3RCdWZmZXIsIHN0YXJ0T2Zmc2V0LCB2YlNpemVGbG9hdCk7XG4gICAgbWVzaC5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGRzdEJ1ZmZlciwgc3RhcnRPZmZzZXQgKyB2YlNpemVGbG9hdCo0LCB0Y291bnQqMyk7XG4gICAgc3RyZWFtLmdldEluZGljZXNBcnJheSh2YmYuYnVmZmVyLCBzdGFydE9mZnNldCArIHZiU2l6ZUZsb2F0KjQsIHRjb3VudCozKTtcblxuICAgIG5hbWUgPSBzdHJlYW0uZ2V0U3RyaW5nKDQpO1xuICAgIGlmIChuYW1lICE9IFwiVkVSVFwiKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciB2Ymk7XG4gICAgLy9TZWUgaWYgd2Ugd2FudCB0byBwYWNrIHRoZSBub3JtYWxzIGludG8gdHdvIHNob3J0c1xuICAgIGlmIChtZXNoLnZibGF5b3V0Lm5vcm1hbCAmJiBtZXNoLnZibGF5b3V0Lm5vcm1hbC5pdGVtU2l6ZSA9PT0gMilcbiAgICAgICAgdmJpID0gbmV3IFVpbnQxNkFycmF5KHZiZi5idWZmZXIsIHZiZi5ieXRlT2Zmc2V0LCB2YmYuYnl0ZUxlbmd0aCAvIDIpO1xuXG4gICAgLy9SZWFkIHBvc2l0aW9uc1xuICAgIHN0cmVhbS5nZXRWZWN0b3IzQXJyYXkodmJmLCB2Y291bnQsIG1lc2gudmJsYXlvdXRbJ3Bvc2l0aW9uJ10ub2Zmc2V0LCBzdHJpZGUpO1xuXG4gICAgLy9SZWFkIG5vcm1hbHNcbiAgICB2YXIgaSwgdCwgb2Zmc2V0O1xuICAgIGlmIChtZXNoLmZsYWdzICYgMSkge1xuICAgICAgICBuYW1lID0gc3RyZWFtLmdldFN0cmluZyg0KTtcbiAgICAgICAgaWYgKG5hbWUgIT0gXCJOT1JNXCIpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmICh2YmkpIHtcbiAgICAgICAgICAgIGlmIChudG1wLmxlbmd0aCA8IHZjb3VudCozKVxuICAgICAgICAgICAgICAgIG50bXAgPSBuZXcgRmxvYXQzMkFycmF5KHZjb3VudCozKTtcbiAgICAgICAgICAgIHN0cmVhbS5nZXRWZWN0b3IzQXJyYXkobnRtcCwgdmNvdW50LCAwLCAzKTtcblxuICAgICAgICAgICAgZm9yIChpPTAsIG9mZnNldD1tZXNoLnZibGF5b3V0Wydub3JtYWwnXS5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgIGk8dmNvdW50O1xuICAgICAgICAgICAgICAgICBpKyssIG9mZnNldCArPSBzdHJpZGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHBueCA9IChhdGFuMihudG1wW2kqMysxXSwgbnRtcFtpKjNdKSAqIElOVl9QSSArIDEuMCkgKiAwLjU7XG4gICAgICAgICAgICAgICAgdmFyIHBueSA9IChudG1wW2kqMysyXSArIDEuMCkgKiAwLjU7XG5cbiAgICAgICAgICAgICAgICB2Ymlbb2Zmc2V0KjJdID0gKHBueCAqIDY1NTM1KXwwO1xuICAgICAgICAgICAgICAgIHZiaVtvZmZzZXQqMisxXSA9IChwbnkgKiA2NTUzNSl8MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbS5nZXRWZWN0b3IzQXJyYXkodmJmLCB2Y291bnQsIG1lc2gudmJsYXlvdXRbJ25vcm1hbCddLm9mZnNldCwgc3RyaWRlKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLy9SZWFkIHV2IGxheWVyc1xuICAgIGZvciAodD0wOyB0PG1lc2gudGV4TWFwQ291bnQ7IHQrKykge1xuICAgICAgICBuYW1lID0gc3RyZWFtLmdldFN0cmluZyg0KTtcbiAgICAgICAgaWYgKG5hbWUgIT0gXCJURVhDXCIpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHZhciB1diA9IHtcbiAgICAgICAgICAgIG5hbWUgOiByZWFkT3BlbkNUTVN0cmluZygpLFxuICAgICAgICAgICAgZmlsZSA6IHJlYWRPcGVuQ1RNU3RyaW5nKClcbiAgICAgICAgfTtcbiAgICAgICAgbWVzaC51dnMucHVzaCh1dik7XG5cbiAgICAgICAgdmFyIHV2bmFtZSA9IFwidXZcIjtcbiAgICAgICAgaWYgKHQpXG4gICAgICAgICAgICB1dm5hbWUgKz0gKHQrMSkudG9TdHJpbmcoKTtcblxuICAgICAgICBzdHJlYW0uZ2V0VmVjdG9yMkFycmF5KHZiZiwgdmNvdW50LCBtZXNoLnZibGF5b3V0W3V2bmFtZV0ub2Zmc2V0LCBzdHJpZGUpO1xuICAgIH1cblxuICAgIHZhciBhdHRyaWJ1dGVPZmZzZXQgPSBzdHJpZGUgLSAobWVzaC5hdHRyaWJNYXBDb3VudHx8MCkgKiAzO1xuXG4gICAgLy9SZWFkIHZlcnRleCBjb2xvcnMgYW5kIHV2dyAoYW5kIHNraXAgYW55IG90aGVyIGF0dHJpYnV0ZXMgdGhhdCB3ZSBkb24ndCBrbm93KVxuICAgIGZvciAodD0wOyB0PG1lc2guYXR0cmliTWFwQ291bnQ7IHQrKykge1xuICAgICAgICBuYW1lID0gc3RyZWFtLmdldFN0cmluZyg0KTtcbiAgICAgICAgaWYgKG5hbWUgIT0gXCJBVFRSXCIpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHZhciBhdHRyID0ge1xuICAgICAgICAgICAgbmFtZSA6IHJlYWRPcGVuQ1RNU3RyaW5nKClcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImF0dHJpYnV0ZVwiLCBhdHRyLm5hbWUpO1xuXG4gICAgICAgIHZhciBhdHRybmFtZTtcbiAgICAgICAgaWYgKGF0dHIubmFtZS5pbmRleE9mKFwiQ29sb3JcIikgIT0gLTEpLy9TcGVjaWFsIGNhc2Ugb2YgdmVydGV4IGNvbG9yc1xuICAgICAgICAgICAgYXR0cm5hbWUgPSAnY29sb3InO1xuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWUuaW5kZXhPZihcIlVWV1wiKSAhPSAtMSkvL09ubHkgdXNlZCBieSBwcmlzbSAzZCB3b29kLlxuICAgICAgICAgICAgYXR0cm5hbWUgPSAndXZ3JztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvL090aGVyIGF0dHJpYnV0ZXMsIHRob3VnaCB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aG9zZVxuICAgICAgICAgICAgbWVzaC5hdHRycy5wdXNoKGF0dHIpO1xuICAgICAgICAgICAgc3RyZWFtLmdldEJ5dGVzKHZjb3VudCoxNik7IC8vc2tpcCBwYXN0XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lc2gudmJsYXlvdXRbYXR0cm5hbWVdID0geyBvZmZzZXQgOiBhdHRyaWJ1dGVPZmZzZXQsIGl0ZW1TaXplIDogM307XG5cbiAgICAgICAgdmFyIHY0ID0gWzAsMCwwLDBdO1xuICAgICAgICBmb3IgKGk9MCwgb2Zmc2V0PWF0dHJpYnV0ZU9mZnNldDtcbiAgICAgICAgICAgICAgICBpPHZjb3VudDtcbiAgICAgICAgICAgICAgICBpKyssIG9mZnNldCArPSBzdHJpZGUpIHtcbiAgICAgICAgICAgIHN0cmVhbS5nZXRWZWN0b3I0KHY0LDApO1xuICAgICAgICAgICAgdmJmW29mZnNldF0gPSB2NFswXTtcbiAgICAgICAgICAgIHZiZltvZmZzZXQrMV0gPSB2NFsxXTtcbiAgICAgICAgICAgIHZiZltvZmZzZXQrMl0gPSB2NFsyXTtcbiAgICAgICAgICAgIC8vSWdub3JpbmcgdGhlIGFscGhhIHRlcm0uIEZvciBjb2xvciBhdHRyaWJ1dGUsIHdlIGNhbiBhY3R1YWxseSBwYWNrIGl0IGluIGEgNC1ieXRlIGF0dHJpYnV0ZSxcbiAgICAgICAgICAgIC8vYnV0IHdlIGRvIG5vdCBrbm93IGluIGFkdmFuY2UgKHdoZW4gd2UgYWxsb2NhdGUgdGhlIHRhcmdldCBidWZmZXIpIGlmIHRoZSBPQ1RNIGF0dHJpYnV0ZSBpcyBVVlcgb3IgY29sb3JcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVPZmZzZXQgKz0gMztcbiAgICB9XG5cbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBjYWxjdWxhdGluZyBuZXcgdmVydGV4IGZvciB3aWRlIGxpbmVzXG52YXIgZ2V0TGluZVNwbGl0VmVydGV4ID0gZnVuY3Rpb24oc3RyaWRlLCB2YmYsIG5laWdoYm91cmhvb2RzLCBhLCBiKSB7XG4gICAgLy8gTmV3IHZlcnRleCBwb3NpdGlvblxuICAgIHZhciBwb3MgPSB7XG4gICAgICAgIHg6IHZiZltzdHJpZGUgKiBhXSxcbiAgICAgICAgeTogdmJmW3N0cmlkZSAqIGEgKyAxXSxcbiAgICAgICAgejogdmJmW3N0cmlkZSAqIGEgKyAyXVxuICAgIH07XG4gICAgLy8gRGlyZWN0aW9uIHRvIHRoZSBuZXh0IHZlcnRleCBmb3Igc2VnbWVudCAobXVzdCBiZSB2YWxpZCBhbHdheXMpXG4gICAgdmFyIG5leHQgPSB7XG4gICAgICAgIHg6IHBvcy54IC0gdmJmW3N0cmlkZSAqIGJdLFxuICAgICAgICB5OiBwb3MueSAtIHZiZltzdHJpZGUgKiBiICsgMV0sXG4gICAgICAgIHo6IHBvcy56IC0gdmJmW3N0cmlkZSAqIGIgKyAyXVxuICAgIH07XG5cbiAgICAvLyBJbmRleCBvZiBwcmV2aW91cyBwb2ludFxuICAgIHZhciBwcmV2X2luZCA9IChuZWlnaGJvdXJob29kc1thXS5uZXh0ID09IGIpID8gbmVpZ2hib3VyaG9vZHNbYV0ucHJldiA6IG5laWdoYm91cmhvb2RzW2FdLm5leHQ7XG4gICAgXG4gICAgLy8gRGlyZWN0aW9uIHRvIHByZXZpb3VzIHBvaW50XG4gICAgdmFyIHByZXY7XG4gICAgLy8gSWYgZG9lcyBub3QgZXhpc3RcbiAgICBpZiAocHJldl9pbmQgPCAwKSB7XG4gICAgICAgIC8vIG1pcnJvciBuZXh0IGRpcmVjdGlvblxuICAgICAgICBwcmV2ID0ge1xuICAgICAgICAgICAgeDogbmV4dC54LFxuICAgICAgICAgICAgeTogbmV4dC55LFxuICAgICAgICAgICAgejogbmV4dC56XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZWxzZSAtIHNldCBkaXJlY3RseVxuICAgICAgICBwcmV2ID0ge1xuICAgICAgICAgICAgeDogdmJmW3N0cmlkZSAqIHByZXZfaW5kXSAtIHBvcy54LFxuICAgICAgICAgICAgeTogdmJmW3N0cmlkZSAqIHByZXZfaW5kICsgMV0gLSBwb3MueSxcbiAgICAgICAgICAgIHo6IHZiZltzdHJpZGUgKiBwcmV2X2luZCArIDJdIC0gcG9zLnpcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgbmV4dDogbmV4dCxcbiAgICAgICAgcHJldjogcHJldlxuICAgIH07XG59O1xuXG4vLyBjb252ZXJ0IGEgbGluZSBtZXNoIGludG8gc3BlY2lhbGx5IG9yZ2FuaXNlZCB0cmlhbmdsZXMsIHdoaWNoIHdpbGwgYmUgZHJhd25cbi8vIGFzIGxpbmVzIHdpdGggYSBzcGVjaWZpYyB3aWR0aFxudmFyIGNvbnZlcnRUb1dpZGVMaW5lcyA9IGZ1bmN0aW9uKG1lc2gsIHN0cmlkZSwgdmJmLCBpbmRleFBhaXJzLCBvZmZzZXQpIHtcblxuICAgIHZhciBudW1Db29yZHMgPSAzO1xuXG4gICAgLy8gYWRkIHNvbWUgZXh0cmEgdmVydGV4IGRhdGEgdG8gdGhlIG1lc2hcbiAgICAvLyBwcmV2ICYgbmV4dCBhcmUgZGlyZWN0aW9ucyBzcGVjaWZpYyB2ZXJ0ZXggcG9zaXRpb25zLCB3aGljaCBhcmUgdXNlZCB0byBzcGVjaWZ5XG4gICAgLy8gdGhlIG9mZnNldCBkaXJlY3Rpb24gaW4gdGhlIHNoYWRlclxuICAgIC8vIHNpZGUgaXMgdGhlIGRpcmVjdGVkIGxpbmUgd2lkdGggdXNlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgb2Zmc2V0IGluIHRoZSBzaGFkZXJcbiAgICBvZmZzZXQgPSBtZXNoLnZic3RyaWRlO1xuICAgIG1lc2gudmJsYXlvdXRbJ3ByZXYnXSA9IHtvZmZzZXQ6b2Zmc2V0LCBpdGVtU2l6ZTogbnVtQ29vcmRzfTtcbiAgICBvZmZzZXQgKz0gbnVtQ29vcmRzO1xuICAgIG1lc2gudmJsYXlvdXRbJ25leHQnXSA9IHtvZmZzZXQ6b2Zmc2V0LCBpdGVtU2l6ZTogbnVtQ29vcmRzfTtcbiAgICBvZmZzZXQgKz0gbnVtQ29vcmRzO1xuICAgIG1lc2gudmJsYXlvdXRbJ3NpZGUnXSA9IHtvZmZzZXQ6b2Zmc2V0LCBpdGVtU2l6ZTogMX07XG5cbiAgICBtZXNoLnZic3RyaWRlICs9IDc7XG5cbiAgICAvLyBDb3VudCBvZiBzaGFyZWQgdmVydGV4ZXNcbiAgICB2YXIgY29ubmVjdGlvbnMgPSAwO1xuXG4gICAgLy8gQnVpbGQgbmVpZ2hib3VyaG9vZHMgb2YgZWFjaCB2ZXJ0ZXhcbiAgICB2YXIgbmVpZ2hib3VyaG9vZHMgPSBuZXcgQXJyYXkobWVzaC52ZXJ0ZXhDb3VudCk7XG4gICAgdmFyIGksaixuLGEsYjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbWVzaC52ZXJ0ZXhDb3VudDsgKytpKSB7XG4gICAgICAgIG5laWdoYm91cmhvb2RzW2ldID0ge1xuICAgICAgICAgICAgcHJldjogLTEsICAgICAgIC8vIGluZGV4IG9mIHByZXZpb3VzIHZlcnRleFxuICAgICAgICAgICAgbmV4dDogLTEsICAgICAgIC8vIGluZGV4IG9mIG5leHQgdmVydGV4XG4gICAgICAgICAgICBwcmV2X3NlZzogLTEgICAgLy8gaW5kZXggb2YgcHJldmlvdXMgc2VnbWVudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZvciAoaiA9IDA7IGogPCBpbmRleFBhaXJzOyArK2opIHtcbiAgICAgICAgbiA9IGogKiAyO1xuICAgICAgICBhID0gbWVzaC5pbmRpY2VzW25dO1xuICAgICAgICBiID0gbWVzaC5pbmRpY2VzW24gKyAxXTtcbiAgICAgICAgbmVpZ2hib3VyaG9vZHNbYV0ubmV4dCA9IGI7XG4gICAgICAgIGlmIChuZWlnaGJvdXJob29kc1thXS5wcmV2ID49IDApIHtcbiAgICAgICAgICAgICsrY29ubmVjdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBuZWlnaGJvdXJob29kc1tiXS5wcmV2ID0gYTtcbiAgICAgICAgbmVpZ2hib3VyaG9vZHNbYl0ucHJldl9zZWcgPSBqO1xuICAgICAgICBpZiAobmVpZ2hib3VyaG9vZHNbYl0ubmV4dCA+PSAwKSB7XG4gICAgICAgICAgICArK2Nvbm5lY3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWFjaCBzZWdtZW50IHdpbGwgaGF2ZSBpdHMgb3duIHZlcnRleGVzXG4gICAgdmFyIG5ld0Jhc2VWZXJ0ZXhDb3VudCA9IGluZGV4UGFpcnMgKiAyO1xuICAgIHZhciBuZXdCYXNlVmVydGV4aWVzID0gbmV3IEFycmF5KG5ld0Jhc2VWZXJ0ZXhDb3VudCk7XG5cbiAgICAvLyBJbmRleGVzIGNvbnRhaW5zIGxpbmUgc2VnbWVudHMgYW5kIGFkZGl0aW9uYWwgY29ubmVjdGlvbiBmb3Igc2hhcmVkIHZlcnRleGVzXG4gICAgdmFyIG5ld0luZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMiAqIG51bUNvb3JkcyAqIChpbmRleFBhaXJzICsgY29ubmVjdGlvbnMpKTtcbiAgICB2YXIgbWVzaEluZGV4ID0gMDtcblxuICAgIC8vIFNwbGl0IGFsbCB2ZXJ0ZXhlcyBhbmQgYnVpbGQgaW5kZXhlcyBvZiBhbGwgdHJpYW5nbGVzXG4gICAgZm9yIChqID0gMDsgaiA8IGluZGV4UGFpcnM7ICsraikge1xuICAgICAgICBuID0gaiAqIDI7XG4gICAgICAgIGEgPSBtZXNoLmluZGljZXNbbl07XG4gICAgICAgIGIgPSBtZXNoLmluZGljZXNbbiArIDFdO1xuICAgICAgICAvLyBOZXcgdmVydGV4ZXMgd2l0aCBjYWxjdWxhdGVkIG5leHQgYW5kIHByZXZpb3VzIHBvaW50c1xuICAgICAgICBuZXdCYXNlVmVydGV4aWVzW25dID0gZ2V0TGluZVNwbGl0VmVydGV4KHN0cmlkZSwgdmJmLCBuZWlnaGJvdXJob29kcywgYSwgYik7XG4gICAgICAgIG5ld0Jhc2VWZXJ0ZXhpZXNbbiArIDFdID0gZ2V0TGluZVNwbGl0VmVydGV4KHN0cmlkZSwgdmJmLCBuZWlnaGJvdXJob29kcywgYiwgYSk7XG5cbiAgICAgICAgLy8gU2VnbWVudCB0cmlhbmdsZXNcbiAgICAgICAgYSA9IG47XG4gICAgICAgIGIgPSBuICsgMTtcbiAgICAgICAgLy8gRmlyc3QgdHdvIGNvb3JkaW5hdGVzIGZvcm0gbGluZSBzZWdtZW50IGFyZSB1c2VkIGluIHJheSBjYXN0aW5nXG4gICAgICAgIG5ld0luZGljZXNbbWVzaEluZGV4KytdID0gMiAqIGEgKyAxO1xuICAgICAgICBuZXdJbmRpY2VzW21lc2hJbmRleCsrXSA9IDIgKiBiO1xuICAgICAgICBuZXdJbmRpY2VzW21lc2hJbmRleCsrXSA9IDIgKiBhO1xuICAgICAgICBuZXdJbmRpY2VzW21lc2hJbmRleCsrXSA9IDIgKiBiO1xuICAgICAgICBuZXdJbmRpY2VzW21lc2hJbmRleCsrXSA9IDIgKiBiICsgMTtcbiAgICAgICAgbmV3SW5kaWNlc1ttZXNoSW5kZXgrK10gPSAyICogYTtcblxuICAgICAgICAvLyBDb25uZWN0aW9uIHRyaWFuZ2xlcyBmb3Igc2hhcmVkIHZlcnRleGVzLCBpZiBleGlzdFxuICAgICAgICBhID0gbWVzaC5pbmRpY2VzW25dO1xuICAgICAgICBpZiAobmVpZ2hib3VyaG9vZHNbYV0ucHJldiA+PSAwKSB7XG4gICAgICAgICAgICBiID0gbmVpZ2hib3VyaG9vZHNbYV0ucHJldl9zZWcgKiAyICsgMTtcbiAgICAgICAgICAgIGEgPSBuO1xuXG4gICAgICAgICAgICBuZXdJbmRpY2VzW21lc2hJbmRleCsrXSA9IDIgKiBiO1xuICAgICAgICAgICAgbmV3SW5kaWNlc1ttZXNoSW5kZXgrK10gPSAyICogYTtcbiAgICAgICAgICAgIG5ld0luZGljZXNbbWVzaEluZGV4KytdID0gMiAqIGIgKyAxO1xuICAgICAgICAgICAgbmV3SW5kaWNlc1ttZXNoSW5kZXgrK10gPSAyICogYSArIDE7XG4gICAgICAgICAgICBuZXdJbmRpY2VzW21lc2hJbmRleCsrXSA9IDIgKiBhO1xuICAgICAgICAgICAgbmV3SW5kaWNlc1ttZXNoSW5kZXgrK10gPSAyICogYjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZXNoLmluZGljZXMgPSBuZXdJbmRpY2VzO1xuXG4gICAgLy8gRmluYWxseSwgZmlsbCB2ZXJ0ZXggYnVmZmVyIHdpdGggbmV3IGRhdGFcbiAgICB2YXIgbmV3VmVydGV4Q291bnQgPSBuZXdCYXNlVmVydGV4Q291bnQgKiAyO1xuICAgIG1lc2gudmIgPSBuZXcgRmxvYXQzMkFycmF5KG5ld1ZlcnRleENvdW50ICogbWVzaC52YnN0cmlkZSk7XG5cbiAgICBvZmZzZXQgPSBtZXNoLnZibGF5b3V0Wydwb3NpdGlvbiddLm9mZnNldDtcbiAgICBmb3IgKHZhciBjID0gMDsgYyA8IG5ld0Jhc2VWZXJ0ZXhDb3VudDsgKytjKSB7XG4gICAgICAgIC8vIER1cGxpY2F0ZSBldmVyeSB2ZXJ0ZXggZm9yIGVhY2ggc2lkZVxuICAgICAgICBmb3IgKHZhciBzaWRlID0gMDsgc2lkZSA8IDI7ICsrc2lkZSkge1xuICAgICAgICAgICAgLy8gVmVydGV4IHBvc2l0aW9uXG4gICAgICAgICAgICBtZXNoLnZiW29mZnNldF0gPSBuZXdCYXNlVmVydGV4aWVzW2NdLnBvcy54O1xuICAgICAgICAgICAgbWVzaC52YltvZmZzZXQgKyAxXSA9IG5ld0Jhc2VWZXJ0ZXhpZXNbY10ucG9zLnk7XG4gICAgICAgICAgICBtZXNoLnZiW29mZnNldCArIDJdID0gbmV3QmFzZVZlcnRleGllc1tjXS5wb3MuejtcbiAgICAgICAgICAgIG9mZnNldCArPSBzdHJpZGU7XG5cbiAgICAgICAgICAgIC8vIFByZXZpb3VzIHZlcnRleCBkaXJlY3Rpb25cbiAgICAgICAgICAgIG1lc2gudmJbb2Zmc2V0XSA9IG5ld0Jhc2VWZXJ0ZXhpZXNbY10ucHJldi54O1xuICAgICAgICAgICAgbWVzaC52YltvZmZzZXQgKyAxXSA9IG5ld0Jhc2VWZXJ0ZXhpZXNbY10ucHJldi55O1xuICAgICAgICAgICAgbWVzaC52YltvZmZzZXQgKyAyXSA9IG5ld0Jhc2VWZXJ0ZXhpZXNbY10ucHJldi56O1xuICAgICAgICAgICAgb2Zmc2V0ICs9IG51bUNvb3JkcztcblxuICAgICAgICAgICAgLy8gTmV4dCB2ZXJ0ZXggZGlyZWN0aW9uXG4gICAgICAgICAgICBtZXNoLnZiW29mZnNldF0gPSBuZXdCYXNlVmVydGV4aWVzW2NdLm5leHQueDtcbiAgICAgICAgICAgIG1lc2gudmJbb2Zmc2V0ICsgMV0gPSBuZXdCYXNlVmVydGV4aWVzW2NdLm5leHQueTtcbiAgICAgICAgICAgIG1lc2gudmJbb2Zmc2V0ICsgMl0gPSBuZXdCYXNlVmVydGV4aWVzW2NdLm5leHQuejtcbiAgICAgICAgICAgIG9mZnNldCArPSBudW1Db29yZHM7XG5cbiAgICAgICAgICAgIC8vIFNpZGUgKG9mZnNldCBkaXJlY3Rpb24pXG4gICAgICAgICAgICBtZXNoLnZiW29mZnNldF0gPSBzaWRlID8gLTEgOiAxO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtZXNoLnZlcnRleENvdW50ID0gbmV3VmVydGV4Q291bnQ7XG5cbiAgICAvLyBmbGFnIHRvIG1hcmsgdGhpcyBtZXNoIGFzIHNwZWNpYWxcbiAgICBtZXNoLmlzV2lkZUxpbmVzID0gdHJ1ZTtcbn07XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblxudmFyIHJlYWRPcGVuQ1RNID0gZnVuY3Rpb24oc3RyZWFtLCBkc3RCdWZmZXIsIHN0YXJ0T2Zmc2V0LCBlc3RpbWF0ZVNpemVPbmx5LCBwYWNrTm9ybWFscykge1xuXG4gICAgdmFyIHJlYWRPcGVuQ1RNU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZ2V0U3RyaW5nKHN0cmVhbS5nZXRJbnQzMigpKTtcbiAgICB9O1xuXG4gICAgdmFyIGZvdXJjYyA9IHN0cmVhbS5nZXRTdHJpbmcoNCk7XG4gICAgaWYgKGZvdXJjYyAhPSBcIk9DVE1cIikgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgdmVyc2lvbiA9IHN0cmVhbS5nZXRJbnQzMigpO1xuICAgIGlmICh2ZXJzaW9uICE9IDUpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIG1ldGhvZCA9IHN0cmVhbS5nZXRTdHJpbmcoMyk7XG4gICAgc3RyZWFtLmdldFVpbnQ4KCk7IC8vcmVhZCB0aGUgbGFzdCAwIGNoYXIgb2YgdGhlIFJBVyBvciBNRzIgZm91ckNDLlxuXG4gICAgdmFyIG1lc2ggPSB7XG4gICAgICAgIHN0cmVhbTogbnVsbCxcbiAgICAgICAgdmVydGljZXM6ICAgbnVsbCxcbiAgICAgICAgaW5kaWNlczogICAgbnVsbCxcbiAgICAgICAgbm9ybWFsczogICAgbnVsbCxcbiAgICAgICAgY29sb3JzOiAgICAgbnVsbCxcbiAgICAgICAgdXZzOiAgICAgICAgW10sXG4gICAgICAgIGF0dHJzOiAgICAgIFtdXG4gICAgfTtcblxuICAgIG1lc2gudmVydGV4Q291bnQgPSBzdHJlYW0uZ2V0SW50MzIoKTtcbiAgICBtZXNoLnRyaWFuZ2xlQ291bnQgPSBzdHJlYW0uZ2V0SW50MzIoKTtcbiAgICBtZXNoLnRleE1hcENvdW50ID0gc3RyZWFtLmdldEludDMyKCk7XG4gICAgbWVzaC5hdHRyaWJNYXBDb3VudCA9IHN0cmVhbS5nZXRJbnQzMigpO1xuICAgIG1lc2guZmxhZ3MgPSBzdHJlYW0uZ2V0SW50MzIoKTtcbiAgICBtZXNoLmNvbW1lbnQgPSByZWFkT3BlbkNUTVN0cmluZygpO1xuXG4gICAgdmFyIHVzZVBhY2tlZE5vcm1hbHMgPSBwYWNrTm9ybWFscztcblxuXG4gICAgLy9DYWxjdWxhdGUgc3RyaWRlIG9mIHRoZSBpbnRlcmxlYXZlZCBidWZmZXIgd2UgbmVlZFxuICAgIG1lc2gudmJzdHJpZGUgPSAzOyAvL3Bvc2l0aW9uIGlzIGFsd2F5cyB0aGVyZVxuICAgIGlmIChtZXNoLmZsYWdzICYgMSlcbiAgICAgICAgbWVzaC52YnN0cmlkZSArPSB1c2VQYWNrZWROb3JtYWxzID8gMSA6IDM7IC8vbm9ybWFsXG4gICAgbWVzaC52YnN0cmlkZSArPSAyICogKG1lc2gudGV4TWFwQ291bnQgfHwgMCk7IC8vdGV4dHVyZSBjb29yZHNcbiAgICBtZXNoLnZic3RyaWRlICs9IDMgKiAobWVzaC5hdHRyaWJNYXBDb3VudCB8fCAwKTsgLy93ZSBub3cgc3VwcG9ydCBjb2xvciBhbmQgdXZ3LiBCb3RoIG9mIHRoZW0gdXNlIHRocmVlIGZsb2F0cy5cblxuICAgIG1lc2gudmJsYXlvdXQgPSB7fTtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIG1lc2gudmJsYXlvdXRbJ3Bvc2l0aW9uJ10gPSB7IG9mZnNldDogb2Zmc2V0LCBpdGVtU2l6ZTogMyB9O1xuXG4gICAgb2Zmc2V0ICs9IDM7XG4gICAgaWYgKG1lc2guZmxhZ3MgJiAxKSB7XG4gICAgICAgIG1lc2gudmJsYXlvdXRbJ25vcm1hbCddID0geyBvZmZzZXQgOiBvZmZzZXQsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNpemUgOiB1c2VQYWNrZWROb3JtYWxzID8gMiA6IDMsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNQZXJJdGVtOiB1c2VQYWNrZWROb3JtYWxzID8gMiA6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkOiB1c2VQYWNrZWROb3JtYWxzIH07XG5cbiAgICAgICAgb2Zmc2V0ICs9IHVzZVBhY2tlZE5vcm1hbHMgPyAxIDogMzsgLy9vZmZzZXQgaXMgY291bnRlZCBpbiB1bml0cyBvZiA0IGJ5dGVzXG4gICAgfVxuICAgIGlmIChtZXNoLnRleE1hcENvdW50KSB7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaTxtZXNoLnRleE1hcENvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHZhciB1dm5hbWUgPSBcInV2XCI7XG4gICAgICAgICAgICBpZiAoaSlcbiAgICAgICAgICAgICAgICB1dm5hbWUgKz0gKGkrMSkudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgbWVzaC52YmxheW91dFt1dm5hbWVdID0geyBvZmZzZXQgOiBvZmZzZXQsIGl0ZW1TaXplOiAyIH07XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vTm93IHJlYWQgYW5kIHBvcHVsYXRlIHRoZSBtZXNoIGRhdGFcbiAgICBpZiAobWV0aG9kID09IFwiUkFXXCIpIHtcbiAgICAgICAgcmVhZE9wZW5DVE1fUkFXKHN0cmVhbSwgbWVzaCwgZHN0QnVmZmVyLCBzdGFydE9mZnNldCwgZXN0aW1hdGVTaXplT25seSk7XG4gICAgICAgIGlmICghZXN0aW1hdGVTaXplT25seSkge1xuICAgICAgICAgICAgVkJVdGlscy5kZWR1Y2VVVlJlcGV0aXRpb24obWVzaCk7XG4gICAgICAgICAgICBWQlV0aWxzLmNvbXB1dGVCb3VuZHMzRChtZXNoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzaDtcbiAgICB9XG4gICAgZWxzZSBpZiAobWV0aG9kID09IFwiTUcyXCIpIHtcbiAgICAgICAgLy9UaGlzIGNvZGUgcGF0aCBpcyBuZXZlciB1c2VkLCBzaW5jZSBNRzIgY29tcHJlc3Npb24gaXMgZGlzYWJsZWQgYXQgdGhlIExNVlRLIEMrKyBsZXZlbFxuICAgICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgXCJyZWFkT3BlbkNUTV9NRzIoc3RyZWFtLCBtZXNoLCBkc3RCdWZmZXIsIHN0YXJ0T2Zmc2V0LCBlc3RpbWF0ZVNpemVPbmx5KSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cblxudmFyIHJlYWRMaW5lc09yUG9pbnRzID0gZnVuY3Rpb24ocGZyLCB0c2UsIGVzdGltYXRlU2l6ZU9ubHksIGxpbmVzKSB7XG5cbiAgICAvL1RPRE86IExpbmUgZ2VvbWV0cnkgZG9lcyBub3QgZ28gaW50byBzaGFyZWQgYnVmZmVycyB5ZXRcbiAgICBpZiAoZXN0aW1hdGVTaXplT25seSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBJbml0aWFsaXplIG1lc2hcbiAgICB2YXIgbWVzaCA9IHtcbiAgICAgICAgdmVydGljZXM6ICAgbnVsbCxcbiAgICAgICAgaW5kaWNlczogICAgbnVsbCxcbiAgICAgICAgY29sb3JzOiAgICAgbnVsbCxcbiAgICAgICAgbm9ybWFsczogICAgbnVsbCxcbiAgICAgICAgdXZzOiAgICAgICAgW10sXG4gICAgICAgIGF0dHJzOiAgICAgIFtdLFxuICAgICAgICBsaW5lV2lkdGg6ICAxLjBcbiAgICB9O1xuXG4gICAgLy8gUmVhZCB2ZXJ0ZXggY291bnQsIGluZGV4IGNvdW50LCBwb2x5bGluZSBib3VuZCBjb3VudFxuICAgIHZhciBpbmRleENvdW50O1xuICAgIGlmIChsaW5lcykge1xuICAgICAgICAvLyBSZWFkIHZlcnRleCBjb3VudCwgaW5kZXggY291bnQsIHBvbHlsaW5lIGJvdW5kIGNvdW50XG4gICAgICAgIHZhciBwb2x5TGluZUJvdW5kQ291bnQ7XG4gICAgICAgIGlmICggdHNlLnZlcnNpb24gPiAxICkge1xuICAgICAgICAgICAgbWVzaC52ZXJ0ZXhDb3VudCAgID0gcGZyLnJlYWRVMTYoKTtcbiAgICAgICAgICAgIGluZGV4Q291bnQgICAgICAgICA9IHBmci5yZWFkVTE2KCk7XG4gICAgICAgICAgICBwb2x5TGluZUJvdW5kQ291bnQgPSBwZnIucmVhZFUxNigpO1xuXG4gICAgICAgICAgICBpZiAodHNlLnZlcnNpb24gPiAyKSB7XG4gICAgICAgICAgICAgICAgbWVzaC5saW5lV2lkdGggPSBwZnIucmVhZEYzMigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzaC52ZXJ0ZXhDb3VudCAgID0gcGZyLnJlYWRVMzJWKCk7XG4gICAgICAgICAgICBpbmRleENvdW50ICAgICAgICAgPSBwZnIucmVhZFUzMlYoKTtcbiAgICAgICAgICAgIHBvbHlMaW5lQm91bmRDb3VudCA9IHBmci5yZWFkVTMyVigpO1xuICAgICAgICB9XG4gICAgICAgIG1lc2guaXNMaW5lcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVhZCB2ZXJ0ZXggY291bnQsIGluZGV4IGNvdW50LCBwb2ludCBzaXplXG4gICAgICAgIG1lc2gudmVydGV4Q291bnQgICA9IHBmci5yZWFkVTE2KCk7XG4gICAgICAgIGluZGV4Q291bnQgICAgICAgICA9IHBmci5yZWFkVTE2KCk7XG4gICAgICAgIG1lc2gucG9pbnRTaXplICAgICA9IHBmci5yZWFkRjMyKCk7XG4gICAgICAgIG1lc2guaXNQb2ludHMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSBpZiBjb2xvciBpcyBkZWZpbmVkXG4gICAgdmFyIGhhc0NvbG9yID0gKHBmci5zdHJlYW0uZ2V0VWludDgoKSAhPSAwKTtcblxuXG4gICAgLy9DYWxjdWxhdGUgc3RyaWRlIG9mIHRoZSBpbnRlcmxlYXZlZCBidWZmZXIgd2UgbmVlZFxuICAgIG1lc2gudmJzdHJpZGUgPSAzOyAvL3Bvc2l0aW9uIGlzIGFsd2F5cyB0aGVyZVxuICAgIGlmIChoYXNDb2xvcilcbiAgICAgICAgbWVzaC52YnN0cmlkZSArPSAzOyAvL3dlIG9ubHkgaW50ZXJsZWF2ZSB0aGUgY29sb3IgYXR0cmlidXRlLCBhbmQgd2UgcmVkdWNlIHRoYXQgdG8gUkdCIGZyb20gQVJHQi5cblxuICAgIG1lc2gudmJsYXlvdXQgPSB7fTtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIG1lc2gudmJsYXlvdXRbJ3Bvc2l0aW9uJ10gPSB7IG9mZnNldDogb2Zmc2V0LCBpdGVtU2l6ZTogMyB9O1xuXG4gICAgb2Zmc2V0ICs9IDM7XG4gICAgaWYgKGhhc0NvbG9yKSB7XG4gICAgICAgIG1lc2gudmJsYXlvdXRbJ2NvbG9yJ10gPSB7IG9mZnNldCA6IG9mZnNldCwgaXRlbVNpemUgOiAzfTtcbiAgICB9XG5cbiAgICBtZXNoLnZiID0gbmV3IEZsb2F0MzJBcnJheShtZXNoLnZlcnRleENvdW50ICogbWVzaC52YnN0cmlkZSk7XG5cblxuICAgIC8vIFJlYWQgdmVydGljZXNcbiAgICB2YXIgdmJmID0gbWVzaC52YjtcbiAgICB2YXIgc3RyaWRlID0gbWVzaC52YnN0cmlkZTtcbiAgICB2YXIgc3RyZWFtID0gcGZyLnN0cmVhbTtcblxuICAgIHN0cmVhbS5nZXRWZWN0b3IzQXJyYXkodmJmLCBtZXNoLnZlcnRleENvdW50LCBtZXNoLnZibGF5b3V0Wydwb3NpdGlvbiddLm9mZnNldCwgc3RyaWRlKTtcblxuICAgIC8vIERldGVybWluZSBjb2xvciBpZiBzcGVjaWZpZWRcbiAgICB2YXIgYywgY0VuZDtcbiAgICBpZiAoaGFzQ29sb3IpIHtcbiAgICAgICAgZm9yIChjPTAsIG9mZnNldD1tZXNoLnZibGF5b3V0Wydjb2xvciddLm9mZnNldCwgY0VuZD1tZXNoLnZlcnRleENvdW50O1xuICAgICAgICAgICAgIGM8Y0VuZDtcbiAgICAgICAgICAgICBjKyssIG9mZnNldCArPSBzdHJpZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZiZltvZmZzZXRdID0gc3RyZWFtLmdldEZsb2F0MzIoKTtcbiAgICAgICAgICAgIHZiZltvZmZzZXQrMV0gPSBzdHJlYW0uZ2V0RmxvYXQzMigpO1xuICAgICAgICAgICAgdmJmW29mZnNldCsyXSA9IHN0cmVhbS5nZXRGbG9hdDMyKCk7XG4gICAgICAgICAgICBzdHJlYW0uZ2V0RmxvYXQzMigpOyAvL3NraXAgYWxwaGEgLS0gVE9ETzogY29udmVydCBjb2xvciB0byBBUkdCIDMyIGJpdCBpbnRlZ2VyIGluIHRoZSB2ZXJ0ZXggbGF5b3V0IGFuZCBzaGFkZXJcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvcGllcyBieXRlcyBmcm9tIGJ1ZmZlclxuICAgIHZhciBmb3JjZUNvcHkgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiBiLmJ1ZmZlci5zbGljZShiLmJ5dGVPZmZzZXQsIGIuYnl0ZU9mZnNldCArIGIubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgLy8gUmVhZCBpbmRpY2VzIGFuZCBwb2x5bGluZSBib3VuZCBidWZmZXJcbiAgICBpZiAobGluZXMpIHtcbiAgICAgICAgdmFyIGluZGljZXM7XG4gICAgICAgIHZhciBwb2x5TGluZUJvdW5kQnVmZmVyO1xuICAgICAgICBpZiAoIHRzZS52ZXJzaW9uID4gMSApIHtcbiAgICAgICAgICAgIC8vIDE2IGJpdCBmb3JtYXRcbiAgICAgICAgICAgIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoZm9yY2VDb3B5KHN0cmVhbS5nZXRCeXRlcyhpbmRleENvdW50KjIpKSk7XG4gICAgICAgICAgICBwb2x5TGluZUJvdW5kQnVmZmVyID0gbmV3IFVpbnQxNkFycmF5KGZvcmNlQ29weShzdHJlYW0uZ2V0Qnl0ZXMocG9seUxpbmVCb3VuZENvdW50KjIpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyAzMiBiaXQgZm9ybWF0XG4gICAgICAgICAgICBpbmRpY2VzID0gbmV3IEludDMyQXJyYXkoZm9yY2VDb3B5KHN0cmVhbS5nZXRCeXRlcyhpbmRleENvdW50KjQpKSk7XG4gICAgICAgICAgICBwb2x5TGluZUJvdW5kQnVmZmVyID0gbmV3IEludDMyQXJyYXkoZm9yY2VDb3B5KHN0cmVhbS5nZXRCeXRlcyhwb2x5TGluZUJvdW5kQ291bnQqNCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRocmVlLmpzIHVzZXMgR0wtc3R5bGUgaW5kZXggcGFpcnMgaW4gaXRzIGluZGV4IGJ1ZmZlci4gV2UgbmVlZCBvbmUgcGFpclxuICAgICAgICAvLyBwZXIgc2VnbWVudCBpbiBlYWNoIHBvbHlsaW5lXG4gICAgICAgIHZhciBpbmRleFBhaXJzID0gcG9seUxpbmVCb3VuZEJ1ZmZlcltwb2x5TGluZUJvdW5kQ291bnQtMV0gLSBwb2x5TGluZUJvdW5kQ291bnQgKyAxO1xuXG4gICAgICAgIG1lc2guaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgyKmluZGV4UGFpcnMpO1xuXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIGluZGl2aWR1YWwgbGluZSBzZWdtZW50IGluZGV4IHBhaXJzXG4gICAgICAgIHZhciBtZXNoSW5kZXggPSAwO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGkrMSA8IHBvbHlMaW5lQm91bmRDb3VudDsgaSsrKXtcbiAgICAgICAgICAgIGZvcih2YXIgaiA9IHBvbHlMaW5lQm91bmRCdWZmZXJbaV07IGorMSA8IHBvbHlMaW5lQm91bmRCdWZmZXJbaSsxXTsgaisrKXtcbiAgICAgICAgICAgICAgICBtZXNoLmluZGljZXNbbWVzaEluZGV4KytdID0gaW5kaWNlc1tqXTtcbiAgICAgICAgICAgICAgICBtZXNoLmluZGljZXNbbWVzaEluZGV4KytdID0gaW5kaWNlc1tqKzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWVzaC5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGZvcmNlQ29weShzdHJlYW0uZ2V0Qnl0ZXMoaW5kZXhDb3VudCoyKSkpO1xuICAgIH1cblxuICAgIGlmIChtZXNoLmxpbmVXaWR0aCAhPSAxLjApIHtcbiAgICAgICAgY29udmVydFRvV2lkZUxpbmVzKG1lc2gsIHN0cmlkZSwgdmJmLCBpbmRleFBhaXJzLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIFZCVXRpbHMuY29tcHV0ZUJvdW5kczNEKG1lc2gpO1xuXG4gICAgcmV0dXJuIG1lc2g7XG59O1xuXG52YXIgcmVhZExpbmVzID0gZnVuY3Rpb24ocGZyLCB0c2UsIGVzdGltYXRlU2l6ZU9ubHkpIHtcbiAgICByZXR1cm4gcmVhZExpbmVzT3JQb2ludHMocGZyLCB0c2UsIGVzdGltYXRlU2l6ZU9ubHksIHRydWUpO1xufTtcblxudmFyIHJlYWRQb2ludHMgPSBmdW5jdGlvbihwZnIsIHRzZSwgZXN0aW1hdGVTaXplT25seSkge1xuICAgIHJldHVybiByZWFkTGluZXNPclBvaW50cyhwZnIsIHRzZSwgZXN0aW1hdGVTaXplT25seSwgZmFsc2UpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRHZW9tZXRyeShwZnIsIGVudHJ5LCBvcHRpb25zKSB7XG4gICAgdmFyIHRzZSA9IHBmci5zZWVrVG9FbnRyeShlbnRyeSk7XG4gICAgaWYgKCF0c2UpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHRzZS5lbnRyeVR5cGUgPT0gXCJBdXRvZGVzay5DbG91ZFBsYXRmb3JtLk9wZW5DVE1cIikge1xuICAgICAgICByZXR1cm4gcmVhZE9wZW5DVE0ocGZyLnN0cmVhbSwgb3B0aW9ucy5kc3RCdWZmZXIsIG9wdGlvbnMuc3RhcnRPZmZzZXQsIG9wdGlvbnMuZXN0aW1hdGVTaXplT25seSwgb3B0aW9ucy5wYWNrTm9ybWFscyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRzZS5lbnRyeVR5cGUgPT0gXCJBdXRvZGVzay5DbG91ZFBsYXRmb3JtLkxpbmVzXCIpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRMaW5lcyhwZnIsIHRzZSwgb3B0aW9ucy5lc3RpbWF0ZVNpemVPbmx5KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHNlLmVudHJ5VHlwZSA9PSBcIkF1dG9kZXNrLkNsb3VkUGxhdGZvcm0uUG9pbnRzXCIpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRQb2ludHMocGZyLCB0c2UsIG9wdGlvbnMuZXN0aW1hdGVTaXplT25seSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOlsiaXNOb2RlSlMiLCJWQlV0aWxzIiwibnRtcCIsIkZsb2F0MzJBcnJheSIsIklOVl9QSSIsIk1hdGgiLCJQSSIsImF0YW4yIiwieSIsIngiLCJheCIsImFicyIsImF5IiwiYSIsIm1pbiIsIm1heCIsInMiLCJyIiwicmVhZE9wZW5DVE1fUkFXIiwic3RyZWFtIiwibWVzaCIsImRzdEJ1ZmZlciIsInN0YXJ0T2Zmc2V0IiwiZXN0aW1hdGVTaXplT25seSIsInJlYWRPcGVuQ1RNU3RyaW5nIiwiZ2V0U3RyaW5nIiwiZ2V0SW50MzIiLCJuYW1lIiwidmNvdW50IiwidmVydGV4Q291bnQiLCJ0Y291bnQiLCJ0cmlhbmdsZUNvdW50Iiwic3RyaWRlIiwidmJzdHJpZGUiLCJ2YlNpemVGbG9hdCIsInRvdGFsU2l6ZUluRmxvYXRzIiwic2hhcmVkQnVmZmVyQnl0ZXMiLCJ2YmYiLCJBcnJheUJ1ZmZlciIsInZiIiwiaW5kaWNlcyIsIlVpbnQxNkFycmF5IiwiZ2V0SW5kaWNlc0FycmF5IiwiYnVmZmVyIiwidmJpIiwidmJsYXlvdXQiLCJub3JtYWwiLCJpdGVtU2l6ZSIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwiZ2V0VmVjdG9yM0FycmF5Iiwib2Zmc2V0IiwiaSIsInQiLCJmbGFncyIsImxlbmd0aCIsInBueCIsInBueSIsInRleE1hcENvdW50IiwidXYiLCJmaWxlIiwidXZzIiwicHVzaCIsInV2bmFtZSIsInRvU3RyaW5nIiwiZ2V0VmVjdG9yMkFycmF5IiwiYXR0cmlidXRlT2Zmc2V0IiwiYXR0cmliTWFwQ291bnQiLCJhdHRyIiwiYXR0cm5hbWUiLCJpbmRleE9mIiwiYXR0cnMiLCJnZXRCeXRlcyIsInY0IiwiZ2V0VmVjdG9yNCIsImdldExpbmVTcGxpdFZlcnRleCIsIm5laWdoYm91cmhvb2RzIiwiYiIsInBvcyIsInoiLCJuZXh0IiwicHJldl9pbmQiLCJwcmV2IiwiY29udmVydFRvV2lkZUxpbmVzIiwiaW5kZXhQYWlycyIsIm51bUNvb3JkcyIsImNvbm5lY3Rpb25zIiwiQXJyYXkiLCJqIiwibiIsInByZXZfc2VnIiwibmV3QmFzZVZlcnRleENvdW50IiwibmV3QmFzZVZlcnRleGllcyIsIm5ld0luZGljZXMiLCJtZXNoSW5kZXgiLCJuZXdWZXJ0ZXhDb3VudCIsImMiLCJzaWRlIiwiaXNXaWRlTGluZXMiLCJyZWFkT3BlbkNUTSIsInBhY2tOb3JtYWxzIiwiZm91cmNjIiwidmVyc2lvbiIsIm1ldGhvZCIsImdldFVpbnQ4IiwidmVydGljZXMiLCJub3JtYWxzIiwiY29sb3JzIiwiY29tbWVudCIsInVzZVBhY2tlZE5vcm1hbHMiLCJieXRlc1Blckl0ZW0iLCJub3JtYWxpemVkIiwiZGVkdWNlVVZSZXBldGl0aW9uIiwiY29tcHV0ZUJvdW5kczNEIiwiY29uc29sZSIsImFzc2VydCIsInJlYWRMaW5lc09yUG9pbnRzIiwicGZyIiwidHNlIiwibGluZXMiLCJsaW5lV2lkdGgiLCJpbmRleENvdW50IiwicG9seUxpbmVCb3VuZENvdW50IiwicmVhZFUxNiIsInJlYWRGMzIiLCJyZWFkVTMyViIsImlzTGluZXMiLCJwb2ludFNpemUiLCJpc1BvaW50cyIsImhhc0NvbG9yIiwiY0VuZCIsImdldEZsb2F0MzIiLCJmb3JjZUNvcHkiLCJzbGljZSIsInBvbHlMaW5lQm91bmRCdWZmZXIiLCJJbnQzMkFycmF5IiwicmVhZExpbmVzIiwicmVhZFBvaW50cyIsInJlYWRHZW9tZXRyeSIsImVudHJ5Iiwib3B0aW9ucyIsInNlZWtUb0VudHJ5IiwiZW50cnlUeXBlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/svf/Geoms.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/svf/Instances.js ": /*!*************************************************!*\ !*** ./src/file-loaders/lmvtk/svf/Instances.js ***! \*************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readInstance: ()=> (/* binding */ readInstance),\n/* harmony export */ readInstanceTree: () => (/* binding */ readInstanceTree)\n/* harmony export */ });\n\n\nfunction readInstance(pfr, entry, placementTransform, globalOffset) {\n var tse = pfr.seekToEntry(entry);\n if (!tse)\n return null;\n if (tse.version > 2 /*Constants::InstanceVersion*/)\n return null;\n\n var isVisible = true;\n if (tse.version > 1) {\n // Instances v2+ include a flag byte, the LSB of which denotes visibility\n var flags = pfr.readU8();\n isVisible = (flags & 0x01) != 0;\n }\n\n return {\n definition: pfr.stream.getUint32(),\n transform: pfr.readTransform(undefined, undefined, undefined, placementTransform, globalOffset),\n instanceNodePath: pfr.readPathID()\n };\n}\n\n\n\nvar NodeType = {\n NT_Inner: 0,\n NT_Geometry: 1,\n NT_Camera: 2,\n NT_Light: 3\n};\n\nfunction readInstanceTree(pfr, version) {\n\n var transforms = [];\n var dbIds = [];\n var fragIds = [];\n var childCounts = [];\n var nodeIndex = 0;\n var s = pfr.stream;\n\n while (s.offset < s.byteLength - 8 - 1) {\n\n pfr.readTransform(nodeIndex, transforms, nodeIndex * 12, undefined, undefined, undefined);\n\n // Version 1-4 had optional \ "shared nodes\" that were never used in practice. If found, consume and ignore.\n if (version < 5) {\n var hasSharedNode=s .getUint8();\n if (hasSharedNode) {\n s.getUint32();\n }\n }\n\n var nodeType=s .getUint8();\n\n // Version 5 introduced a flags byte and the visibility flag.\n if (version>= 5) {\n var flags = s.getUint8();\n var visible = !!(flags & 1);\n }\n\n // Version 3 introduced the database ID\n if (version >= 3) {\n dbIds[nodeIndex] = s.getVarints();\n }\n\n if (nodeIndex) {\n // Not a root, behavior depends on type\n // Leaf, instantiate and add fragment references before returning\n switch (nodeType) {\n\n case NodeType.NT_Inner:\n break;\n case NodeType.NT_Geometry:{\n if (version < 2) {\n let fragCount=s .getUint16();\n if (fragCount===1 ) {\n fragIds[nodeIndex]=s .getUint32();\n } else if (fragCount> 0) {\n let flist = [];\n for (let i = 0; i < fragCount; i++)\n flist.push(s.getUint32());\n fragIds[nodeIndex]=f list;\n }\n } else {\n let fragCount=s .getVarints();\n if (fragCount===1 ) {\n fragIds[nodeIndex]=s .getVarints();\n } else if (fragCount> 0) {\n let flist = [];\n for (let i = 0; i < fragCount; i++)\n flist.push(s.getVarints());\n fragIds[nodeIndex]=f list;\n }\n }\n }\n break;\n case NodeType.NT_Camera:\n case NodeType.NT_Light:{\n var hasInstanceEntryId=s .getUint8();\n if (hasInstanceEntryId) {\n s.getUint32();\n }\n }\n break;\n default:\n console.warn(\ "Unrecognized instance tree node type.\");\n break;\n }\n }\n\n var childCount=0 ;\n if (nodeType===N odeType.NT_Inner) {\n if (version < 2) {\n childCount=s .getUint16();\n } else {\n childCount=s .getVarints();\n }\n }\n childCounts[nodeIndex]=c hildCount;\n\n nodeIndex++;\n }\n\n var dbIdBuffer=n ew Uint32Array(dbIds.length);\n dbIdBuffer.set(dbIds);\n\n var xformBuffer=n ew Float32Array(transforms.length);\n xformBuffer.set(transforms);\n\n var childCountsBuffer=n ew Uint32Array(childCounts.length);\n childCountsBuffer.set(childCounts);\n\n return { dbIds: dbIdBuffer, fragIds: fragIds, transforms: xformBuffer, childCounts: childCountsBuffer };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL3N2Zi9JbnN0YW5jZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBYTs7QUFFTixTQUFTQSxZQUFZQSxDQUFDQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsa0JBQWtCLEVBQUVDLFlBQVksRUFBRTtFQUN2RSxJQUFJQyxHQUFHLEdBQUdKLEdBQUcsQ0FBQ0ssV0FBVyxDQUFDSixLQUFLLENBQUM7RUFDaEMsSUFBSSxDQUFDRyxHQUFHO0VBQ0osT0FBTyxJQUFJO0VBQ2YsSUFBSUEsR0FBRyxDQUFDRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQ2hCLE9BQU8sSUFBSTs7RUFFZixJQUFJQyxTQUFTLEdBQUcsSUFBSTtFQUNwQixJQUFLSCxHQUFHLENBQUNFLE9BQU8sR0FBRyxDQUFDLEVBQUc7SUFDbkI7SUFDQSxJQUFJRSxLQUFLLEdBQUdSLEdBQUcsQ0FBQ1MsTUFBTSxDQUFDLENBQUM7SUFDeEJGLFNBQVMsR0FBRyxDQUFDQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUM7RUFDbkM7O0VBRUEsT0FBTztJQUNIRSxVQUFVLEVBQUVWLEdBQUcsQ0FBQ1csTUFBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQztJQUNsQ0MsU0FBUyxFQUFFYixHQUFHLENBQUNjLGFBQWEsQ0FBQ0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVBLFNBQVMsRUFBRWIsa0JBQWtCLEVBQUVDLFlBQVksQ0FBQztJQUMvRmEsZ0JBQWdCLEVBQUVoQixHQUFHLENBQUNpQixVQUFVLENBQUM7RUFDckMsQ0FBQztBQUNMOzs7O0FBSUEsSUFBSUMsUUFBUSxHQUFHO0VBQ1hDLFFBQVEsRUFBRyxDQUFDO0VBQ1pDLFdBQVcsRUFBRyxDQUFDO0VBQ2ZDLFNBQVMsRUFBRyxDQUFDO0VBQ2JDLFFBQVEsRUFBRztBQUNmLENBQUM7O0FBRU0sU0FBU0MsZ0JBQWdCQSxDQUFDdkIsR0FBRyxFQUFFTSxPQUFPLEVBQUU7O0VBRTNDLElBQUlrQixVQUFVLEdBQUcsRUFBRTtFQUNuQixJ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MUciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL3N2Zi9JbnN0YW5jZXMuanM/YjA4OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRJbnN0YW5jZShwZnIsIGVudHJ5LCBwbGFjZW1lbnRUcmFuc2Zvcm0sIGdsb2JhbE9mZnNldCkge1xuICAgIHZhciB0c2UgPSBwZnIuc2Vla1RvRW50cnkoZW50cnkpO1xuICAgIGlmICghdHNlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAodHNlLnZlcnNpb24gPiAyIC8qQ29uc3RhbnRzOjpJbnN0YW5jZVZlcnNpb24qLylcbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICBpZiAoIHRzZS52ZXJzaW9uID4gMSApIHtcbiAgICAgICAgLy8gSW5zdGFuY2VzIHYyKyBpbmNsdWRlIGEgZmxhZyBieXRlLCB0aGUgTFNCIG9mIHdoaWNoIGRlbm90ZXMgdmlzaWJpbGl0eVxuICAgICAgICB2YXIgZmxhZ3MgPSBwZnIucmVhZFU4KCk7XG4gICAgICAgIGlzVmlzaWJsZSA9IChmbGFncyAmIDB4MDEpICE9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVmaW5pdGlvbjogcGZyLnN0cmVhbS5nZXRVaW50MzIoKSxcbiAgICAgICAgdHJhbnNmb3JtOiBwZnIucmVhZFRyYW5zZm9ybSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwbGFjZW1lbnRUcmFuc2Zvcm0sIGdsb2JhbE9mZnNldCksXG4gICAgICAgIGluc3RhbmNlTm9kZVBhdGg6IHBmci5yZWFkUGF0aElEKClcbiAgICB9O1xufVxuXG5cblxudmFyIE5vZGVUeXBlID0ge1xuICAgIE5UX0lubmVyIDogMCxcbiAgICBOVF9HZW9tZXRyeSA6IDEsXG4gICAgTlRfQ2FtZXJhIDogMixcbiAgICBOVF9MaWdodCA6IDNcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSW5zdGFuY2VUcmVlKHBmciwgdmVyc2lvbikge1xuXG4gICAgdmFyIHRyYW5zZm9ybXMgPSBbXTtcbiAgICB2YXIgZGJJZHMgPSBbXTtcbiAgICB2YXIgZnJhZ0lkcyA9IFtdO1xuICAgIHZhciBjaGlsZENvdW50cyA9IFtdO1xuICAgIHZhciBub2RlSW5kZXggPSAwO1xuICAgIHZhciBzID0gcGZyLnN0cmVhbTtcblxuICAgIHdoaWxlIChzLm9mZnNldCA8IHMuYnl0ZUxlbmd0aCAtIDggLSAxKSB7XG5cbiAgICAgICAgcGZyLnJlYWRUcmFuc2Zvcm0obm9kZUluZGV4LCB0cmFuc2Zvcm1zLCBub2RlSW5kZXggKiAxMiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG5cbiAgICAgICAgLy8gVmVyc2lvbiAxLTQgaGFkIG9wdGlvbmFsIFwic2hhcmVkIG5vZGVzXCIgdGhhdCB3ZXJlIG5ldmVyIHVzZWQgaW4gcHJhY3RpY2UuIElmIGZvdW5kLCBjb25zdW1lIGFuZCBpZ25vcmUuXG4gICAgICAgIGlmICh2ZXJzaW9uIDwgNSkge1xuICAgICAgICAgICAgdmFyIGhhc1NoYXJlZE5vZGUgPSBzLmdldFVpbnQ4KCk7XG4gICAgICAgICAgICBpZiAoaGFzU2hhcmVkTm9kZSkge1xuICAgICAgICAgICAgICAgIHMuZ2V0VWludDMyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVR5cGUgPSBzLmdldFVpbnQ4KCk7XG5cbiAgICAgICAgLy8gVmVyc2lvbiA1IGludHJvZHVjZWQgYSBmbGFncyBieXRlIGFuZCB0aGUgdmlzaWJpbGl0eSBmbGFnLlxuICAgICAgICBpZiAodmVyc2lvbiA+PSA1KSB7XG4gICAgICAgICAgICB2YXIgZmxhZ3MgPSBzLmdldFVpbnQ4KCk7XG4gICAgICAgICAgICB2YXIgdmlzaWJsZSA9ICEhKGZsYWdzICYgMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWZXJzaW9uIDMgaW50cm9kdWNlZCB0aGUgZGF0YWJhc2UgSURcbiAgICAgICAgaWYgKHZlcnNpb24gPj0gMykge1xuICAgICAgICAgICAgZGJJZHNbbm9kZUluZGV4XSA9IHMuZ2V0VmFyaW50cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGVJbmRleCkge1xuICAgICAgICAgICAgLy8gTm90IGEgcm9vdCwgYmVoYXZpb3IgZGVwZW5kcyBvbiB0eXBlXG4gICAgICAgICAgICAvLyBMZWFmLCBpbnN0YW50aWF0ZSBhbmQgYWRkIGZyYWdtZW50IHJlZmVyZW5jZXMgYmVmb3JlIHJldHVybmluZ1xuICAgICAgICAgICAgc3dpdGNoIChub2RlVHlwZSkge1xuXG4gICAgICAgICAgICAgICAgY2FzZSBOb2RlVHlwZS5OVF9Jbm5lcjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOb2RlVHlwZS5OVF9HZW9tZXRyeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZyYWdDb3VudCA9IHMuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYWdDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnSWRzW25vZGVJbmRleF0gPSBzLmdldFVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJhZ0NvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmxpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPGZyYWdDb3VudDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpc3QucHVzaChzLmdldFVpbnQzMigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ0lkc1tub2RlSW5kZXhdID0gZmxpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJhZ0NvdW50ID0gcy5nZXRWYXJpbnRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYWdDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnSWRzW25vZGVJbmRleF0gPSBzLmdldFZhcmludHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZyYWdDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZsaXN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxmcmFnQ291bnQ7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaXN0LnB1c2gocy5nZXRWYXJpbnRzKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnSWRzW25vZGVJbmRleF0gPSBmbGlzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOb2RlVHlwZS5OVF9DYW1lcmE6XG4gICAgICAgICAgICAgICAgY2FzZSBOb2RlVHlwZS5OVF9MaWdodDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc0luc3RhbmNlRW50cnlJZCA9IHMuZ2V0VWludDgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnN0YW5jZUVudHJ5SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmdldFVpbnQzMigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlVucmVjb2duaXplZCBpbnN0YW5jZSB0cmVlIG5vZGUgdHlwZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkQ291bnQgPSAwO1xuICAgICAgICBpZiAobm9kZVR5cGUgPT09IE5vZGVUeXBlLk5UX0lubmVyKSB7XG4gICAgICAgICAgICBpZiAodmVyc2lvbiA8IDIpIHtcbiAgICAgICAgICAgICAgICBjaGlsZENvdW50ID0gcy5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hpbGRDb3VudCA9IHMuZ2V0VmFyaW50cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoaWxkQ291bnRzW25vZGVJbmRleF0gPSBjaGlsZENvdW50O1xuXG4gICAgICAgIG5vZGVJbmRleCsrO1xuICAgIH1cblxuICAgIHZhciBkYklkQnVmZmVyID0gbmV3IFVpbnQzMkFycmF5KGRiSWRzLmxlbmd0aCk7XG4gICAgZGJJZEJ1ZmZlci5zZXQoZGJJZHMpO1xuXG4gICAgdmFyIHhmb3JtQnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheSh0cmFuc2Zvcm1zLmxlbmd0aCk7XG4gICAgeGZvcm1CdWZmZXIuc2V0KHRyYW5zZm9ybXMpO1xuXG4gICAgdmFyIGNoaWxkQ291bnRzQnVmZmVyID0gbmV3IFVpbnQzMkFycmF5KGNoaWxkQ291bnRzLmxlbmd0aCk7XG4gICAgY2hpbGRDb3VudHNCdWZmZXIuc2V0KGNoaWxkQ291bnRzKTtcblxuICAgIHJldHVybiB7IGRiSWRzOiBkYklkQnVmZmVyLCBmcmFnSWRzOmZyYWdJZHMsIHRyYW5zZm9ybXM6IHhmb3JtQnVmZmVyLCBjaGlsZENvdW50czogY2hpbGRDb3VudHNCdWZmZXIgfTtcbn1cbiJdLCJuYW1lcyI6WyJyZWFkSW5zdGFuY2UiLCJwZnIiLCJlbnRyeSIsInBsYWNlbWVudFRyYW5zZm9ybSIsImdsb2JhbE9mZnNldCIsInRzZSIsInNlZWtUb0VudHJ5IiwidmVyc2lvbiIsImlzVmlzaWJsZSIsImZsYWdzIiwicmVhZFU4IiwiZGVmaW5pdGlvbiIsInN0cmVhbSIsImdldFVpbnQzMiIsInRyYW5zZm9ybSIsInJlYWRUcmFuc2Zvcm0iLCJ1bmRlZmluZWQiLCJpbnN0YW5jZU5vZGVQYXRoIiwicmVhZFBhdGhJRCIsIk5vZGVUeXBlIiwiTlRfSW5uZXIiLCJOVF9HZW9tZXRyeSIsIk5UX0NhbWVyYSIsIk5UX0xpZ2h0IiwicmVhZEluc3RhbmNlVHJlZSIsInRyYW5zZm9ybXMiLCJkYklkcyIsImZyYWdJZHMiLCJjaGlsZENvdW50cyIsIm5vZGVJbmRleCIsInMiLCJvZmZzZXQiLCJieXRlTGVuZ3RoIiwiaGFzU2hhcmVkTm9kZSIsImdldFVpbnQ4Iiwibm9kZVR5cGUiLCJ2aXNpYmxlIiwiZ2V0VmFyaW50cyIsImZyYWdDb3VudCIsImdldFVpbnQxNiIsImZsaXN0IiwiaSIsInB1c2giLCJoYXNJbnN0YW5jZUVudHJ5SWQiLCJjb25zb2xlIiwid2FybiIsImNoaWxkQ291bnQiLCJkYklkQnVmZmVyIiwiVWludDMyQXJyYXkiLCJsZW5ndGgiLCJzZXQiLCJ4Zm9ybUJ1ZmZlciIsIkZsb2F0MzJBcnJheSIsImNoaWxkQ291bnRzQnVmZmVyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/svf/Instances.js\n "); /***/ }), /***/ "./src/file-loaders/lmvtk/svf/Lights.js ": /*!**********************************************!*\ !*** ./src/file-loaders/lmvtk/svf/Lights.js ***! \**********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readLightDefinition: ()=> (/* binding */ readLightDefinition)\n/* harmony export */ });\n\n\n\nfunction readLightDefinition(pfr, entry) {\n var tse = pfr.seekToEntry(entry);\n if (!tse)\n return null;\n if (tse.version > 1 /*Constants::LightDefinitionVersion*/)\n return null;\n\n var s = pfr.stream;\n\n var light = {\n position: pfr.readVector3f(),\n dir: pfr.readVector3f(),\n r: s.getFloat32(),\n g: s.getFloat32(),\n b: s.getFloat32(),\n intensity: s.getFloat32(),\n spotAngle: s.getFloat32(),\n size: s.getFloat32(),\n type: s.getUint8()\n };\n\n return light;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL3N2Zi9MaWdodHMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFhOzs7QUFHTixTQUFTQSxtQkFBbUJBLENBQUNDLEdBQUcsRUFBRUMsS0FBSyxFQUFFO0VBQzVDLElBQUlDLEdBQUcsR0FBR0YsR0FBRyxDQUFDRyxXQUFXLENBQUNGLEtBQUssQ0FBQztFQUNoQyxJQUFJLENBQUNDLEdBQUc7RUFDSixPQUFPLElBQUk7RUFDZixJQUFJQSxHQUFHLENBQUNFLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFDaEIsT0FBTyxJQUFJOztFQUVmLElBQUlDLENBQUMsR0FBR0wsR0FBRyxDQUFDTSxNQUFNOztFQUVsQixJQUFJQyxLQUFLLEdBQUc7SUFDUkMsUUFBUSxFQUFJUixHQUFHLENBQUNTLFlBQVksQ0FBQyxDQUFDO0lBQzlCQyxHQUFHLEVBQVNWLEdBQUcsQ0FBQ1MsWUFBWSxDQUFDLENBQUM7SUFDOUJFLENBQUMsRUFBV04sQ0FBQyxDQUFDTyxVQUFVLENBQUMsQ0FBQztJQUMxQkMsQ0FBQyxFQUFXUixDQUFDLENBQUNPLFVBQVUsQ0FBQyxDQUFDO0lBQzFCRSxDQUFDLEVBQVdULENBQUMsQ0FBQ08sVUFBVSxDQUFDLENBQUM7SUFDMUJHLFNBQVMsRUFBR1YsQ0FBQyxDQUFDTyxVQUFVLENBQUMsQ0FBQztJQUMxQkksU0FBUyxFQUFHWCxDQUFDLENBQUNPLFVBQVUsQ0FBQyxDQUFDO0lBQzFCSyxJQUFJLEVBQVFaLENBQUMsQ0FBQ08sVUFBVSxDQUFDLENBQUM7SUFDMUJNLElBQUksRUFBUWIsQ0FBQyxDQUFDYyxRQUFRLENBQUM7RUFDM0IsQ0FBQzs7RUFFRCxPQUFPWixLQUFLO0FBQ2hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9zdmYvTGlnaHRzLmpzPzhlMjIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMaWdodERlZmluaXRpb24ocGZyLCBlbnRyeSkge1xuICAgIHZhciB0c2UgPSBwZnIuc2Vla1RvRW50cnkoZW50cnkpO1xuICAgIGlmICghdHNlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAodHNlLnZlcnNpb24gPiAxIC8qQ29uc3RhbnRzOjpMaWdodERlZmluaXRpb25WZXJzaW9uKi8pXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgdmFyIHMgPSBwZnIuc3RyZWFtO1xuXG4gICAgdmFyIGxpZ2h0ID0ge1xuICAgICAgICBwb3NpdGlvbjogICBwZnIucmVhZFZlY3RvcjNmKCksXG4gICAgICAgIGRpcjogICAgICAgIHBmci5yZWFkVmVjdG9yM2YoKSxcbiAgICAgICAgcjogICAgICAgICAgcy5nZXRGbG9hdDMyKCksXG4gICAgICAgIGc6ICAgICAgICAgIHMuZ2V0RmxvYXQzMigpLFxuICAgICAgICBiOiAgICAgICAgICBzLmdldEZsb2F0MzIoKSxcbiAgICAgICAgaW50ZW5zaXR5OiAgcy5nZXRGbG9hdDMyKCksXG4gICAgICAgIHNwb3RBbmdsZTogIHMuZ2V0RmxvYXQzMigpLFxuICAgICAgICBzaXplOiAgICAgICBzLmdldEZsb2F0MzIoKSxcbiAgICAgICAgdHlwZTogICAgICAgcy5nZXRVaW50OCgpXG4gICAgfTtcblxuICAgIHJldHVybiBsaWdodDtcbn1cbiJdLCJuYW1lcyI6WyJyZWFkTGlnaHREZWZpbml0aW9uIiwicGZyIiwiZW50cnkiLCJ0c2UiLCJzZWVrVG9FbnRyeSIsInZlcnNpb24iLCJzIiwic3RyZWFtIiwibGlnaHQiLCJwb3NpdGlvbiIsInJlYWRWZWN0b3IzZiIsImRpciIsInIiLCJnZXRGbG9hdDMyIiwiZyIsImIiLCJpbnRlbnNpdHkiLCJzcG90QW5nbGUiLCJzaXplIiwidHlwZSIsImdldFVpbnQ4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/svf/Lights.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/svf/Package.js": /*!***********************************************!*\ !*** ./src/file-loaders/lmvtk/svf/Package.js ***! \***********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Package: () => (/* binding */ Package)\n/* harmony export */ });\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../compat */ \"./src/compat.js\");\n/* harmony import */ var _wgs_scene_BVHBuilder__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../wgs/scene/BVHBuilder */ \"./src/wgs/scene/BVHBuilder.js\");\n/* harmony import */ var _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../wgs/scene/LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n/* harmony import */ var _net_Xhr__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../net/Xhr */ \"./src/file-loaders/net/Xhr.js\");\n/* harmony import */ var _common_InputStream__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../common/InputStream */ \"./src/file-loaders/lmvtk/common/InputStream.js\");\n/* harmony import */ var _common_PackReader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../common/PackReader */ \"./src/file-loaders/lmvtk/common/PackReader.js\");\n/* harmony import */ var _Fragments__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Fragments */ \"./src/file-loaders/lmvtk/svf/Fragments.js\");\n/* harmony import */ var _Instances__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Instances */ \"./src/file-loaders/lmvtk/svf/Instances.js\");\n/* harmony import */ var _common_SvfPlacementUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../common/SvfPlacementUtils */ \"./src/file-loaders/lmvtk/common/SvfPlacementUtils.js\");\n/* harmony import */ var _Cameras__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Cameras */ \"./src/file-loaders/lmvtk/svf/Cameras.js\");\n/* harmony import */ var _Lights__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Lights */ \"./src/file-loaders/lmvtk/svf/Lights.js\");\n/* harmony import */ var _common_NamedItemTree__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../common/NamedItemTree */ \"./src/file-loaders/lmvtk/common/NamedItemTree.js\");\n/* harmony import */ var _common_Viewpoints__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../common/Viewpoints */ \"./src/file-loaders/lmvtk/common/Viewpoints.js\");\n/* harmony import */ var _common_OverrideSets__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../common/OverrideSets */ \"./src/file-loaders/lmvtk/common/OverrideSets.js\");\n/* harmony import */ var fflate__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! fflate */ \"./node_modules/fflate/esm/browser.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getSingleFileFromZip(zip, filename) {\n const unzipped = (0,fflate__WEBPACK_IMPORTED_MODULE_14__.unzipSync)(zip, { filter: (fileinfo) => fileinfo.name === filename })[filename];\n if (!unzipped) {\n throw new Error(\"Error while extracting \" + filename);\n }\n return unzipped;\n}\n\n/** @constructor */\nfunction Package(zipPack) {\n\n this.zipPack = zipPack;\n\n this.manifest = null;\n\n this.materials = null; //The materials json as it came from the SVF\n\n this.metadata = null; //metadata json\n\n this.fragments = null; //will be a FragList\n\n this.geompacks = [];\n\n //TODO:\n //Those will not be parsed immediately\n //but we will remember the raw arrays\n //and fire off async workers to parse\n //them later, once we are loading geometry packs\n this.instances = [];\n\n this.cameras = [];\n this.lights = [];\n this.viewpoints = [];\n this.overrideSets = [];\n\n this.propertydb = {\n attrs: [],\n avs: [],\n ids: [],\n values: [],\n offsets: []\n };\n\n this.bbox = null; //Overall scene bounds\n\n this.animations = null; // animations json\n\n this.pendingRequests = 0;\n\n this.globalOffset = { x: 0, y: 0, z: 0 };\n\n this.topologyPath = null; // string path to the topology file\n\n}\n\n\n\nPackage.prototype.loadAsyncResource = function (loadContext, resourcePath, contents, callback) {\n\n //Data is immediately available from the SVF zip\n if (contents) {\n callback(contents);\n return;\n }\n\n //Launch an XHR to load the data from external file\n var svf = this;\n\n this.pendingRequests++;\n\n function xhrCB(responseData) {\n svf.pendingRequests--;\n\n callback(responseData);\n\n if (svf.pendingRequests == 0)\n svf.postLoad(loadContext);\n }\n\n _net_Xhr__WEBPACK_IMPORTED_MODULE_3__.ViewingService.getItem(loadContext, loadContext.basePath + resourcePath,\n xhrCB,\n loadContext.onFailureCallback\n );\n\n};\n\n/**\n * Extracts `manifest.json` file from the geometry pack file.\n * \n * @param {object} loadContext The loading context object passed in by an \n * SvfLoader object as it successfully downloaded a geometry pack file. The \n * load context is not used in this function.\n * \n * @throws {Error} `manifest.json` cannot be found within the package.\n */\nPackage.prototype.loadManifest = function (loadContext) {\n // yes, LoadContext is passed in, but is not used.\n const manifestJson = getSingleFileFromZip(this.zipPack, \"manifest.json\");\n const jdr = new _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(manifestJson);\n this.manifest = JSON.parse(jdr.getString(manifestJson.byteLength));\n};\n\n// Replace default globalOffset from SvfPlacementOffset by a recomputed one computed based on Fragment bboxes.\nPackage.prototype.applyLargeBoxOffset = function (offset) {\n if (offset && (\n offset.x !== this.globalOffset.x ||\n offset.y !== this.globalOffset.y ||\n offset.z !== this.globalOffset.z))\n {\n // So far, bbox was in viewer-coords, assuming the default globalOffset. Since we modified the offset,\n // we have to adjust the bbox now.\n if (!this.bbox.isEmpty()) {\n this.bbox.translate({\n x: this.globalOffset.x - offset.x,\n y: this.globalOffset.y - offset.y,\n z: this.globalOffset.z - offset.z\n });\n }\n\n // self.globalOffset may not be an LMVVector3, but in that case\n // offset should be self.GlobalOffset, so this should be OK\n this.verylargebbox = true;\n this.globalOffset.copy(offset);\n (0,_common_SvfPlacementUtils__WEBPACK_IMPORTED_MODULE_8__.calculatePlacementWithOffset)(this, this.placementTransform);\n }\n};\n\nPackage.prototype.parseFragmentList = function (asset, loadContext, path, contents) {\n\n var self = this;\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n var pfr = new _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n\n //Use a single large blocks to store all fragment elements\n //TODO: perhaps have a FragList per pack file to keep block size down?\n var frags = self.fragments = new _Fragments__WEBPACK_IMPORTED_MODULE_6__.FragList();\n var offset = (0,_Fragments__WEBPACK_IMPORTED_MODULE_6__.readFragments)(pfr, frags, loadContext.globalOffset, loadContext.placementTransform,\n loadContext.fragmentTransformsDouble, undefined, self.bbox, self.globalOffset);\n pfr = null;\n\n self.applyLargeBoxOffset(offset);\n });\n};\n\nPackage.prototype.parseGeometryMetadata = function (asset, loadContext, path, contents) {\n var self = this;\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n var pfr = new _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n\n self.geomMetadata = {};\n (0,_Fragments__WEBPACK_IMPORTED_MODULE_6__.readGeometryMetadata)(pfr, self.geomMetadata);\n self.numGeoms = self.geomMetadata.primCounts.length;\n });\n};\n\n\nPackage.prototype.parseInstanceTree = function (loadContext, path, contents, version) {\n\n var that = this;\n\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n var pfr = new _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n that.instanceTransforms = (0,_Instances__WEBPACK_IMPORTED_MODULE_7__.readInstanceTree)(pfr, version);\n });\n\n};\n\n\nPackage.prototype.loadRemainingSvf = function (loadContext) {\n var svf = this;\n\n this.manifest = loadContext.manifest;\n var manifest = this.manifest;\n\n var assets = manifest[\"assets\"];\n\n const metadataJson = getSingleFileFromZip(this.zipPack, \"metadata.json\");\n var jdr = new _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(metadataJson);\n\n // Test to see if this is json (not a binary header)\n // Done by verifying that there is no 0 (Hence ASCII)\n if (metadataJson.byteLength > 3 && metadataJson[3] !== 0) {\n this.metadata = JSON.parse(jdr.getString(metadataJson.byteLength)).metadata;\n\n (0,_common_SvfPlacementUtils__WEBPACK_IMPORTED_MODULE_8__.initPlacement)(this, loadContext);\n }\n\n //Version strings seem to be variable at the moment.\n //var manifestVersion = manifest[\"manifestversion\"];\n //if ( manifest[\"name\"] != \"LMV Manifest\"\n // || manifest[\"manifestversion\"] != 1)\n // return false;\n\n this.packFileTotalSize = 0;\n this.primitiveCount = 0;\n\n var typesetsList = manifest[\"typesets\"];\n var typesets = {};\n for (let i = 0; i < typesetsList.length; i++) {\n var ts=t ypesetsList[i];\n typesets[ts[ 'id']]=t s[ 'types'];\n }\n\n //Loop through the assets, and schedule non-embedded\n //ones for later loading.\n //TODO: currently only geometry pack files are stored for later\n //load and other assets will be loaded by this worker thread before\n //we return to the SvfLoader in the main thread.\n\n for (let i=0 ; i < assets.length; i++)\n {\n var asset=a ssets[i];\n if ((0,_compat__WEBPACK_IMPORTED_MODULE_0__.isMobileDevice)() && asset.id===\ "Set.bin\")\n continue;\n var type=a sset[\ "type\"];\n if (type.indexOf(\ "Autodesk.CloudPlatform.\")==0 )\n type=t ype.substr(23);\n var uri=a sset[\ "URI\"];\n var typeset=a sset[\ "typeset\"] ? typesets[asset[\ "typeset\"]] : null;\n var usize=a sset[\ "usize\"] || 0;\n var megaBytes=M ath.round(usize / 1048576 * 100000) / 100000 | 0;\n\n //If the asset is a geometry pack or property pack\n //just remember it for later demand loading\n if (uri.indexOf(\ "embed:/\") !=0 ) {\n if (type==\ "PackFile\") {\n var typeclass=t ypeset ? typeset[0][\ "class\"] : null;\n\n if (typeclass==\ "Autodesk.CloudPlatform.Geometry\") {\n\n this.packFileTotalSize +=u size;\n\n this.geompacks.push({ id: asset[\ "id\"], uri: uri, usize: usize });\n }\n } else\n if (type==\ "PropertyAttributes\") {\n this.propertydb.attrs.push({ path: uri });\n } else\n if (type==\ "PropertyAVs\") {\n this.propertydb.avs.push({ path: uri });\n } else\n if (type==\ "PropertyIDs\") {\n this.propertydb.ids.push({ path: uri });\n } else\n if (type==\ "PropertyOffsets\") {\n this.propertydb.offsets.push({ path: uri });\n } else\n if (type==\ "PropertyValues\") {\n this.propertydb.values.push({ path: uri });\n }\n }\n\n //parse assets which we will need immediately when\n // setting up the scene (whether embedded or not)\n var path=a sset[\ "URI\"];\n var contents=n ull; //if the data was in the zip, this will contain it\n if (path.indexOf(\ "embed:/\")==0 ) {\n path=p ath.substr(7);\n contents=g etSingleFileFromZip(this.zipPack, path);\n }\n\n if (type==\ "ProteinMaterials\") {\n //For simple materials, we want the file named \ "Materials.json\" and not \ "ProteinMaterials.json\"\n if (path.indexOf(\ "Protein\")==- 1) {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n var jdr=n ew _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(data);\n var byteLength=d ata.byteLength;\n if (0 < byteLength) {\n svf.materials=J SON.parse(jdr.getString(byteLength));\n } else {\n svf.materials=n ull;\n }\n });\n } else {\n //Also parse the Protein materials -- at the moment this helps\n //With some Prism materials that have properties we can handle, but\n //are not in the Simple variant.\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n var jdr=n ew _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(data);\n var byteLength=d ata.byteLength;\n if (0 < byteLength) {\n try {\n svf.proteinMaterials=J SON.parse(jdr.getString(byteLength));\n } catch (e) {\n //TS: This is dumb, but what can we do... Revit extractor had (has?) a bug where\n //materials are written as ANSI instead of UTF8 encoded. So we have this fallback attempt\n var ansi=\ "\";\n for (var i=0 ; i < data.length; i++)\n ansi +=S tring.fromCharCode(data[i]);\n\n try {\n svf.proteinMaterials=J SON.parse(ansi);\n } catch (e) {\n console.error(\ "Failed to parse Protein materials file either as UTF8 or ANSI\");\n }\n }\n } else {\n svf.proteinMaterials=n ull;\n }\n });\n }\n } else\n if (type==\ "StandardMaterials\") {\n\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n var jdr=n ew _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(data);\n var byteLength=d ata.byteLength;\n if (0 < byteLength) {\n var strContent=j dr.getString(byteLength);\n svf.stdSurfMats=J SON.parse(strContent);\n } else {\n svf.stdSurfMats=n ull;\n }\n });\n } else\n\n if (type==\ "MaterialX\") {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n var jdr=n ew _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(data);\n var byteLength=d ata.byteLength;\n if (0 < byteLength) {\n svf.mtlx=j dr.getString(byteLength);\n } else {\n svf.mtlx=n ull;\n }\n });\n\n } else\n if (type==\ "FragmentList\") {\n\n this.parseFragmentList(asset, loadContext, path, contents);\n\n } else\n if (type==\ "GeometryMetadataList\") {\n\n this.parseGeometryMetadata(asset, loadContext, path, contents);\n\n } else\n if (type==\ "PackFile\") {\n\n if (path.indexOf(\ "CameraDefinitions.bin\") !=- 1) {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n svf.camDefPack=n ew _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n });\n } else\n\n if (path.indexOf(\ "CameraList.bin\") !=- 1) {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n svf.camInstPack=n ew _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n });\n } else\n\n if (path.indexOf(\ "LightDefinitions.bin\") !=- 1) {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n svf.lightDefPack=n ew _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n });\n } else\n\n if (path.indexOf(\ "LightList.bin\") !=- 1) {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n svf.lightInstPack=n ew _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n });\n } else\n\n if (path.indexOf(\ "OverrideSets.bin\") !=- 1) {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n svf.overrideSetsPack=n ew _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n });\n } else\n\n if (path.indexOf(\ "Viewpoints.bin\") !=- 1) {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n svf.viewpointDefPack=n ew _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n });\n } else\n\n if (path.indexOf(\ "ViewpointTree.bin\") !=- 1) {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n svf.viewpointTreePack=n ew _common_PackReader__WEBPACK_IMPORTED_MODULE_5__.PackFileReader(data);\n });\n }\n } else\n if (type==\ "Animations\") {\n this.loadAsyncResource(loadContext, path, contents, function (data) {\n var jdr=n ew _common_InputStream__WEBPACK_IMPORTED_MODULE_4__.InputStream(data);\n var byteLength=d ata.byteLength;\n if (0 < byteLength) {\n svf.animations=J SON.parse(jdr.getString(byteLength));\n } else {\n svf.animations=n ull;\n }\n });\n } else\n if (type==\ "Topology\") {\n\n // save the path for later download.\n svf.topologyPath=l oadContext.basePath + path;\n svf.topologySizeMB=m egaBytes;\n\n } else\n if (loadContext.loadInstanceTree && (\n type==\ "InstanceTree\" || type==\ "InstanceTreeTree\")) {//Yes, the typo does occur in some older files\n\n //Instance tree node serialization version is stored in the type set\n var version=t ypeset ? typeset[0][\ "version\"] : 1;\n\n this.parseInstanceTree(loadContext, path, contents, version);\n }\n }\n\n\n if (this.pendingRequests==0 )\n this.postLoad(loadContext);\n\n delete this.zipPack;\n};\n\nPackage.prototype.addTransparencyFlagsToMaterials=f unction (mats) {\n for (var id in mats) {\n var mat=m ats[id];\n var userAssets=m at[\ "userassets\"];\n var innerMats=m at[\ "materials\"];\n var innerMat=i nnerMats[userAssets[0]];\n mat.transparent=i nnerMat[\ "transparent\"];\n }\n};\n\nPackage.prototype.postLoadOfCam=f unction (loadContext) {\n\n //Combine camera instances and camera definitions -- we need\n //both to be loaded to get the camera list\n if (this.camDefPack && this.camInstPack) {\n const tmpCenter=n ew _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__.LmvVector3();\n for (var k=0 , kEnd=t his.camInstPack.getEntryCounts(); k < kEnd; k++) {\n var inst=( 0,_Instances__WEBPACK_IMPORTED_MODULE_7__.readInstance)(this.camInstPack, k, this.placementTransform, this.globalOffset);\n var cam=( 0,_Cameras__WEBPACK_IMPORTED_MODULE_9__.readCameraDefinition)(this.camDefPack, inst);\n\n //Apply any instance transform to get the camera to world space.\n (0,_common_SvfPlacementUtils__WEBPACK_IMPORTED_MODULE_8__.transformCameraData)(cam, inst.transform);\n\n // Fix camera 's target if it is not inside the scene's bounding box.\n var bbox=t his.bbox;\n if (bbox && !bbox.containsPoint(cam.target)) {\n var distanceFromCenter=b box.getCenter(tmpCenter).distanceTo(cam.position);\n var direction=n ew _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__.LmvVector3().copy(cam.target).sub(cam.position).normalize().multiplyScalar(distanceFromCenter);\n cam.target=n ew _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_2__.LmvVector3().copy(cam.position).add(direction);\n }\n\n this.cameras.push(cam);\n }\n\n delete this.camDefPack;\n delete this.camInstPack;\n }\n};\n\nPackage.prototype.postLoadOfOverrideSets=f unction (loadContext) {\n if (this.overrideSetsPack) {\n for (let i=0 , iEnd=t his.overrideSetsPack.getEntryCounts(); i < iEnd; i++) {\n const set=( 0,_common_OverrideSets__WEBPACK_IMPORTED_MODULE_13__.readOverrideSet)(this.overrideSetsPack, i);\n\n if (set) {\n this.overrideSets.push(set);\n }\n }\n\n delete this.overrideSetsPack;\n }\n};\n\nPackage.prototype.postLoadOfViewpointTree=f unction (loadContext) {\n if (this.viewpointTreePack) {\n const root=( 0,_common_NamedItemTree__WEBPACK_IMPORTED_MODULE_11__.readNamedItemTree)(this.viewpointTreePack);\n this.viewpointTreeRoot=r oot;\n\n delete this.viewpointTreePack;\n }\n};\n\nPackage.prototype.postLoadOfViewpoints=f unction (loadContext) {\n if (this.viewpointDefPack && this.camDefPack) {\n for (let i=0 , iEnd=t his.viewpointDefPack.getEntryCounts(); i < iEnd; i++) {\n const def=( 0,_common_Viewpoints__WEBPACK_IMPORTED_MODULE_12__.readViewpointDefinition)(this.viewpointDefPack, this.camDefPack, i);\n\n if (def) {\n this.viewpoints.push(def);\n }\n }\n\n delete this.viewpointDefPack;\n }\n};\n\nPackage.prototype.postLoadOfLight=f unction (loadContext) {\n\n //Lights need the same thing as the cameras\n if (this.lightDefPack && this.lightInstPack) {\n for (var k=0 , kEnd=t his.lightInstPack.getEntryCounts(); k < kEnd; k++) {\n var inst=( 0,_Instances__WEBPACK_IMPORTED_MODULE_7__.readInstance)(this.lightInstPack, k, this.placementTransform, this.globalOffset);\n this.lights.push((0,_Lights__WEBPACK_IMPORTED_MODULE_10__.readLightDefinition)(this.lightDefPack, inst.definition));\n }\n\n delete this.lightInstPack;\n delete this.lightDefPack;\n }\n\n};\n\nPackage.prototype.postLoadOfFragments=f unction (loadContext) {\n\n //Post processing step -- splice geometry metadata information\n //into the fragments list, in case it was given separately\n //TODO: consider keeping the geom metadata as is instead of splicing\n //into the fragments, as it would be more efficient --\n //but that would require special handling on the viewer side,\n //changing the fragment filter code, etc.\n var frags=t his.fragments;\n\n if (this.geomMetadata) {\n\n //reusing the geomDataIndexes array to store\n //polygon counts, now that we don 't need the geomIndexes\n //after this loop.\n frags.polygonCounts = frags.geomDataIndexes;\n\n var gm = this.geomMetadata;\n\n // Holds the indexes to the topology data.\n if (gm.topoIndexes != undefined) {\n frags.topoIndexes = new Int32Array(frags.length);\n }\n\n for (var i = 0, iEnd = frags.length; i < iEnd; i++) {\n var geomIndex = frags.geomDataIndexes[i];\n frags.entityIndexes[i] = gm.entityIndexes[geomIndex];\n frags.packIds[i] = gm.packIds[geomIndex];\n\n frags.polygonCounts[i] = gm.primCounts[geomIndex];\n this.primitiveCount += gm.primCounts[geomIndex];\n\n // Fills in the indexes to the topology data.\n if (gm.topoIndexes != undefined) {\n frags.topoIndexes[i] = gm.topoIndexes[geomIndex];\n }\n }\n\n frags.geomDataIndexes = null;\n\n this.geomMetadata = null;\n }\n\n //Build a map from mesh to its referencing fragment(s)\n //So that we can quickly find them once meshes begin loading\n //incrementally. This requires the packIds and entityIndexes\n //to be known per fragment, so it happens after geometry metadata\n //is resolved above\n this.calculateMesh2Frag(frags);\n};\n\nPackage.prototype.calculateMesh2Frag = function (frags) {\n var mesh2frag = frags.mesh2frag = {};\n var packIds = frags.packIds;\n var entityIndexes = frags.entityIndexes;\n\n for (var i = 0, iEnd = frags.length; i < iEnd; i++) {\n var meshid = packIds[i] + \":\" + entityIndexes[i];\n\n var meshRefs = mesh2frag[meshid];\n if (meshRefs === undefined) {\n //If it's the first fragments for this mesh,\n //store the index directly -- most common case.\n mesh2frag[meshid]=i ;\n } else\n if (!Array.isArray(meshRefs)) {\n //otherwise put the fragments that\n //reference the mesh into an array\n mesh2frag[meshid]=[ meshRefs, i];\n } else\n {\n //already is an array\n meshRefs.push(i);\n }\n }\n};\n\nPackage.prototype.postLoadOfBBox=f unction (loadContext) {\n\n //if we don 't know the overall scene bounds, compute them from the\n //fragment boxes\n if (!this.bbox || loadContext.placementTransform) {\n\n var totalbox = [Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity];\n var frags = this.fragments;\n var fragBoxes = frags.boxes;\n\n for (var f = 0, fEnd = frags.length; f < fEnd; f++) {\n var bboff = f * 6;\n var i;\n for (i = 0; i < 3; i++)\n if (fragBoxes[bboff + i] < totalbox[i])\n totalbox[i] = fragBoxes[bboff + i];\n\n for (i = 3; i < 6; i++)\n if (fragBoxes[bboff + i] > totalbox[i])\n totalbox[i] = fragBoxes[bboff + i];\n }\n\n this.bbox = {\n min: { x: totalbox[0], y: totalbox[1], z: totalbox[2] },\n max: { x: totalbox[3], y: totalbox[4], z: totalbox[5] }\n };\n }\n\n\n};\n\nPackage.prototype.postLoadOfObjectIds = function (loadContext) {\n\n // If object ids are specified, clean up pack file list by only keeping the packs that's\n // we intended to load.\n let ids=n ew Set(loadContext.objectIds);\n if (ids.size> 0) {\n let packIds = new Set();\n let fragIds = new Set();\n // Pick out pack ids that referenced by fragments with specified db ids.\n\n for (let j = 0; j < this.fragments.length; ++j) {\n if (ids.has(this.fragments.fragId2dbId[j])) {\n packIds.add(this.fragments.packIds[j]);\n fragIds.add(j);\n }\n }\n\n // Reduce pack files based on selected pack ids.\n let packs=n ew Set();\n for (let i=0 ; i < this.geompacks.length; ++i) {\n // LMVTK pre-2.0 release uses integers for pack file id.\n // LMVTK 2.0 release uses integer + .pf as id.\n // We just drop the suffix here as we did in SVFLoader.\n // More info: https://git.autodesk.com/A360/LMVTK/commit/68b8c07a643a7ac39ecd5651d031d170e3a325be\n if (packIds.has(parseInt(this.geompacks[i].id))) {\n packs.add(this.geompacks[i]);\n }\n }\n this.geompacks=[ ...packs];\n\n let bb=( 0,_Fragments__WEBPACK_IMPORTED_MODULE_6__.filterFragments)(this.fragments, [...fragIds]);\n this.bbox={ \n min: { x: bb[0], y: bb[1], z: bb[2] },\n max: { x: bb[3], y: bb[4], z: bb[5] }\n };\n }\n\n};\n\nPackage.prototype.postLoadBubbleConsolidation=f unction () {\n\n const vtr=t his.viewpointTreeRoot;\n\n if (vtr) {\n vtr.name=v tr.name || 'Saved Viewpoints';\n }\n\n if (!(vtr !==n ull && vtr !==v oid 0 && vtr.children)) {\n return;\n }\n\n let order=0 ;\n function traverseBubble(node) {\n if (node.children) {\n for (let i=0 ; i < node.children.length; i++) {\n traverseBubble(node.children[i]);\n }\n node.type='folder' ;\n node.role='viewable' ;\n node.guid=o rder++ + '';\n } else {\n if (!isNaN(node.entry)) {\n node.order=o rder;\n\n node.type='view' ;\n node.role='3d' ;\n node.guid=o rder++ + '';\n node.isViewpoint=t rue;\n }\n }\n }\n\n\n for (let i=0 ; i < vtr.children.length; i++) {\n traverseBubble(vtr.children[i]);\n }\n};\n\nPackage.prototype.postLoadComplete=f unction (loadContext) {\n\n loadContext.loadDoneCB(\ "svf\");\n\n if (this.fragments.polygonCounts) {\n //Build the R-Tree\n var t0=p erformance.now();\n var mats=t his.materials ? this.materials[\ "materials\"] : null;\n if (mats)\n this.addTransparencyFlagsToMaterials(mats);\n this.bvh=n ew _wgs_scene_BVHBuilder__WEBPACK_IMPORTED_MODULE_1__.BVHBuilder(this.fragments, mats);\n this.bvh.build(loadContext.bvhOptions);\n var t1=p erformance.now();\n loadContext.worker.debug(\ "BVH build time (worker thread):\" + (t1 - t0));\n\n // In normal mode, just post back BVH as svf is already posted back earlier.\n loadContext.loadDoneCB(\ "bvh\");\n }\n\n loadContext.loadDoneCB(\ "done\");\n};\n\nPackage.prototype.postLoad=f unction (loadContext) {\n\n (0,_common_SvfPlacementUtils__WEBPACK_IMPORTED_MODULE_8__.transformAnimations)(this);\n\n // TODO: this function appears to take quite a\n // while if it has lots of data to load.\n // maybe move to a background thread?\n this.postLoadOfOverrideSets(loadContext);\n\n this.postLoadOfViewpoints(loadContext);\n\n this.postLoadOfViewpointTree(loadContext);\n\n this.postLoadOfCam(loadContext);\n\n this.postLoadOfLight(loadContext);\n\n this.postLoadOfFragments(loadContext);\n\n this.postLoadOfBBox(loadContext);\n\n this.postLoadOfObjectIds(loadContext);\n\n this.postLoadBubbleConsolidation();\n\n this.postLoadComplete(loadContext);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMvQyxJQUFJLENBQUN1RixHQUFHLENBQUNDLEtBQUssQ0FBQzVLLFdBQVcsQ0FBQzZLLFVBQVUsQ0FBQztJQUN0QyxJQUFJQyxFQUFFLEdBQUdMLFdBQVcsQ0FBQ0MsR0FBRyxDQUFDLENBQUM7SUFDMUIxSyxXQUFXLENBQUMrSyxNQUFNLENBQUNDLEtBQUssQ0FBQyxpQ0FBaUMsSUFBSUYsRUFBRSxHQUFHTixFQUFFLENBQUMsQ0FBQzs7SUFFdkU7SUFDQXhLLFdBQVcsQ0FBQ3VLLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFDakM7O0VBRUF2SyxXQUFXLENBQUN1SyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ2xDLENBQUM7O0FBRURuTSxPQUFPLENBQUMwQixTQUFTLENBQUNTLFFBQVEsR0FBRyxVQUFTUCxXQUFXLEVBQUU7O0VBRS9DN0MsOEVBQW1CLENBQUMsSUFBSSxDQUFDOztFQUV6QjtFQUNBO0VBQ0E7RUFDQSxJQUFJLENBQUMwSixzQkFBc0IsQ0FBQzdHLFdBQVcsQ0FBQzs7RUFFeEMsSUFBSSxDQUFDbUgsb0JBQW9CLENBQUNuSCxXQUFXLENBQUM7O0VBRXRDLElBQUksQ0FBQ2dILHVCQUF1QixDQUFDaEgsV0FBVyxDQUFDOztFQUV6QyxJQUFJLENBQUMwRixhQUFhLENBQUMxRixXQUFXLENBQUM7O0VBRS9CLElBQUksQ0FBQ3FILGVBQWUsQ0FBQ3JILFdBQVcsQ0FBQzs7RUFFakMsSUFBSSxDQUFDdUgsbUJBQW1CLENBQUN2SCxXQUFXLENBQUM7O0VBRXJDLElBQUksQ0FBQ3NJLGNBQWMsQ0FBQ3RJLFdBQVcsQ0FBQzs7RUFFaEMsSUFBSSxDQUFDZ0osbUJBQW1CLENBQUNoSixXQUFXLENBQUM7O0VBRXJDLElBQUksQ0FBQzJKLDJCQUEyQixDQUFDLENBQUM7O0VBRWxDLElBQUksQ0FBQ1csZ0JBQWdCLENBQUN0SyxXQUFXLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbG12dGsvc3ZmL1BhY2thZ2UuanM/YTI3MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2lzTW9iaWxlRGV2aWNlfSBmcm9tIFwiLi4vLi4vLi4vY29tcGF0XCI7XG5pbXBvcnQgeyBCVkhCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vd2dzL3NjZW5lL0JWSEJ1aWxkZXInO1xuaW1wb3J0IHsgTG12VmVjdG9yMyB9IGZyb20gXCIuLi8uLi8uLi93Z3Mvc2NlbmUvTG12VmVjdG9yM1wiO1xuaW1wb3J0IHsgVmlld2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9uZXQvWGhyJztcblxuaW1wb3J0IHsgSW5wdXRTdHJlYW0gfSBmcm9tICcuLi9jb21tb24vSW5wdXRTdHJlYW0nO1xuaW1wb3J0IHsgUGFja0ZpbGVSZWFkZXIgfSBmcm9tICcuLi9jb21tb24vUGFja1JlYWRlcic7XG5pbXBvcnQgeyBGcmFnTGlzdCwgcmVhZEZyYWdtZW50cywgcmVhZEdlb21ldHJ5TWV0YWRhdGEsIGZpbHRlckZyYWdtZW50cyB9IGZyb20gJy4vRnJhZ21lbnRzJztcbmltcG9ydCB7IHJlYWRJbnN0YW5jZSwgcmVhZEluc3RhbmNlVHJlZSB9IGZyb20gJy4vSW5zdGFuY2VzJztcbmltcG9ydCB7IGluaXRQbGFjZW1lbnQsIHRyYW5zZm9ybUFuaW1hdGlvbnMsIGNhbGN1bGF0ZVBsYWNlbWVudFdpdGhPZmZzZXQsIHRyYW5zZm9ybUNhbWVyYURhdGEgfSBmcm9tICcuLi9jb21tb24vU3ZmUGxhY2VtZW50VXRpbHMnO1xuaW1wb3J0IHsgcmVhZENhbWVyYURlZmluaXRpb24gfSBmcm9tICcuL0NhbWVyYXMnO1xuaW1wb3J0IHsgcmVhZExpZ2h0RGVmaW5pdGlvbiB9IGZyb20gJy4vTGlnaHRzJyA7XG5pbXBvcnQgeyByZWFkTmFtZWRJdGVtVHJlZSB9IGZyb20gJy4uL2NvbW1vbi9OYW1lZEl0ZW1UcmVlJztcbmltcG9ydCB7IHJlYWRWaWV3cG9pbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vY29tbW9uL1ZpZXdwb2ludHMnO1xuaW1wb3J0IHsgcmVhZE92ZXJyaWRlU2V0IH0gZnJvbSAnLi4vY29tbW9uL092ZXJyaWRlU2V0cyc7XG5pbXBvcnQgeyB1bnppcFN5bmMgfSBmcm9tICdmZmxhdGUnO1xuXG5mdW5jdGlvbiBnZXRTaW5nbGVGaWxlRnJvbVppcCh6aXAsIGZpbGVuYW1lKSB7XG4gICAgY29uc3QgdW56aXBwZWQgPSB1bnppcFN5bmMoemlwLCB7IGZpbHRlcjogZmlsZWluZm8gPT4gZmlsZWluZm8ubmFtZSA9PT0gZmlsZW5hbWUgfSlbZmlsZW5hbWVdO1xuICAgIGlmICghdW56aXBwZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgZXh0cmFjdGluZyBcIiArIGZpbGVuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuemlwcGVkO1xufVxuXG4vKiogQGNvbnN0cnVjdG9yICovXG5leHBvcnQgZnVuY3Rpb24gUGFja2FnZSh6aXBQYWNrKSB7XG5cbiAgICB0aGlzLnppcFBhY2sgPSB6aXBQYWNrO1xuXG4gICAgdGhpcy5tYW5pZmVzdCA9IG51bGw7XG5cbiAgICB0aGlzLm1hdGVyaWFscyA9IG51bGw7IC8vVGhlIG1hdGVyaWFscyBqc29uIGFzIGl0IGNhbWUgZnJvbSB0aGUgU1ZGXG5cbiAgICB0aGlzLm1ldGFkYXRhID0gbnVsbDsgLy9tZXRhZGF0YSBqc29uXG5cbiAgICB0aGlzLmZyYWdtZW50cyA9IG51bGw7IC8vd2lsbCBiZSBhIEZyYWdMaXN0XG5cbiAgICB0aGlzLmdlb21wYWNrcyA9IFtdO1xuXG4gICAgLy9UT0RPOlxuICAgIC8vVGhvc2Ugd2lsbCBub3QgYmUgcGFyc2VkIGltbWVkaWF0ZWx5XG4gICAgLy9idXQgd2Ugd2lsbCByZW1lbWJlciB0aGUgcmF3IGFycmF5c1xuICAgIC8vYW5kIGZpcmUgb2ZmIGFzeW5jIHdvcmtlcnMgdG8gcGFyc2VcbiAgICAvL3RoZW0gbGF0ZXIsIG9uY2Ugd2UgYXJlIGxvYWRpbmcgZ2VvbWV0cnkgcGFja3NcbiAgICB0aGlzLmluc3RhbmNlcyA9IFtdO1xuXG4gICAgdGhpcy5jYW1lcmFzID0gW107XG4gICAgdGhpcy5saWdodHMgPSBbXTtcbiAgICB0aGlzLnZpZXdwb2ludHMgPSBbXTtcbiAgICB0aGlzLm92ZXJyaWRlU2V0cyA9IFtdO1xuXG4gICAgdGhpcy5wcm9wZXJ0eWRiID0ge1xuICAgICAgICBhdHRycyA6IFtdLFxuICAgICAgICBhdnM6IFtdLFxuICAgICAgICBpZHM6IFtdLFxuICAgICAgICB2YWx1ZXM6IFtdLFxuICAgICAgICBvZmZzZXRzOiBbXVxuICAgIH07XG5cbiAgICB0aGlzLmJib3ggPSBudWxsOyAvL092ZXJhbGwgc2NlbmUgYm91bmRzXG5cbiAgICB0aGlzLmFuaW1hdGlvbnMgPSBudWxsOyAvLyBhbmltYXRpb25zIGpzb25cblxuICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzID0gMDtcblxuICAgIHRoaXMuZ2xvYmFsT2Zmc2V0ID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5cbiAgICB0aGlzLnRvcG9sb2d5UGF0aCA9IG51bGw7IC8vIHN0cmluZyBwYXRoIHRvIHRoZSB0b3BvbG9neSBmaWxlXG5cbn1cblxuXG5cblBhY2thZ2UucHJvdG90eXBlLmxvYWRBc3luY1Jlc291cmNlID0gZnVuY3Rpb24obG9hZENvbnRleHQsIHJlc291cmNlUGF0aCwgY29udGVudHMsIGNhbGxiYWNrKSB7XG5cbiAgICAvL0RhdGEgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIGZyb20gdGhlIFNWRiB6aXBcbiAgICBpZiAoY29udGVudHMpIHtcbiAgICAgICAgY2FsbGJhY2soY29udGVudHMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9MYXVuY2ggYW4gWEhSIHRvIGxvYWQgdGhlIGRhdGEgZnJvbSBleHRlcm5hbCBmaWxlXG4gICAgdmFyIHN2ZiA9IHRoaXM7XG5cbiAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyArKztcblxuICAgIGZ1bmN0aW9uIHhockNCKHJlc3BvbnNlRGF0YSkge1xuICAgICAgICBzdmYucGVuZGluZ1JlcXVlc3RzLS07XG5cbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2VEYXRhKTtcblxuICAgICAgICBpZiAoc3ZmLnBlbmRpbmdSZXF1ZXN0cyA9PSAwKVxuICAgICAgICAgICAgc3ZmLnBvc3RMb2FkKGxvYWRDb250ZXh0KTtcbiAgICB9XG5cbiAgICBWaWV3aW5nU2VydmljZS5nZXRJdGVtKGxvYWRDb250ZXh0LCBsb2FkQ29udGV4dC5iYXNlUGF0aCArIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDQixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkQ29udGV4dC5vbkZhaWx1cmVDYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBgbWFuaWZlc3QuanNvbmAgZmlsZSBmcm9tIHRoZSBnZW9tZXRyeSBwYWNrIGZpbGUuXG4gKiBcbiAqIEBwYXJhbSB7b2JqZWN0fSBsb2FkQ29udGV4dCBUaGUgbG9hZGluZyBjb250ZXh0IG9iamVjdCBwYXNzZWQgaW4gYnkgYW4gXG4gKiBTdmZMb2FkZXIgb2JqZWN0IGFzIGl0IHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIGEgZ2VvbWV0cnkgcGFjayBmaWxlLiBUaGUgXG4gKiBsb2FkIGNvbnRleHQgaXMgbm90IHVzZWQgaW4gdGhpcyBmdW5jdGlvbi5cbiAqIFxuICogQHRocm93cyB7RXJyb3J9IGBtYW5pZmVzdC5qc29uYCBjYW5ub3QgYmUgZm91bmQgd2l0aGluIHRoZSBwYWNrYWdlLlxuICovXG5QYWNrYWdlLnByb3RvdHlwZS5sb2FkTWFuaWZlc3QgPSBmdW5jdGlvbihsb2FkQ29udGV4dCkge1xuICAgIC8vIHllcywgTG9hZENvbnRleHQgaXMgcGFzc2VkIGluLCBidXQgaXMgbm90IHVzZWQuXG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gZ2V0U2luZ2xlRmlsZUZyb21aaXAodGhpcy56aXBQYWNrLCBcIm1hbmlmZXN0Lmpzb25cIik7XG4gICAgY29uc3QgamRyID0gbmV3IElucHV0U3RyZWFtKG1hbmlmZXN0SnNvbik7XG4gICAgdGhpcy5tYW5pZmVzdCA9IEpTT04ucGFyc2UoamRyLmdldFN0cmluZyhtYW5pZmVzdEpzb24uYnl0ZUxlbmd0aCkpO1xufTtcblxuLy8gUmVwbGFjZSBkZWZhdWx0IGdsb2JhbE9mZnNldCBmcm9tIFN2ZlBsYWNlbWVudE9mZnNldCBieSBhIHJlY29tcHV0ZWQgb25lIGNvbXB1dGVkIGJhc2VkIG9uIEZyYWdtZW50IGJib3hlcy5cblBhY2thZ2UucHJvdG90eXBlLmFwcGx5TGFyZ2VCb3hPZmZzZXQgPSBmdW5jdGlvbihvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0ICYmIFxuICAgICAgICAob2Zmc2V0LnggIT09IHRoaXMuZ2xvYmFsT2Zmc2V0LnggfHxcbiAgICAgICAgIG9mZnNldC55ICE9PSB0aGlzLmdsb2JhbE9mZnNldC55IHx8IFxuICAgICAgICAgb2Zmc2V0LnogIT09IHRoaXMuZ2xvYmFsT2Zmc2V0LnopXG4gICAgKSB7XG4gICAgICAgIC8vIFNvIGZhciwgYmJveCB3YXMgaW4gdmlld2VyLWNvb3JkcywgYXNzdW1pbmcgdGhlIGRlZmF1bHQgZ2xvYmFsT2Zmc2V0LiBTaW5jZSB3ZSBtb2RpZmllZCB0aGUgb2Zmc2V0LFxuICAgICAgICAvLyB3ZSBoYXZlIHRvIGFkanVzdCB0aGUgYmJveCBub3cuXG4gICAgICAgIGlmICghdGhpcy5iYm94LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5iYm94LnRyYW5zbGF0ZSh7IFxuICAgICAgICAgICAgICAgIHg6IHRoaXMuZ2xvYmFsT2Zmc2V0LnggLSBvZmZzZXQueCwgXG4gICAgICAgICAgICAgICAgeTogdGhpcy5nbG9iYWxPZmZzZXQueSAtIG9mZnNldC55LCBcbiAgICAgICAgICAgICAgICB6OiB0aGlzLmdsb2JhbE9mZnNldC56IC0gb2Zmc2V0LnogXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNlbGYuZ2xvYmFsT2Zmc2V0IG1heSBub3QgYmUgYW4gTE1WVmVjdG9yMywgYnV0IGluIHRoYXQgY2FzZVxuICAgICAgICAvLyBvZmZzZXQgc2hvdWxkIGJlIHNlbGYuR2xvYmFsT2Zmc2V0LCBzbyB0aGlzIHNob3VsZCBiZSBPS1xuICAgICAgICB0aGlzLnZlcnlsYXJnZWJib3ggPSB0cnVlO1xuICAgICAgICB0aGlzLmdsb2JhbE9mZnNldC5jb3B5KG9mZnNldCk7XG4gICAgICAgIGNhbGN1bGF0ZVBsYWNlbWVudFdpdGhPZmZzZXQodGhpcywgdGhpcy5wbGFjZW1lbnRUcmFuc2Zvcm0pO1xuICAgIH1cbn07XG5cblBhY2thZ2UucHJvdG90eXBlLnBhcnNlRnJhZ21lbnRMaXN0ID0gZnVuY3Rpb24oYXNzZXQsIGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cykge1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubG9hZEFzeW5jUmVzb3VyY2UobG9hZENvbnRleHQsIHBhdGgsIGNvbnRlbnRzLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIHZhciBwZnIgPSBuZXcgUGFja0ZpbGVSZWFkZXIoZGF0YSk7XG5cbiAgICAgICAgLy9Vc2UgYSBzaW5nbGUgbGFyZ2UgYmxvY2tzIHRvIHN0b3JlIGFsbCBmcmFnbWVudCBlbGVtZW50c1xuICAgICAgICAvL1RPRE86IHBlcmhhcHMgaGF2ZSBhIEZyYWdMaXN0IHBlciBwYWNrIGZpbGUgdG8ga2VlcCBibG9jayBzaXplIGRvd24/XG4gICAgICAgIHZhciBmcmFncyA9IHNlbGYuZnJhZ21lbnRzID0gbmV3IEZyYWdMaXN0KCk7XG4gICAgICAgIHZhciBvZmZzZXQgPSByZWFkRnJhZ21lbnRzKHBmciwgZnJhZ3MsIGxvYWRDb250ZXh0Lmdsb2JhbE9mZnNldCwgbG9hZENvbnRleHQucGxhY2VtZW50VHJhbnNmb3JtLFxuICAgICAgICAgICAgbG9hZENvbnRleHQuZnJhZ21lbnRUcmFuc2Zvcm1zRG91YmxlLCB1bmRlZmluZWQsIHNlbGYuYmJveCwgc2VsZi5nbG9iYWxPZmZzZXQpO1xuICAgICAgICBwZnIgPSBudWxsO1xuXG4gICAgICAgIHNlbGYuYXBwbHlMYXJnZUJveE9mZnNldChvZmZzZXQpO1xuICAgIH0pO1xufTtcblxuUGFja2FnZS5wcm90b3R5cGUucGFyc2VHZW9tZXRyeU1ldGFkYXRhID0gZnVuY3Rpb24oYXNzZXQsIGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICB2YXIgcGZyID0gbmV3IFBhY2tGaWxlUmVhZGVyKGRhdGEpO1xuXG4gICAgICAgIHNlbGYuZ2VvbU1ldGFkYXRhID0ge307XG4gICAgICAgIHJlYWRHZW9tZXRyeU1ldGFkYXRhKHBmciwgc2VsZi5nZW9tTWV0YWRhdGEpO1xuICAgICAgICBzZWxmLm51bUdlb21zID0gc2VsZi5nZW9tTWV0YWRhdGEucHJpbUNvdW50cy5sZW5ndGg7XG4gICAgfSk7XG59O1xuXG5cblBhY2thZ2UucHJvdG90eXBlLnBhcnNlSW5zdGFuY2VUcmVlID0gZnVuY3Rpb24obG9hZENvbnRleHQsIHBhdGgsIGNvbnRlbnRzLCB2ZXJzaW9uKSB7XG5cbiAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICB2YXIgcGZyID0gbmV3IFBhY2tGaWxlUmVhZGVyKGRhdGEpO1xuICAgICAgICB0aGF0Lmluc3RhbmNlVHJhbnNmb3JtcyA9IHJlYWRJbnN0YW5jZVRyZWUocGZyLCB2ZXJzaW9uKTtcbiAgICB9KTtcblxufTtcblxuXG5QYWNrYWdlLnByb3RvdHlwZS5sb2FkUmVtYWluaW5nU3ZmID0gZnVuY3Rpb24obG9hZENvbnRleHQpIHtcbiAgICB2YXIgc3ZmID0gdGhpcztcblxuICAgIHRoaXMubWFuaWZlc3QgPSBsb2FkQ29udGV4dC5tYW5pZmVzdDtcbiAgICB2YXIgbWFuaWZlc3QgPSB0aGlzLm1hbmlmZXN0O1xuXG4gICAgdmFyIGFzc2V0cyA9IG1hbmlmZXN0W1wiYXNzZXRzXCJdO1xuXG4gICAgY29uc3QgbWV0YWRhdGFKc29uID0gZ2V0U2luZ2xlRmlsZUZyb21aaXAodGhpcy56aXBQYWNrLCBcIm1ldGFkYXRhLmpzb25cIik7XG4gICAgdmFyIGpkciA9IG5ldyBJbnB1dFN0cmVhbShtZXRhZGF0YUpzb24pO1xuXG4gICAgLy8gVGVzdCB0byBzZWUgaWYgdGhpcyBpcyBqc29uIChub3QgYSBiaW5hcnkgaGVhZGVyKVxuICAgIC8vIERvbmUgYnkgdmVyaWZ5aW5nIHRoYXQgdGhlcmUgaXMgbm8gMCAoSGVuY2UgQVNDSUkpXG4gICAgaWYobWV0YWRhdGFKc29uLmJ5dGVMZW5ndGggPiAzICYmIG1ldGFkYXRhSnNvblszXSAhPT0gMCkge1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gSlNPTi5wYXJzZShqZHIuZ2V0U3RyaW5nKG1ldGFkYXRhSnNvbi5ieXRlTGVuZ3RoKSkubWV0YWRhdGE7XG5cbiAgICAgICAgaW5pdFBsYWNlbWVudCh0aGlzLCBsb2FkQ29udGV4dCk7XG4gICAgfVxuXG4gICAgLy9WZXJzaW9uIHN0cmluZ3Mgc2VlbSB0byBiZSB2YXJpYWJsZSBhdCB0aGUgbW9tZW50LlxuICAgIC8vdmFyIG1hbmlmZXN0VmVyc2lvbiA9IG1hbmlmZXN0W1wibWFuaWZlc3R2ZXJzaW9uXCJdO1xuICAgIC8vaWYgKCAgIG1hbmlmZXN0W1wibmFtZVwiXSAhPSBcIkxNViBNYW5pZmVzdFwiXG4gICAgLy8gICAgfHwgbWFuaWZlc3RbXCJtYW5pZmVzdHZlcnNpb25cIl0gIT0gMSlcbiAgICAvLyAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB0aGlzLnBhY2tGaWxlVG90YWxTaXplID0gMDtcbiAgICB0aGlzLnByaW1pdGl2ZUNvdW50ID0gMDtcblxuICAgIHZhciB0eXBlc2V0c0xpc3QgPSBtYW5pZmVzdFtcInR5cGVzZXRzXCJdO1xuICAgIHZhciB0eXBlc2V0cyA9IHt9O1xuICAgIGZvciAobGV0IGk9MDsgaTx0eXBlc2V0c0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRzID0gdHlwZXNldHNMaXN0W2ldO1xuICAgICAgICB0eXBlc2V0c1t0c1snaWQnXV0gPSB0c1sndHlwZXMnXTtcbiAgICB9XG5cbiAgICAvL0xvb3AgdGhyb3VnaCB0aGUgYXNzZXRzLCBhbmQgc2NoZWR1bGUgbm9uLWVtYmVkZGVkXG4gICAgLy9vbmVzIGZvciBsYXRlciBsb2FkaW5nLlxuICAgIC8vVE9ETzogY3VycmVudGx5IG9ubHkgZ2VvbWV0cnkgcGFjayBmaWxlcyBhcmUgc3RvcmVkIGZvciBsYXRlclxuICAgIC8vbG9hZCBhbmQgb3RoZXIgYXNzZXRzIHdpbGwgYmUgbG9hZGVkIGJ5IHRoaXMgd29ya2VyIHRocmVhZCBiZWZvcmVcbiAgICAvL3dlIHJldHVybiB0byB0aGUgU3ZmTG9hZGVyIGluIHRoZSBtYWluIHRocmVhZC5cblxuICAgIGZvciAobGV0IGk9MDsgaTxhc3NldHMubGVuZ3RoOyBpKyspXG4gICAge1xuICAgICAgICB2YXIgYXNzZXQgPSBhc3NldHNbaV07XG4gICAgICAgIGlmIChpc01vYmlsZURldmljZSgpICYmIChhc3NldC5pZCA9PT0gXCJTZXQuYmluXCIpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIHZhciB0eXBlID0gYXNzZXRbXCJ0eXBlXCJdO1xuICAgICAgICBpZiAodHlwZS5pbmRleE9mKFwiQXV0b2Rlc2suQ2xvdWRQbGF0Zm9ybS5cIikgPT0gMClcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cigyMyk7XG4gICAgICAgIHZhciB1cmkgPSBhc3NldFtcIlVSSVwiXTtcbiAgICAgICAgdmFyIHR5cGVzZXQgPSBhc3NldFtcInR5cGVzZXRcIl0gPyB0eXBlc2V0c1thc3NldFtcInR5cGVzZXRcIl1dIDogbnVsbDtcbiAgICAgICAgdmFyIHVzaXplID0gYXNzZXRbXCJ1c2l6ZVwiXSB8fCAwO1xuICAgICAgICB2YXIgbWVnYUJ5dGVzID0gKE1hdGgucm91bmQodXNpemUvMTA0ODU3NioxMDAwMDApLzEwMDAwMCkgfCAwO1xuXG4gICAgICAgIC8vSWYgdGhlIGFzc2V0IGlzIGEgZ2VvbWV0cnkgcGFjayBvciBwcm9wZXJ0eSBwYWNrXG4gICAgICAgIC8vanVzdCByZW1lbWJlciBpdCBmb3IgbGF0ZXIgZGVtYW5kIGxvYWRpbmdcbiAgICAgICAgaWYgKHVyaS5pbmRleE9mKFwiZW1iZWQ6L1wiKSAhPSAwKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBcIlBhY2tGaWxlXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZWNsYXNzID0gdHlwZXNldCA/IHR5cGVzZXRbMF1bXCJjbGFzc1wiXSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZWNsYXNzID09IFwiQXV0b2Rlc2suQ2xvdWRQbGF0Zm9ybS5HZW9tZXRyeVwiKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWNrRmlsZVRvdGFsU2l6ZSArPSB1c2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlb21wYWNrcy5wdXNoKHsgaWQ6IGFzc2V0W1wiaWRcIl0sIHVyaTogdXJpLCB1c2l6ZTogdXNpemUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIlByb3BlcnR5QXR0cmlidXRlc1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eWRiLmF0dHJzLnB1c2goe3BhdGg6dXJpfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IFwiUHJvcGVydHlBVnNcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydHlkYi5hdnMucHVzaCh7cGF0aDp1cml9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJQcm9wZXJ0eUlEc1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eWRiLmlkcy5wdXNoKHtwYXRoOnVyaX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIlByb3BlcnR5T2Zmc2V0c1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eWRiLm9mZnNldHMucHVzaCh7cGF0aDp1cml9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJQcm9wZXJ0eVZhbHVlc1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eWRiLnZhbHVlcy5wdXNoKHtwYXRoOnVyaX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9wYXJzZSBhc3NldHMgd2hpY2ggd2Ugd2lsbCBuZWVkIGltbWVkaWF0ZWx5IHdoZW5cbiAgICAgICAgLy8gc2V0dGluZyB1cCB0aGUgc2NlbmUgKHdoZXRoZXIgZW1iZWRkZWQgb3Igbm90KVxuICAgICAgICB2YXIgcGF0aCA9IGFzc2V0W1wiVVJJXCJdO1xuICAgICAgICB2YXIgY29udGVudHMgPSBudWxsOyAvL2lmIHRoZSBkYXRhIHdhcyBpbiB0aGUgemlwLCB0aGlzIHdpbGwgY29udGFpbiBpdFxuICAgICAgICBpZiAocGF0aC5pbmRleE9mKFwiZW1iZWQ6L1wiKSA9PSAwKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoNyk7XG4gICAgICAgICAgICBjb250ZW50cyA9IGdldFNpbmdsZUZpbGVGcm9tWmlwKHRoaXMuemlwUGFjaywgcGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PSBcIlByb3RlaW5NYXRlcmlhbHNcIikge1xuICAgICAgICAgICAgLy9Gb3Igc2ltcGxlIG1hdGVyaWFscywgd2Ugd2FudCB0aGUgZmlsZSBuYW1lZCBcIk1hdGVyaWFscy5qc29uXCIgYW5kIG5vdCBcIlByb3RlaW5NYXRlcmlhbHMuanNvblwiXG4gICAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKFwiUHJvdGVpblwiKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEFzeW5jUmVzb3VyY2UobG9hZENvbnRleHQsIHBhdGgsIGNvbnRlbnRzLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBqZHIgPSBuZXcgSW5wdXRTdHJlYW0oZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBieXRlTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoMCA8IGJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN2Zi5tYXRlcmlhbHMgPSBKU09OLnBhcnNlKGpkci5nZXRTdHJpbmcoYnl0ZUxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ZmLm1hdGVyaWFscyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy9BbHNvIHBhcnNlIHRoZSBQcm90ZWluIG1hdGVyaWFscyAtLSBhdCB0aGUgbW9tZW50IHRoaXMgaGVscHNcbiAgICAgICAgICAgICAgICAvL1dpdGggc29tZSBQcmlzbSBtYXRlcmlhbHMgdGhhdCBoYXZlIHByb3BlcnRpZXMgd2UgY2FuIGhhbmRsZSwgYnV0XG4gICAgICAgICAgICAgICAgLy9hcmUgbm90IGluIHRoZSBTaW1wbGUgdmFyaWFudC5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgamRyID0gbmV3IElucHV0U3RyZWFtKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgPCBieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zi5wcm90ZWluTWF0ZXJpYWxzID0gSlNPTi5wYXJzZShqZHIuZ2V0U3RyaW5nKGJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RTOiBUaGlzIGlzIGR1bWIsIGJ1dCB3aGF0IGNhbiB3ZSBkby4uLiBSZXZpdCBleHRyYWN0b3IgaGFkIChoYXM/KSBhIGJ1ZyB3aGVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbWF0ZXJpYWxzIGFyZSB3cml0dGVuIGFzIEFOU0kgaW5zdGVhZCBvZiBVVEY4IGVuY29kZWQuIFNvIHdlIGhhdmUgdGhpcyBmYWxsYmFjayBhdHRlbXB0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFuc2kgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnNpICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZGF0YVtpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmYucHJvdGVpbk1hdGVyaWFscyA9IEpTT04ucGFyc2UoYW5zaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIFByb3RlaW4gbWF0ZXJpYWxzIGZpbGUgZWl0aGVyIGFzIFVURjggb3IgQU5TSVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmYucHJvdGVpbk1hdGVyaWFscyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09IFwiU3RhbmRhcmRNYXRlcmlhbHNcIikge1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgamRyID0gbmV3IElucHV0U3RyZWFtKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgPCBieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyQ29udGVudCA9IGpkci5nZXRTdHJpbmcoYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmYuc3RkU3VyZk1hdHMgPSBKU09OLnBhcnNlKHN0ckNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ZmLnN0ZFN1cmZNYXRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIk1hdGVyaWFsWFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgamRyID0gbmV3IElucHV0U3RyZWFtKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgPCBieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmYubXRseCA9IGpkci5nZXRTdHJpbmcoYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmYubXRseCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09IFwiRnJhZ21lbnRMaXN0XCIpIHtcblxuICAgICAgICAgICAgdGhpcy5wYXJzZUZyYWdtZW50TGlzdChhc3NldCwgbG9hZENvbnRleHQsIHBhdGgsIGNvbnRlbnRzKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJHZW9tZXRyeU1ldGFkYXRhTGlzdFwiKSB7XG5cbiAgICAgICAgICAgIHRoaXMucGFyc2VHZW9tZXRyeU1ldGFkYXRhKGFzc2V0LCBsb2FkQ29udGV4dCwgcGF0aCwgY29udGVudHMpO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIlBhY2tGaWxlXCIpIHtcblxuICAgICAgICAgICAgaWYgKHBhdGguaW5kZXhPZihcIkNhbWVyYURlZmluaXRpb25zLmJpblwiKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEFzeW5jUmVzb3VyY2UobG9hZENvbnRleHQsIHBhdGgsIGNvbnRlbnRzLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHN2Zi5jYW1EZWZQYWNrID0gbmV3IFBhY2tGaWxlUmVhZGVyKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoLmluZGV4T2YoXCJDYW1lcmFMaXN0LmJpblwiKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEFzeW5jUmVzb3VyY2UobG9hZENvbnRleHQsIHBhdGgsIGNvbnRlbnRzLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHN2Zi5jYW1JbnN0UGFjayA9IG5ldyBQYWNrRmlsZVJlYWRlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxzZSBpZiAocGF0aC5pbmRleE9mKFwiTGlnaHREZWZpbml0aW9ucy5iaW5cIikgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBzdmYubGlnaHREZWZQYWNrID0gbmV3IFBhY2tGaWxlUmVhZGVyKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoLmluZGV4T2YoXCJMaWdodExpc3QuYmluXCIpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQXN5bmNSZXNvdXJjZShsb2FkQ29udGV4dCwgcGF0aCwgY29udGVudHMsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ZmLmxpZ2h0SW5zdFBhY2sgPSBuZXcgUGFja0ZpbGVSZWFkZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGVsc2UgaWYgKHBhdGguaW5kZXhPZihcIk92ZXJyaWRlU2V0cy5iaW5cIikgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBzdmYub3ZlcnJpZGVTZXRzUGFjayA9IG5ldyBQYWNrRmlsZVJlYWRlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZWxzZSBpZiAocGF0aC5pbmRleE9mKFwiVmlld3BvaW50cy5iaW5cIikgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBzdmYudmlld3BvaW50RGVmUGFjayA9IG5ldyBQYWNrRmlsZVJlYWRlcihkYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZWxzZSBpZiAocGF0aC5pbmRleE9mKFwiVmlld3BvaW50VHJlZS5iaW5cIikgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBc3luY1Jlc291cmNlKGxvYWRDb250ZXh0LCBwYXRoLCBjb250ZW50cywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBzdmYudmlld3BvaW50VHJlZVBhY2sgPSBuZXcgUGFja0ZpbGVSZWFkZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIkFuaW1hdGlvbnNcIikge1xuICAgICAgICAgICAgdGhpcy5sb2FkQXN5bmNSZXNvdXJjZShsb2FkQ29udGV4dCwgcGF0aCwgY29udGVudHMsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgamRyID0gbmV3IElucHV0U3RyZWFtKGRhdGEpO1xuICAgICAgICAgICAgICAgIHZhciBieXRlTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICgwIDwgYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdmYuYW5pbWF0aW9ucyA9IEpTT04ucGFyc2UoamRyLmdldFN0cmluZyhieXRlTGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3ZmLmFuaW1hdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJUb3BvbG9neVwiKSB7XG5cbiAgICAgICAgICAgIC8vIHNhdmUgdGhlIHBhdGggZm9yIGxhdGVyIGRvd25sb2FkLlxuICAgICAgICAgICAgc3ZmLnRvcG9sb2d5UGF0aCAgID0gbG9hZENvbnRleHQuYmFzZVBhdGggKyBwYXRoO1xuICAgICAgICAgICAgc3ZmLnRvcG9sb2d5U2l6ZU1CID0gbWVnYUJ5dGVzO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobG9hZENvbnRleHQubG9hZEluc3RhbmNlVHJlZSAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZSA9PSBcIkluc3RhbmNlVHJlZVwiIHx8IHR5cGUgPT0gXCJJbnN0YW5jZVRyZWVUcmVlXCIpKSB7IC8vWWVzLCB0aGUgdHlwbyBkb2VzIG9jY3VyIGluIHNvbWUgb2xkZXIgZmlsZXNcblxuICAgICAgICAgICAgLy9JbnN0YW5jZSB0cmVlIG5vZGUgc2VyaWFsaXphdGlvbiB2ZXJzaW9uIGlzIHN0b3JlZCBpbiB0aGUgdHlwZSBzZXRcbiAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gdHlwZXNldCA/IHR5cGVzZXRbMF1bXCJ2ZXJzaW9uXCJdIDogMTtcblxuICAgICAgICAgICAgdGhpcy5wYXJzZUluc3RhbmNlVHJlZShsb2FkQ29udGV4dCwgcGF0aCwgY29udGVudHMsIHZlcnNpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdHMgPT0gMClcbiAgICAgICAgdGhpcy5wb3N0TG9hZChsb2FkQ29udGV4dCk7XG5cbiAgICBkZWxldGUgdGhpcy56aXBQYWNrO1xufTtcblxuUGFja2FnZS5wcm90b3R5cGUuYWRkVHJhbnNwYXJlbmN5RmxhZ3NUb01hdGVyaWFscyA9IGZ1bmN0aW9uKG1hdHMpIHtcbiAgICBmb3IodmFyIGlkIGluIG1hdHMpIHtcbiAgICAgICAgdmFyIG1hdCA9IG1hdHNbaWRdO1xuICAgICAgICB2YXIgdXNlckFzc2V0cyA9IG1hdFtcInVzZXJhc3NldHNcIl07XG4gICAgICAgIHZhciBpbm5lck1hdHMgPSBtYXRbXCJtYXRlcmlhbHNcIl07XG4gICAgICAgIHZhciBpbm5lck1hdCA9IGlubmVyTWF0c1t1c2VyQXNzZXRzWzBdXTtcbiAgICAgICAgbWF0LnRyYW5zcGFyZW50ID0gaW5uZXJNYXRbXCJ0cmFuc3BhcmVudFwiXTtcbiAgICB9XG59O1xuXG5QYWNrYWdlLnByb3RvdHlwZS5wb3N0TG9hZE9mQ2FtID0gZnVuY3Rpb24obG9hZENvbnRleHQpIHtcblxuICAgIC8vQ29tYmluZSBjYW1lcmEgaW5zdGFuY2VzIGFuZCBjYW1lcmEgZGVmaW5pdGlvbnMgLS0gd2UgbmVlZFxuICAgIC8vYm90aCB0byBiZSBsb2FkZWQgdG8gZ2V0IHRoZSBjYW1lcmEgbGlzdFxuICAgIGlmICh0aGlzLmNhbURlZlBhY2sgJiYgdGhpcy5jYW1JbnN0UGFjaykge1xuICAgICAgICBjb25zdCB0bXBDZW50ZXIgPSBuZXcgTG12VmVjdG9yMygpO1xuICAgICAgICBmb3IgKHZhciBrID0gMCwga0VuZCA9IHRoaXMuY2FtSW5zdFBhY2suZ2V0RW50cnlDb3VudHMoKTsgayA8IGtFbmQ7IGsrKykge1xuICAgICAgICAgICAgdmFyIGluc3QgPSByZWFkSW5zdGFuY2UodGhpcy5jYW1JbnN0UGFjaywgaywgdGhpcy5wbGFjZW1lbnRUcmFuc2Zvcm0sIHRoaXMuZ2xvYmFsT2Zmc2V0KTtcbiAgICAgICAgICAgIHZhciBjYW0gPSByZWFkQ2FtZXJhRGVmaW5pdGlvbih0aGlzLmNhbURlZlBhY2ssIGluc3QpO1xuXG4gICAgICAgICAgICAvL0FwcGx5IGFueSBpbnN0YW5jZSB0cmFuc2Zvcm0gdG8gZ2V0IHRoZSBjYW1lcmEgdG8gd29ybGQgc3BhY2UuXG4gICAgICAgICAgICB0cmFuc2Zvcm1DYW1lcmFEYXRhKGNhbSwgaW5zdC50cmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAvLyBGaXggY2FtZXJhJ3MgdGFyZ2V0IGlmIGl0IGlzIG5vdCBpbnNpZGUgdGhlIHNjZW5lJ3MgYm91bmRpbmcgYm94LlxuICAgICAgICAgICAgdmFyIGJib3ggPSB0aGlzLmJib3g7XG4gICAgICAgICAgICBpZiAoYmJveCAmJiAhYmJveC5jb250YWluc1BvaW50KGNhbS50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlRnJvbUNlbnRlciA9IGJib3guZ2V0Q2VudGVyKHRtcENlbnRlcikuZGlzdGFuY2VUbyhjYW0ucG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBuZXcgTG12VmVjdG9yMygpLmNvcHkoY2FtLnRhcmdldCkuc3ViKGNhbS5wb3NpdGlvbikubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoZGlzdGFuY2VGcm9tQ2VudGVyKTsgXG4gICAgICAgICAgICAgICAgY2FtLnRhcmdldCA9IG5ldyBMbXZWZWN0b3IzKCkuY29weShjYW0ucG9zaXRpb24pLmFkZChkaXJlY3Rpb24pOyBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jYW1lcmFzLnB1c2goY2FtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhbURlZlBhY2s7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhbUluc3RQYWNrO1xuICAgIH1cbn07XG5cblBhY2thZ2UucHJvdG90eXBlLnBvc3RMb2FkT2ZPdmVycmlkZVNldHMgPSBmdW5jdGlvbihsb2FkQ29udGV4dCkge1xuICAgIGlmICh0aGlzLm92ZXJyaWRlU2V0c1BhY2spIHtcbiAgICAgICAgZm9yKGxldCBpID0gMCwgaUVuZCA9IHRoaXMub3ZlcnJpZGVTZXRzUGFjay5nZXRFbnRyeUNvdW50cygpOyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZXQgPSByZWFkT3ZlcnJpZGVTZXQodGhpcy5vdmVycmlkZVNldHNQYWNrLCBpKTtcblxuICAgICAgICAgICAgaWYgKHNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVTZXRzLnB1c2goc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLm92ZXJyaWRlU2V0c1BhY2s7XG4gICAgfVxufTtcblxuUGFja2FnZS5wcm90b3R5cGUucG9zdExvYWRPZlZpZXdwb2ludFRyZWUgPSBmdW5jdGlvbihsb2FkQ29udGV4dCkge1xuICAgIGlmICh0aGlzLnZpZXdwb2ludFRyZWVQYWNrKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSByZWFkTmFtZWRJdGVtVHJlZSh0aGlzLnZpZXdwb2ludFRyZWVQYWNrKTtcbiAgICAgICAgdGhpcy52aWV3cG9pbnRUcmVlUm9vdCA9IHJvb3Q7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMudmlld3BvaW50VHJlZVBhY2s7XG4gICAgfVxufTtcblxuUGFja2FnZS5wcm90b3R5cGUucG9zdExvYWRPZlZpZXdwb2ludHMgPSBmdW5jdGlvbihsb2FkQ29udGV4dCkge1xuICAgIGlmICh0aGlzLnZpZXdwb2ludERlZlBhY2sgJiYgdGhpcy5jYW1EZWZQYWNrKSB7XG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGlFbmQgPSB0aGlzLnZpZXdwb2ludERlZlBhY2suZ2V0RW50cnlDb3VudHMoKTsgaSA8IGlFbmQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGVmID0gcmVhZFZpZXdwb2ludERlZmluaXRpb24odGhpcy52aWV3cG9pbnREZWZQYWNrLCB0aGlzLmNhbURlZlBhY2ssIGkpO1xuXG4gICAgICAgICAgICBpZiAoZGVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3cG9pbnRzLnB1c2goZGVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLnZpZXdwb2ludERlZlBhY2s7XG4gICAgfVxufTtcblxuUGFja2FnZS5wcm90b3R5cGUucG9zdExvYWRPZkxpZ2h0ID0gZnVuY3Rpb24obG9hZENvbnRleHQpIHtcblxuICAgIC8vTGlnaHRzIG5lZWQgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIGNhbWVyYXNcbiAgICBpZiAodGhpcy5saWdodERlZlBhY2sgJiYgdGhpcy5saWdodEluc3RQYWNrKSB7XG4gICAgICAgIGZvciAodmFyIGsgPSAwLCBrRW5kID0gdGhpcy5saWdodEluc3RQYWNrLmdldEVudHJ5Q291bnRzKCk7IGsgPCBrRW5kOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBpbnN0ID0gcmVhZEluc3RhbmNlKHRoaXMubGlnaHRJbnN0UGFjaywgaywgdGhpcy5wbGFjZW1lbnRUcmFuc2Zvcm0sIHRoaXMuZ2xvYmFsT2Zmc2V0KTtcbiAgICAgICAgICAgIHRoaXMubGlnaHRzLnB1c2gocmVhZExpZ2h0RGVmaW5pdGlvbih0aGlzLmxpZ2h0RGVmUGFjaywgaW5zdC5kZWZpbml0aW9uKSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy5saWdodEluc3RQYWNrO1xuICAgICAgICBkZWxldGUgdGhpcy5saWdodERlZlBhY2s7XG4gICAgfVxuXG59O1xuXG5QYWNrYWdlLnByb3RvdHlwZS5wb3N0TG9hZE9mRnJhZ21lbnRzID0gZnVuY3Rpb24obG9hZENvbnRleHQpIHtcblxuICAgIC8vUG9zdCBwcm9jZXNzaW5nIHN0ZXAgLS0gc3BsaWNlIGdlb21ldHJ5IG1ldGFkYXRhIGluZm9ybWF0aW9uXG4gICAgLy9pbnRvIHRoZSBmcmFnbWVudHMgbGlzdCwgaW4gY2FzZSBpdCB3YXMgZ2l2ZW4gc2VwYXJhdGVseVxuICAgIC8vVE9ETzogY29uc2lkZXIga2VlcGluZyB0aGUgZ2VvbSBtZXRhZGF0YSBhcyBpcyBpbnN0ZWFkIG9mIHNwbGljaW5nXG4gICAgLy9pbnRvIHRoZSBmcmFnbWVudHMsIGFzIGl0IHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50IC0tXG4gICAgLy9idXQgdGhhdCB3b3VsZCByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgb24gdGhlIHZpZXdlciBzaWRlLFxuICAgIC8vY2hhbmdpbmcgdGhlIGZyYWdtZW50IGZpbHRlciBjb2RlLCBldGMuXG4gICAgdmFyIGZyYWdzID0gdGhpcy5mcmFnbWVudHM7XG5cbiAgICBpZiAodGhpcy5nZW9tTWV0YWRhdGEpIHtcblxuICAgICAgICAvL3JldXNpbmcgdGhlIGdlb21EYXRhSW5kZXhlcyBhcnJheSB0byBzdG9yZVxuICAgICAgICAvL3BvbHlnb24gY291bnRzLCBub3cgdGhhdCB3ZSBkb24ndCBuZWVkIHRoZSBnZW9tSW5kZXhlc1xuICAgICAgICAvL2FmdGVyIHRoaXMgbG9vcC5cbiAgICAgICAgZnJhZ3MucG9seWdvbkNvdW50cyA9IGZyYWdzLmdlb21EYXRhSW5kZXhlcztcblxuICAgICAgICB2YXIgZ20gPSB0aGlzLmdlb21NZXRhZGF0YTtcblxuICAgICAgICAvLyBIb2xkcyB0aGUgaW5kZXhlcyB0byB0aGUgdG9wb2xvZ3kgZGF0YS5cbiAgICAgICAgaWYgKGdtLnRvcG9JbmRleGVzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZnJhZ3MudG9wb0luZGV4ZXMgPSBuZXcgSW50MzJBcnJheShmcmFncy5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaT0gMCwgaUVuZD1mcmFncy5sZW5ndGg7IGk8aUVuZDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZ2VvbUluZGV4ID0gZnJhZ3MuZ2VvbURhdGFJbmRleGVzW2ldO1xuICAgICAgICAgICAgZnJhZ3MuZW50aXR5SW5kZXhlc1tpXSA9IGdtLmVudGl0eUluZGV4ZXNbZ2VvbUluZGV4XTtcbiAgICAgICAgICAgIGZyYWdzLnBhY2tJZHNbaV0gPSBnbS5wYWNrSWRzW2dlb21JbmRleF07XG5cbiAgICAgICAgICAgIGZyYWdzLnBvbHlnb25Db3VudHNbaV0gPSBnbS5wcmltQ291bnRzW2dlb21JbmRleF07XG4gICAgICAgICAgICB0aGlzLnByaW1pdGl2ZUNvdW50ICs9IGdtLnByaW1Db3VudHNbZ2VvbUluZGV4XTtcblxuICAgICAgICAgICAgLy8gRmlsbHMgaW4gdGhlIGluZGV4ZXMgdG8gdGhlIHRvcG9sb2d5IGRhdGEuXG4gICAgICAgICAgICBpZiAoZ20udG9wb0luZGV4ZXMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZnJhZ3MudG9wb0luZGV4ZXNbaV0gPSBnbS50b3BvSW5kZXhlc1tnZW9tSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnJhZ3MuZ2VvbURhdGFJbmRleGVzID0gbnVsbDtcblxuICAgICAgICB0aGlzLmdlb21NZXRhZGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy9CdWlsZCBhIG1hcCBmcm9tIG1lc2ggdG8gaXRzIHJlZmVyZW5jaW5nIGZyYWdtZW50KHMpXG4gICAgLy9TbyB0aGF0IHdlIGNhbiBxdWlja2x5IGZpbmQgdGhlbSBvbmNlIG1lc2hlcyBiZWdpbiBsb2FkaW5nXG4gICAgLy9pbmNyZW1lbnRhbGx5LiBUaGlzIHJlcXVpcmVzIHRoZSBwYWNrSWRzIGFuZCBlbnRpdHlJbmRleGVzXG4gICAgLy90byBiZSBrbm93biBwZXIgZnJhZ21lbnQsIHNvIGl0IGhhcHBlbnMgYWZ0ZXIgZ2VvbWV0cnkgbWV0YWRhdGFcbiAgICAvL2lzIHJlc29sdmVkIGFib3ZlXG4gICAgdGhpcy5jYWxjdWxhdGVNZXNoMkZyYWcoZnJhZ3MpO1xufTtcblxuUGFja2FnZS5wcm90b3R5cGUuY2FsY3VsYXRlTWVzaDJGcmFnID0gZnVuY3Rpb24oZnJhZ3MpIHtcbiAgICB2YXIgbWVzaDJmcmFnID0gZnJhZ3MubWVzaDJmcmFnID0ge307XG4gICAgdmFyIHBhY2tJZHMgPSBmcmFncy5wYWNrSWRzO1xuICAgIHZhciBlbnRpdHlJbmRleGVzID0gZnJhZ3MuZW50aXR5SW5kZXhlcztcblxuICAgIGZvciAodmFyIGk9IDAsIGlFbmQ9ZnJhZ3MubGVuZ3RoOyBpPGlFbmQ7IGkrKykge1xuICAgICAgICB2YXIgbWVzaGlkID0gcGFja0lkc1tpXSArIFwiOlwiICsgZW50aXR5SW5kZXhlc1tpXTtcblxuICAgICAgICB2YXIgbWVzaFJlZnMgPSBtZXNoMmZyYWdbbWVzaGlkXTtcbiAgICAgICAgaWYgKG1lc2hSZWZzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vSWYgaXQncyB0aGUgZmlyc3QgZnJhZ21lbnRzIGZvciB0aGlzIG1lc2gsXG4gICAgICAgICAgICAvL3N0b3JlIHRoZSBpbmRleCBkaXJlY3RseSAtLSBtb3N0IGNvbW1vbiBjYXNlLlxuICAgICAgICAgICAgbWVzaDJmcmFnW21lc2hpZF0gPSBpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1lc2hSZWZzKSkge1xuICAgICAgICAgICAgLy9vdGhlcndpc2UgcHV0IHRoZSBmcmFnbWVudHMgdGhhdFxuICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIG1lc2ggaW50byBhbiBhcnJheVxuICAgICAgICAgICAgbWVzaDJmcmFnW21lc2hpZF0gPSBbbWVzaFJlZnMsIGldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy9hbHJlYWR5IGlzIGFuIGFycmF5XG4gICAgICAgICAgICBtZXNoUmVmcy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuUGFja2FnZS5wcm90b3R5cGUucG9zdExvYWRPZkJCb3ggPSBmdW5jdGlvbihsb2FkQ29udGV4dCkge1xuXG4gICAgLy9pZiB3ZSBkb24ndCBrbm93IHRoZSBvdmVyYWxsIHNjZW5lIGJvdW5kcywgY29tcHV0ZSB0aGVtIGZyb20gdGhlXG4gICAgLy9mcmFnbWVudCBib3hlc1xuICAgIGlmICghdGhpcy5iYm94IHx8IGxvYWRDb250ZXh0LnBsYWNlbWVudFRyYW5zZm9ybSkge1xuXG4gICAgICAgIHZhciB0b3RhbGJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICAgICAgdmFyIGZyYWdzID0gdGhpcy5mcmFnbWVudHM7XG4gICAgICAgIHZhciBmcmFnQm94ZXMgPSBmcmFncy5ib3hlcztcblxuICAgICAgICBmb3IgKHZhciBmPSAwLCBmRW5kPWZyYWdzLmxlbmd0aDsgZjxmRW5kOyBmKyspIHtcbiAgICAgICAgICAgIHZhciBiYm9mZiA9IGYqNjtcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpPTA7IGk8MzsgaSsrKVxuICAgICAgICAgICAgICAgIGlmIChmcmFnQm94ZXNbYmJvZmYraV0gPCB0b3RhbGJveFtpXSlcbiAgICAgICAgICAgICAgICAgICAgdG90YWxib3hbaV0gPSBmcmFnQm94ZXNbYmJvZmYraV07XG5cbiAgICAgICAgICAgIGZvciAoaT0zOyBpPDY7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoZnJhZ0JveGVzW2Jib2ZmK2ldID4gdG90YWxib3hbaV0pXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsYm94W2ldID0gZnJhZ0JveGVzW2Jib2ZmK2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5iYm94ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiB7IHg6dG90YWxib3hbMF0sIHk6dG90YWxib3hbMV0sIHo6dG90YWxib3hbMl19LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiB7IHg6dG90YWxib3hbM10sIHk6dG90YWxib3hbNF0sIHo6dG90YWxib3hbNV19XG4gICAgICAgICAgICAgICAgICAgICB9O1xuICAgIH1cblxuXG59O1xuXG5QYWNrYWdlLnByb3RvdHlwZS5wb3N0TG9hZE9mT2JqZWN0SWRzID0gZnVuY3Rpb24obG9hZENvbnRleHQpIHtcblxuICAgIC8vIElmIG9iamVjdCBpZHMgYXJlIHNwZWNpZmllZCwgY2xlYW4gdXAgcGFjayBmaWxlIGxpc3QgYnkgb25seSBrZWVwaW5nIHRoZSBwYWNrcyB0aGF0J3NcbiAgICAvLyB3ZSBpbnRlbmRlZCB0byBsb2FkLlxuICAgIGxldCBpZHMgPSBuZXcgU2V0KGxvYWRDb250ZXh0Lm9iamVjdElkcyk7XG4gICAgaWYgKGlkcy5zaXplID4gMCkge1xuICAgICAgICBsZXQgcGFja0lkcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgbGV0IGZyYWdJZHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIC8vIFBpY2sgb3V0IHBhY2sgaWRzIHRoYXQgcmVmZXJlbmNlZCBieSBmcmFnbWVudHMgd2l0aCBzcGVjaWZpZWQgZGIgaWRzLlxuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5mcmFnbWVudHMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIGlmIChpZHMuaGFzKHRoaXMuZnJhZ21lbnRzLmZyYWdJZDJkYklkW2pdKSkge1xuICAgICAgICAgICAgICAgIHBhY2tJZHMuYWRkKHRoaXMuZnJhZ21lbnRzLnBhY2tJZHNbal0pO1xuICAgICAgICAgICAgICAgIGZyYWdJZHMuYWRkKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVkdWNlIHBhY2sgZmlsZXMgYmFzZWQgb24gc2VsZWN0ZWQgcGFjayBpZHMuXG4gICAgICAgIGxldCBwYWNrcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdlb21wYWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgLy8gTE1WVEsgcHJlLTIuMCByZWxlYXNlIHVzZXMgaW50ZWdlcnMgZm9yIHBhY2sgZmlsZSBpZC5cbiAgICAgICAgICAgIC8vIExNVlRLIDIuMCByZWxlYXNlIHVzZXMgaW50ZWdlciArIC5wZiBhcyBpZC5cbiAgICAgICAgICAgIC8vIFdlIGp1c3QgZHJvcCB0aGUgc3VmZml4IGhlcmUgYXMgd2UgZGlkIGluIFNWRkxvYWRlci5cbiAgICAgICAgICAgIC8vIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuYXV0b2Rlc2suY29tL0EzNjAvTE1WVEsvY29tbWl0LzY4YjhjMDdhNjQzYTdhYzM5ZWNkNTY1MWQwMzFkMTcwZTNhMzI1YmVcbiAgICAgICAgICAgIGlmIChwYWNrSWRzLmhhcyhwYXJzZUludCh0aGlzLmdlb21wYWNrc1tpXS5pZCkpKSB7XG4gICAgICAgICAgICAgICAgcGFja3MuYWRkKHRoaXMuZ2VvbXBhY2tzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlb21wYWNrcyA9IFsuLi5wYWNrc107XG5cbiAgICAgICAgbGV0IGJiID0gZmlsdGVyRnJhZ21lbnRzKHRoaXMuZnJhZ21lbnRzLCBbLi4uZnJhZ0lkc10pO1xuICAgICAgICB0aGlzLmJib3ggPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IHsgeDpiYlswXSwgeTpiYlsxXSwgejpiYlsyXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiB7IHg6YmJbM10sIHk6YmJbNF0sIHo6YmJbNV19XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgfVxuXG59O1xuXG5QYWNrYWdlLnByb3RvdHlwZS5wb3N0TG9hZEJ1YmJsZUNvbnNvbGlkYXRpb24gPSBmdW5jdGlvbigpIHtcblxuICAgIGNvbnN0IHZ0ciA9IHRoaXMudmlld3BvaW50VHJlZVJvb3Q7XG5cbiAgICBpZiAodnRyKSB7XG4gICAgICAgIHZ0ci5uYW1lID0gdnRyLm5hbWUgfHwgJ1NhdmVkIFZpZXdwb2ludHMnO1xuICAgIH1cblxuICAgIGlmICghdnRyPy5jaGlsZHJlbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG9yZGVyID0gMDtcbiAgICBmdW5jdGlvbiB0cmF2ZXJzZUJ1YmJsZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0cmF2ZXJzZUJ1YmJsZShub2RlLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUudHlwZSA9ICdmb2xkZXInO1xuICAgICAgICAgICAgbm9kZS5yb2xlID0gJ3ZpZXdhYmxlJztcbiAgICAgICAgICAgIG5vZGUuZ3VpZCA9IG9yZGVyKysgKyAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4obm9kZS5lbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBub2RlLm9yZGVyID0gb3JkZXI7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbm9kZS50eXBlID0gJ3ZpZXcnO1xuICAgICAgICAgICAgICAgIG5vZGUucm9sZSA9ICczZCc7XG4gICAgICAgICAgICAgICAgbm9kZS5ndWlkID0gb3JkZXIrKyArICcnO1xuICAgICAgICAgICAgICAgIG5vZGUuaXNWaWV3cG9pbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZ0ci5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0cmF2ZXJzZUJ1YmJsZSh2dHIuY2hpbGRyZW5baV0pO1xuICAgIH1cbn07XG5cblBhY2thZ2UucHJvdG90eXBlLnBvc3RMb2FkQ29tcGxldGUgPSBmdW5jdGlvbihsb2FkQ29udGV4dCkge1xuXG4gICAgbG9hZENvbnRleHQubG9hZERvbmVDQihcInN2ZlwiKTtcblxuICAgIGlmICh0aGlzLmZyYWdtZW50cy5wb2x5Z29uQ291bnRzKSB7XG4gICAgICAgIC8vQnVpbGQgdGhlIFItVHJlZVxuICAgICAgICB2YXIgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgdmFyIG1hdHMgPSB0aGlzLm1hdGVyaWFscyA/IHRoaXMubWF0ZXJpYWxzW1wibWF0ZXJpYWxzXCJdIDogbnVsbDtcbiAgICAgICAgaWYgKG1hdHMpXG4gICAgICAgICAgICB0aGlzLmFkZFRyYW5zcGFyZW5jeUZsYWdzVG9NYXRlcmlhbHMobWF0cyk7XG4gICAgICAgIHRoaXMuYnZoID0gbmV3IEJWSEJ1aWxkZXIodGhpcy5mcmFnbWVudHMsIG1hdHMpO1xuICAgICAgICB0aGlzLmJ2aC5idWlsZChsb2FkQ29udGV4dC5idmhPcHRpb25zKTtcbiAgICAgICAgdmFyIHQxID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGxvYWRDb250ZXh0Lndvcmtlci5kZWJ1ZyhcIkJWSCBidWlsZCB0aW1lICh3b3JrZXIgdGhyZWFkKTpcIiArICh0MSAtIHQwKSk7XG5cbiAgICAgICAgLy8gSW4gbm9ybWFsIG1vZGUsIGp1c3QgcG9zdCBiYWNrIEJWSCBhcyBzdmYgaXMgYWxyZWFkeSBwb3N0ZWQgYmFjayBlYXJsaWVyLlxuICAgICAgICBsb2FkQ29udGV4dC5sb2FkRG9uZUNCKFwiYnZoXCIpO1xuICAgIH1cblxuICAgIGxvYWRDb250ZXh0LmxvYWREb25lQ0IoXCJkb25lXCIpO1xufTtcblxuUGFja2FnZS5wcm90b3R5cGUucG9zdExvYWQgPSBmdW5jdGlvbihsb2FkQ29udGV4dCkge1xuXG4gICAgdHJhbnNmb3JtQW5pbWF0aW9ucyh0aGlzKTtcblxuICAgIC8vIFRPRE86IHRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byB0YWtlIHF1aXRlIGFcbiAgICAvLyAgICAgICB3aGlsZSBpZiBpdCBoYXMgbG90cyBvZiBkYXRhIHRvIGxvYWQuXG4gICAgLy8gICAgICAgbWF5YmUgbW92ZSB0byBhIGJhY2tncm91bmQgdGhyZWFkP1xuICAgIHRoaXMucG9zdExvYWRPZk92ZXJyaWRlU2V0cyhsb2FkQ29udGV4dCk7XG5cbiAgICB0aGlzLnBvc3RMb2FkT2ZWaWV3cG9pbnRzKGxvYWRDb250ZXh0KTtcblxuICAgIHRoaXMucG9zdExvYWRPZlZpZXdwb2ludFRyZWUobG9hZENvbnRleHQpO1xuXG4gICAgdGhpcy5wb3N0TG9hZE9mQ2FtKGxvYWRDb250ZXh0KTtcblxuICAgIHRoaXMucG9zdExvYWRPZkxpZ2h0KGxvYWRDb250ZXh0KTtcblxuICAgIHRoaXMucG9zdExvYWRPZkZyYWdtZW50cyhsb2FkQ29udGV4dCk7XG5cbiAgICB0aGlzLnBvc3RMb2FkT2ZCQm94KGxvYWRDb250ZXh0KTtcblxuICAgIHRoaXMucG9zdExvYWRPZk9iamVjdElkcyhsb2FkQ29udGV4dCk7XG4gICAgXG4gICAgdGhpcy5wb3N0TG9hZEJ1YmJsZUNvbnNvbGlkYXRpb24oKTtcblxuICAgIHRoaXMucG9zdExvYWRDb21wbGV0ZShsb2FkQ29udGV4dCk7XG59O1xuIl0sIm5hbWVzIjpbImlzTW9iaWxlRGV2aWNlIiwiQlZIQnVpbGRlciIsIkxtdlZlY3RvcjMiLCJWaWV3aW5nU2VydmljZSIsIklucHV0U3RyZWFtIiwiUGFja0ZpbGVSZWFkZXIiLCJGcmFnTGlzdCIsInJlYWRGcmFnbWVudHMiLCJyZWFkR2VvbWV0cnlNZXRhZGF0YSIsImZpbHRlckZyYWdtZW50cyIsInJlYWRJbnN0YW5jZSIsInJlYWRJbnN0YW5jZVRyZWUiLCJpbml0UGxhY2VtZW50IiwidHJhbnNmb3JtQW5pbWF0aW9ucyIsImNhbGN1bGF0ZVBsYWNlbWVudFdpdGhPZmZzZXQiLCJ0cmFuc2Zvcm1DYW1lcmFEYXRhIiwicmVhZENhbWVyYURlZmluaXRpb24iLCJyZWFkTGlnaHREZWZpbml0aW9uIiwicmVhZE5hbWVkSXRlbVRyZWUiLCJyZWFkVmlld3BvaW50RGVmaW5pdGlvbiIsInJlYWRPdmVycmlkZVNldCIsInVuemlwU3luYyIsImdldFNpbmdsZUZpbGVGcm9tWmlwIiwiemlwIiwiZmlsZW5hbWUiLCJ1bnppcHBlZCIsImZpbHRlciIsImZpbGVpbmZvIiwibmFtZSIsIkVycm9yIiwiUGFja2FnZSIsInppcFBhY2siLCJtYW5pZmVzdCIsIm1hdGVyaWFscyIsIm1ldGFkYXRhIiwiZnJhZ21lbnRzIiwiZ2VvbXBhY2tzIiwiaW5zdGFuY2VzIiwiY2FtZXJhcyIsImxpZ2h0cyIsInZpZXdwb2ludHMiLCJvdmVycmlkZVNldHMiLCJwcm9wZXJ0eWRiIiwiYXR0cnMiLCJhdnMiLCJpZHMiLCJ2YWx1ZXMiLCJvZmZzZXRzIiwiYmJveCIsImFuaW1hdGlvbnMiLCJwZW5kaW5nUmVxdWVzdHMiLCJnbG9iYWxPZmZzZXQiLCJ4IiwieSIsInoiLCJ0b3BvbG9neVBhdGgiLCJwcm90b3R5cGUiLCJsb2FkQXN5bmNSZXNvdXJjZSIsImxvYWRDb250ZXh0IiwicmVzb3VyY2VQYXRoIiwiY29udGVudHMiLCJjYWxsYmFjayIsInN2ZiIsInhockNCIiwicmVzcG9uc2VEYXRhIiwicG9zdExvYWQiLCJnZXRJdGVtIiwiYmFzZVBhdGgiLCJvbkZhaWx1cmVDYWxsYmFjayIsImxvYWRNYW5pZmVzdCIsIm1hbmlmZXN0SnNvbiIsImpkciIsIkpTT04iLCJwYXJzZSIsImdldFN0cmluZyIsImJ5dGVMZW5ndGgiLCJhcHBseUxhcmdlQm94T2Zmc2V0Iiwib2Zmc2V0IiwiaXNFbXB0eSIsInRyYW5zbGF0ZSIsInZlcnlsYXJnZWJib3giLCJjb3B5IiwicGxhY2VtZW50VHJhbnNmb3JtIiwicGFyc2VGcmFnbWVudExpc3QiLCJhc3NldCIsInBhdGgiLCJzZWxmIiwiZGF0YSIsInBmciIsImZyYWdzIiwiZnJhZ21lbnRUcmFuc2Zvcm1zRG91YmxlIiwidW5kZWZpbmVkIiwicGFyc2VHZW9tZXRyeU1ldGFkYXRhIiwiZ2VvbU1ldGFkYXRhIiwibnVtR2VvbXMiLCJwcmltQ291bnRzIiwibGVuZ3RoIiwicGFyc2VJbnN0YW5jZVRyZWUiLCJ2ZXJzaW9uIiwidGhhdCIsImluc3RhbmNlVHJhbnNmb3JtcyIsImxvYWRSZW1haW5pbmdTdmYiLCJhc3NldHMiLCJtZXRhZGF0YUpzb24iLCJwYWNrRmlsZVRvdGFsU2l6ZSIsInByaW1pdGl2ZUNvdW50IiwidHlwZXNldHNMaXN0IiwidHlwZXNldHMiLCJpIiwidHMiLCJpZCIsInR5cGUiLCJpbmRleE9mIiwic3Vic3RyIiwidXJpIiwidHlwZXNldCIsInVzaXplIiwibWVnYUJ5dGVzIiwiTWF0aCIsInJvdW5kIiwidHlwZWNsYXNzIiwicHVzaCIsInByb3RlaW5NYXRlcmlhbHMiLCJlIiwiYW5zaSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNvbnNvbGUiLCJlcnJvciIsInN0ckNvbnRlbnQiLCJzdGRTdXJmTWF0cyIsIm10bHgiLCJjYW1EZWZQYWNrIiwiY2FtSW5zdFBhY2siLCJsaWdodERlZlBhY2siLCJsaWdodEluc3RQYWNrIiwib3ZlcnJpZGVTZXRzUGFjayIsInZpZXdwb2ludERlZlBhY2siLCJ2aWV3cG9pbnRUcmVlUGFjayIsInRvcG9sb2d5U2l6ZU1CIiwibG9hZEluc3RhbmNlVHJlZSIsImFkZFRyYW5zcGFyZW5jeUZsYWdzVG9NYXRlcmlhbHMiLCJtYXRzIiwibWF0IiwidXNlckFzc2V0cyIsImlubmVyTWF0cyIsImlubmVyTWF0IiwidHJhbnNwYXJlbnQiLCJwb3N0TG9hZE9mQ2FtIiwidG1wQ2VudGVyIiwiayIsImtFbmQiLCJnZXRFbnRyeUNvdW50cyIsImluc3QiLCJjYW0iLCJ0cmFuc2Zvcm0iLCJjb250YWluc1BvaW50IiwidGFyZ2V0IiwiZGlzdGFuY2VGcm9tQ2VudGVyIiwiZ2V0Q2VudGVyIiwiZGlzdGFuY2VUbyIsInBvc2l0aW9uIiwiZGlyZWN0aW9uIiwic3ViIiwibm9ybWFsaXplIiwibXVsdGlwbHlTY2FsYXIiLCJhZGQiLCJwb3N0TG9hZE9mT3ZlcnJpZGVTZXRzIiwiaUVuZCIsInNldCIsInBvc3RMb2FkT2ZWaWV3cG9pbnRUcmVlIiwicm9vdCIsInZpZXdwb2ludFRyZWVSb290IiwicG9zdExvYWRPZlZpZXdwb2ludHMiLCJkZWYiLCJwb3N0TG9hZE9mTGlnaHQiLCJkZWZpbml0aW9uIiwicG9zdExvYWRPZkZyYWdtZW50cyIsInBvbHlnb25Db3VudHMiLCJnZW9tRGF0YUluZGV4ZXMiLCJnbSIsInRvcG9JbmRleGVzIiwiSW50MzJBcnJheSIsImdlb21JbmRleCIsImVudGl0eUluZGV4ZXMiLCJwYWNrSWRzIiwiY2FsY3VsYXRlTWVzaDJGcmFnIiwibWVzaDJmcmFnIiwibWVzaGlkIiwibWVzaFJlZnMiLCJBcnJheSIsImlzQXJyYXkiLCJwb3N0TG9hZE9mQkJveCIsInRvdGFsYm94IiwiSW5maW5pdHkiLCJmcmFnQm94ZXMiLCJib3hlcyIsImYiLCJmRW5kIiwiYmJvZmYiLCJtaW4iLCJtYXgiLCJwb3N0TG9hZE9mT2JqZWN0SWRzIiwiU2V0Iiwib2JqZWN0SWRzIiwic2l6ZSIsImZyYWdJZHMiLCJqIiwiaGFzIiwiZnJhZ0lkMmRiSWQiLCJwYWNrcyIsInBhcnNlSW50IiwiYmIiLCJwb3N0TG9hZEJ1YmJsZUNvbnNvbGlkYXRpb24iLCJ2dHIiLCJjaGlsZHJlbiIsIm9yZGVyIiwidHJhdmVyc2VCdWJibGUiLCJub2RlIiwicm9sZSIsImd1aWQiLCJpc05hTiIsImVudHJ5IiwiaXNWaWV3cG9pbnQiLCJwb3N0TG9hZENvbXBsZXRlIiwibG9hZERvbmVDQiIsInQwIiwicGVyZm9ybWFuY2UiLCJub3ciLCJidmgiLCJidWlsZCIsImJ2aE9wdGlvbnMiLCJ0MSIsIndvcmtlciIsImRlYnVnIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/svf/Package.js\n "); /***/ }), /***/ "./src/file-loaders/net/ErrorCodes.js ": /*!********************************************!*\ !*** ./src/file-loaders/net/ErrorCodes.js ***! \********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ErrorCodes: ()=> (/* binding */ ErrorCodes),\n/* harmony export */ errorCodeString: () => (/* binding */ errorCodeString),\n/* harmony export */ getErrorCode: () => (/* binding */ getErrorCode)\n/* harmony export */ });\n\n/**\n * Error code constants\n * These constants will be used in {@link Callbacks#onGenericError} functions.\n *\n * @namespace Autodesk.Viewing.ErrorCodes\n */\nconst ErrorCodes = {\n /** \n * An unknown failure has occurred. \n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n UNKNOWN_FAILURE: 1,\n\n /** \n * Bad data (corrupted or malformed) was encountered. \n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n BAD_DATA: 2,\n\n /** \n * A network failure was encountered. \n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n NETWORK_FAILURE: 3,\n\n /** \n * Access was denied to a network resource (HTTP 403)\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n NETWORK_ACCESS_DENIED: 4,\n\n /** \n * A network resource could not be found (HTTP 404)\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n NETWORK_FILE_NOT_FOUND: 5,\n\n /** \n * A server error was returned when accessing a network resource (HTTP 5xx)\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n NETWORK_SERVER_ERROR: 6,\n\n /** \n * An unhandled response code was returned when accessing a network resource (HTTP 'everything else')\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n NETWORK_UNHANDLED_RESPONSE_CODE: 7,\n\n /** \n * Browser error = webGL is not supported by the current browser\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n BROWSER_WEBGL_NOT_SUPPORTED: 8,\n\n /** \n * There is nothing viewable in the fetched document \n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n BAD_DATA_NO_VIEWABLE_CONTENT: 9,\n\n /** \n * Browser error = webGL is supported, but not enabled \n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n BROWSER_WEBGL_DISABLED: 10,\n\n /**\n * There is no geometry in loaded model\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n BAD_DATA_MODEL_IS_EMPTY: 11,\n\n /** \n * The extension of the loaded file is not supported \n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n UNSUPORTED_FILE_EXTENSION: 13,\n\n /** \n * Viewer error: wrong or forbidden usage of the viewer\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes\n * @type {number}\n */\n VIEWER_INTERNAL_ERROR: 14,\n\n /** \n * WebGL error while loading a model, typically due to IE11 limitations\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes \n * @type {number}\n */\n WEBGL_LOST_CONTEXT: 15,\n\n /** \n * Viewer error because loading a resource was canceled\n *\n * @constant\n * @memberof Autodesk.Viewing.ErrorCodes \n * @type {number}\n */\n LOAD_CANCELED: 16\n};\n\n/**\n * Formatted error message\n * @param {number} errorCode - Error code\n * @returns {string} - Error message\n * @alias Autodesk.Viewing.errorCodeString\n * @private\n */\nfunction errorCodeString(errorCode) {\n return \"ErrorCode:\" + errorCode + \".\";\n}\n\n/**\n * Get ErrorCodes enum from http status code\n * @param {number} networkStatus - HTTP status code\n * @returns {number} - Autodesk.Viewing.ErrorCodes enum\n * @alias Autodesk.Viewing.getErrorCode\n * @private\n */\nfunction getErrorCode(networkStatus)\n{\n if (networkStatus === 403 || networkStatus === 401)\n {\n return ErrorCodes.NETWORK_ACCESS_DENIED;\n } else\n if (networkStatus === 404)\n {\n return ErrorCodes.NETWORK_FILE_NOT_FOUND;\n } else\n if (networkStatus >= 500)\n {\n return ErrorCodes.NETWORK_SERVER_ERROR;\n }\n\n return ErrorCodes.NETWORK_UNHANDLED_RESPONSE_CODE;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL25ldC9FcnJvckNvZGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQSxVQUFVLEdBQUc7RUFDdEI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsZUFBZSxFQUFHLENBQUM7O0VBRW5CO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0lDLFFBQVEsRUFBRyxDQUFDOztFQUVaO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0lDLGVBQWUsRUFBRyxDQUFDOztFQUVuQjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxxQkFBcUIsRUFBRyxDQUFDOztFQUV6QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxzQkFBc0IsRUFBRyxDQUFDOztFQUUxQjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxvQkFBb0IsRUFBRyxDQUFDOztFQUV4QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQywrQkFBK0IsRUFBRyxDQUFDOztFQUVuQztBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQywyQkFBMkIsRUFBRyxDQUFDOztFQUUvQjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyw0QkFBNEIsRUFBRyxDQUFDOztFQUVoQztBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxzQkFBc0IsRUFBRyxFQUFFOztFQUUzQjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyx1QkFBdUIsRUFBRyxFQUFFOztFQUU1QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyx5QkFBeUIsRUFBRyxFQUFFOztFQUU5QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxxQkFBcUIsRUFBRyxFQUFFOztFQUUxQjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxrQkFBa0IsRUFBRSxFQUFFOztFQUV0QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJQyxhQUFhLEVBQUU7QUFDbkIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLGVBQWVBLENBQUNDLFNBQVMsRUFBRTtFQUN2QyxPQUFPLFlBQVksR0FBR0EsU0FBUyxHQUFHLEdBQUc7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxZQUFZQSxDQUFFQyxhQUFhO0FBQzNDO0VBQ0ksSUFBTUEsYUFBYSxLQUFLLEdBQUcsSUFBT0EsYUFBYSxLQUFLLEdBQUk7RUFDeEQ7SUFDSSxPQUFPbkIsVUFBVSxDQUFDSSxxQkFBcUI7RUFDM0MsQ0FBQztFQUNJLElBQUllLGFBQWEsS0FBSyxHQUFHO0VBQzlCO0lBQ0ksT0FBT25CLFVBQVUsQ0FBQ0ssc0JBQXNCO0VBQzVDLENBQUM7RUFDSSxJQUFJYyxhQUFhLElBQUksR0FBRztFQUM3QjtJQUNJLE9BQU9uQixVQUFVLENBQUNNLG9CQUFvQjtFQUMxQzs7RUFFQSxPQUFPTixVQUFVLENBQUNPLCtCQUErQjtBQUNyRCIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvbmV0L0Vycm9yQ29kZXMuanM/MDk2NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogRXJyb3IgY29kZSBjb25zdGFudHNcbiAqIFRoZXNlIGNvbnN0YW50cyB3aWxsIGJlIHVzZWQgaW4ge0BsaW5rIENhbGxiYWNrcyNvbkdlbmVyaWNFcnJvcn0gZnVuY3Rpb25zLlxuICpcbiAqIEBuYW1lc3BhY2UgQXV0b2Rlc2suVmlld2luZy5FcnJvckNvZGVzXG4gKi9cbmV4cG9ydCBjb25zdCBFcnJvckNvZGVzID0ge1xuICAgIC8qKiBcbiAgICAgKiBBbiB1bmtub3duIGZhaWx1cmUgaGFzIG9jY3VycmVkLiBcbiAgICAgKlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBtZW1iZXJvZiBBdXRvZGVzay5WaWV3aW5nLkVycm9yQ29kZXNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIFVOS05PV05fRkFJTFVSRSA6IDEsXG5cbiAgICAvKiogXG4gICAgICogQmFkIGRhdGEgKGNvcnJ1cHRlZCBvciBtYWxmb3JtZWQpIHdhcyBlbmNvdW50ZXJlZC4gXG4gICAgICpcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAbWVtYmVyb2YgQXV0b2Rlc2suVmlld2luZy5FcnJvckNvZGVzXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBCQURfREFUQSA6IDIsXG5cbiAgICAvKiogXG4gICAgICogQSBuZXR3b3JrIGZhaWx1cmUgd2FzIGVuY291bnRlcmVkLiBcbiAgICAgKlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBtZW1iZXJvZiBBdXRvZGVzay5WaWV3aW5nLkVycm9yQ29kZXNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIE5FVFdPUktfRkFJTFVSRSA6IDMsXG5cbiAgICAvKiogXG4gICAgICogQWNjZXNzIHdhcyBkZW5pZWQgdG8gYSBuZXR3b3JrIHJlc291cmNlIChIVFRQIDQwMylcbiAgICAgKlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBtZW1iZXJvZiBBdXRvZGVzay5WaWV3aW5nLkVycm9yQ29kZXNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIE5FVFdPUktfQUNDRVNTX0RFTklFRCA6IDQsXG5cbiAgICAvKiogXG4gICAgICogQSBuZXR3b3JrIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCAoSFRUUCA0MDQpXG4gICAgICpcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAbWVtYmVyb2YgQXV0b2Rlc2suVmlld2luZy5FcnJvckNvZGVzXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBORVRXT1JLX0ZJTEVfTk9UX0ZPVU5EIDogNSxcblxuICAgIC8qKiBcbiAgICAgKiBBIHNlcnZlciBlcnJvciB3YXMgcmV0dXJuZWQgd2hlbiBhY2Nlc3NpbmcgYSBuZXR3b3JrIHJlc291cmNlIChIVFRQIDV4eClcbiAgICAgKlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBtZW1iZXJvZiBBdXRvZGVzay5WaWV3aW5nLkVycm9yQ29kZXNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIE5FVFdPUktfU0VSVkVSX0VSUk9SIDogNixcblxuICAgIC8qKiBcbiAgICAgKiBBbiB1bmhhbmRsZWQgcmVzcG9uc2UgY29kZSB3YXMgcmV0dXJuZWQgd2hlbiBhY2Nlc3NpbmcgYSBuZXR3b3JrIHJlc291cmNlIChIVFRQICdldmVyeXRoaW5nIGVsc2UnKVxuICAgICAqXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQG1lbWJlcm9mIEF1dG9kZXNrLlZpZXdpbmcuRXJyb3JDb2Rlc1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgTkVUV09SS19VTkhBTkRMRURfUkVTUE9OU0VfQ09ERSA6IDcsXG5cbiAgICAvKiogXG4gICAgICogQnJvd3NlciBlcnJvciA9IHdlYkdMIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3NlclxuICAgICAqXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQG1lbWJlcm9mIEF1dG9kZXNrLlZpZXdpbmcuRXJyb3JDb2Rlc1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgQlJPV1NFUl9XRUJHTF9OT1RfU1VQUE9SVEVEIDogOCxcblxuICAgIC8qKiBcbiAgICAgKiBUaGVyZSBpcyBub3RoaW5nIHZpZXdhYmxlIGluIHRoZSBmZXRjaGVkIGRvY3VtZW50IFxuICAgICAqXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQG1lbWJlcm9mIEF1dG9kZXNrLlZpZXdpbmcuRXJyb3JDb2Rlc1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgQkFEX0RBVEFfTk9fVklFV0FCTEVfQ09OVEVOVCA6IDksXG5cbiAgICAvKiogXG4gICAgICogQnJvd3NlciBlcnJvciA9IHdlYkdMIGlzIHN1cHBvcnRlZCwgYnV0IG5vdCBlbmFibGVkIFxuICAgICAqXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQG1lbWJlcm9mIEF1dG9kZXNrLlZpZXdpbmcuRXJyb3JDb2Rlc1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgQlJPV1NFUl9XRUJHTF9ESVNBQkxFRCA6IDEwLFxuXG4gICAgLyoqXG4gICAgICogVGhlcmUgaXMgbm8gZ2VvbWV0cnkgaW4gbG9hZGVkIG1vZGVsXG4gICAgICpcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAbWVtYmVyb2YgQXV0b2Rlc2suVmlld2luZy5FcnJvckNvZGVzXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBCQURfREFUQV9NT0RFTF9JU19FTVBUWSA6IDExLFxuXG4gICAgLyoqIFxuICAgICAqIFRoZSBleHRlbnNpb24gb2YgdGhlIGxvYWRlZCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQgXG4gICAgICpcbiAgICAgKiBAY29uc3RhbnRcbiAgICAgKiBAbWVtYmVyb2YgQXV0b2Rlc2suVmlld2luZy5FcnJvckNvZGVzXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBVTlNVUE9SVEVEX0ZJTEVfRVhURU5TSU9OIDogMTMsXG5cbiAgICAvKiogXG4gICAgICogVmlld2VyIGVycm9yOiB3cm9uZyBvciBmb3JiaWRkZW4gdXNhZ2Ugb2YgdGhlIHZpZXdlclxuICAgICAqXG4gICAgICogQGNvbnN0YW50XG4gICAgICogQG1lbWJlcm9mIEF1dG9kZXNrLlZpZXdpbmcuRXJyb3JDb2Rlc1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgVklFV0VSX0lOVEVSTkFMX0VSUk9SIDogMTQsXG5cbiAgICAvKiogXG4gICAgICogV2ViR0wgZXJyb3Igd2hpbGUgbG9hZGluZyBhIG1vZGVsLCB0eXBpY2FsbHkgZHVlIHRvIElFMTEgbGltaXRhdGlvbnNcbiAgICAgKlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBtZW1iZXJvZiBBdXRvZGVzay5WaWV3aW5nLkVycm9yQ29kZXMgXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBXRUJHTF9MT1NUX0NPTlRFWFQ6IDE1LFxuXG4gICAgLyoqIFxuICAgICAqIFZpZXdlciBlcnJvciBiZWNhdXNlIGxvYWRpbmcgYSByZXNvdXJjZSB3YXMgY2FuY2VsZWRcbiAgICAgKlxuICAgICAqIEBjb25zdGFudFxuICAgICAqIEBtZW1iZXJvZiBBdXRvZGVzay5WaWV3aW5nLkVycm9yQ29kZXMgXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBMT0FEX0NBTkNFTEVEOiAxNixcbn07XG5cbi8qKlxuICogRm9ybWF0dGVkIGVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBlcnJvckNvZGUgLSBFcnJvciBjb2RlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVycm9yIG1lc3NhZ2VcbiAqIEBhbGlhcyBBdXRvZGVzay5WaWV3aW5nLmVycm9yQ29kZVN0cmluZ1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yQ29kZVN0cmluZyhlcnJvckNvZGUpIHtcbiAgICByZXR1cm4gXCJFcnJvckNvZGU6XCIgKyBlcnJvckNvZGUgKyBcIi5cIjtcbn1cblxuLyoqXG4gKiBHZXQgRXJyb3JDb2RlcyBlbnVtIGZyb20gaHR0cCBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtudW1iZXJ9IG5ldHdvcmtTdGF0dXMgLSBIVFRQIHN0YXR1cyBjb2RlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIEF1dG9kZXNrLlZpZXdpbmcuRXJyb3JDb2RlcyBlbnVtXG4gKiBAYWxpYXMgQXV0b2Rlc2suVmlld2luZy5nZXRFcnJvckNvZGVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvckNvZGUoIG5ldHdvcmtTdGF0dXMgKVxue1xuICAgIGlmICggKG5ldHdvcmtTdGF0dXMgPT09IDQwMykgfHwgKCBuZXR3b3JrU3RhdHVzID09PSA0MDEpIClcbiAgICB7XG4gICAgICAgIHJldHVybiBFcnJvckNvZGVzLk5FVFdPUktfQUNDRVNTX0RFTklFRDtcbiAgICB9XG4gICAgZWxzZSBpZiAobmV0d29ya1N0YXR1cyA9PT0gNDA0IClcbiAgICB7XG4gICAgICAgIHJldHVybiBFcnJvckNvZGVzLk5FVFdPUktfRklMRV9OT1RfRk9VTkQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5ldHdvcmtTdGF0dXMgPj0gNTAwIClcbiAgICB7XG4gICAgICAgIHJldHVybiBFcnJvckNvZGVzLk5FVFdPUktfU0VSVkVSX0VSUk9SO1xuICAgIH1cblxuICAgIHJldHVybiBFcnJvckNvZGVzLk5FVFdPUktfVU5IQU5ETEVEX1JFU1BPTlNFX0NPREU7XG59XG4iXSwibmFtZXMiOlsiRXJyb3JDb2RlcyIsIlVOS05PV05fRkFJTFVSRSIsIkJBRF9EQVRBIiwiTkVUV09SS19GQUlMVVJFIiwiTkVUV09SS19BQ0NFU1NfREVOSUVEIiwiTkVUV09SS19GSUxFX05PVF9GT1VORCIsIk5FVFdPUktfU0VSVkVSX0VSUk9SIiwiTkVUV09SS19VTkhBTkRMRURfUkVTUE9OU0VfQ09ERSIsIkJST1dTRVJfV0VCR0xfTk9UX1NVUFBPUlRFRCIsIkJBRF9EQVRBX05PX1ZJRVdBQkxFX0NPTlRFTlQiLCJCUk9XU0VSX1dFQkdMX0RJU0FCTEVEIiwiQkFEX0RBVEFfTU9ERUxfSVNfRU1QVFkiLCJVTlNVUE9SVEVEX0ZJTEVfRVhURU5TSU9OIiwiVklFV0VSX0lOVEVSTkFMX0VSUk9SIiwiV0VCR0xfTE9TVF9DT05URVhUIiwiTE9BRF9DQU5DRUxFRCIsImVycm9yQ29kZVN0cmluZyIsImVycm9yQ29kZSIsImdldEVycm9yQ29kZSIsIm5ldHdvcmtTdGF0dXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/net/ErrorCodes.js\n"); /***/ }), /***/ "./src/file-loaders/net/Xhr.js": /*!*************************************!*\ !*** ./src/file-loaders/net/Xhr.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ViewingService: () => (/* binding */ ViewingService),\n/* harmony export */ pathToURL: () => (/* binding */ pathToURL),\n/* harmony export */ textToArrayBuffer: () => (/* binding */ textToArrayBuffer)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.includes.js */ \"./node_modules/core-js/modules/es.array.includes.js\");\n/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.flags.js */ \"./node_modules/core-js/modules/es.regexp.flags.js\");\n/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.typed-array.set.js */ \"./node_modules/core-js/modules/es.typed-array.set.js\");\n/* harmony import */ var core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_esnext_array_last_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/esnext.array.last-index.js */ \"./node_modules/core-js/modules/esnext.array.last-index.js\");\n/* harmony import */ var core_js_modules_esnext_array_last_index_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_last_index_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_esnext_array_last_item_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/esnext.array.last-item.js */ \"./node_modules/core-js/modules/esnext.array.last-item.js\");\n/* harmony import */ var core_js_modules_esnext_array_last_item_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_array_last_item_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_esnext_composite_key_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/esnext.composite-key.js */ \"./node_modules/core-js/modules/esnext.composite-key.js\");\n/* harmony import */ var core_js_modules_esnext_composite_key_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_composite_key_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_esnext_composite_symbol_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/esnext.composite-symbol.js */ \"./node_modules/core-js/modules/esnext.composite-symbol.js\");\n/* harmony import */ var core_js_modules_esnext_composite_symbol_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_composite_symbol_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_esnext_map_delete_all_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/esnext.map.delete-all.js */ \"./node_modules/core-js/modules/esnext.map.delete-all.js\");\n/* harmony import */ var core_js_modules_esnext_map_delete_all_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_delete_all_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_esnext_map_every_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/esnext.map.every.js */ \"./node_modules/core-js/modules/esnext.map.every.js\");\n/* harmony import */ var core_js_modules_esnext_map_every_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_every_js__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_esnext_map_filter_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/esnext.map.filter.js */ \"./node_modules/core-js/modules/esnext.map.filter.js\");\n/* harmony import */ var core_js_modules_esnext_map_filter_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_filter_js__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_esnext_map_find_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/esnext.map.find.js */ \"./node_modules/core-js/modules/esnext.map.find.js\");\n/* harmony import */ var core_js_modules_esnext_map_find_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_find_js__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var core_js_modules_esnext_map_find_key_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/esnext.map.find-key.js */ \"./node_modules/core-js/modules/esnext.map.find-key.js\");\n/* harmony import */ var core_js_modules_esnext_map_find_key_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_find_key_js__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var core_js_modules_esnext_map_from_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/esnext.map.from.js */ \"./node_modules/core-js/modules/esnext.map.from.js\");\n/* harmony import */ var core_js_modules_esnext_map_from_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_from_js__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var core_js_modules_esnext_map_group_by_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/esnext.map.group-by.js */ \"./node_modules/core-js/modules/esnext.map.group-by.js\");\n/* harmony import */ var core_js_modules_esnext_map_group_by_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_group_by_js__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var core_js_modules_esnext_map_includes_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/esnext.map.includes.js */ \"./node_modules/core-js/modules/esnext.map.includes.js\");\n/* harmony import */ var core_js_modules_esnext_map_includes_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_includes_js__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var core_js_modules_esnext_map_key_by_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/modules/esnext.map.key-by.js */ \"./node_modules/core-js/modules/esnext.map.key-by.js\");\n/* harmony import */ var core_js_modules_esnext_map_key_by_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_key_by_js__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var core_js_modules_esnext_map_key_of_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! core-js/modules/esnext.map.key-of.js */ \"./node_modules/core-js/modules/esnext.map.key-of.js\");\n/* harmony import */ var core_js_modules_esnext_map_key_of_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_key_of_js__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var core_js_modules_esnext_map_map_keys_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! core-js/modules/esnext.map.map-keys.js */ \"./node_modules/core-js/modules/esnext.map.map-keys.js\");\n/* harmony import */ var core_js_modules_esnext_map_map_keys_js__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_map_keys_js__WEBPACK_IMPORTED_MODULE_17__);\n/* harmony import */ var core_js_modules_esnext_map_map_values_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! core-js/modules/esnext.map.map-values.js */ \"./node_modules/core-js/modules/esnext.map.map-values.js\");\n/* harmony import */ var core_js_modules_esnext_map_map_values_js__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_map_values_js__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var core_js_modules_esnext_map_merge_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! core-js/modules/esnext.map.merge.js */ \"./node_modules/core-js/modules/esnext.map.merge.js\");\n/* harmony import */ var core_js_modules_esnext_map_merge_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_merge_js__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var core_js_modules_esnext_map_of_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! core-js/modules/esnext.map.of.js */ \"./node_modules/core-js/modules/esnext.map.of.js\");\n/* harmony import */ var core_js_modules_esnext_map_of_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_of_js__WEBPACK_IMPORTED_MODULE_20__);\n/* harmony import */ var core_js_modules_esnext_map_reduce_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! core-js/modules/esnext.map.reduce.js */ \"./node_modules/core-js/modules/esnext.map.reduce.js\");\n/* harmony import */ var core_js_modules_esnext_map_reduce_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_reduce_js__WEBPACK_IMPORTED_MODULE_21__);\n/* harmony import */ var core_js_modules_esnext_map_some_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! core-js/modules/esnext.map.some.js */ \"./node_modules/core-js/modules/esnext.map.some.js\");\n/* harmony import */ var core_js_modules_esnext_map_some_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_some_js__WEBPACK_IMPORTED_MODULE_22__);\n/* harmony import */ var core_js_modules_esnext_map_update_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! core-js/modules/esnext.map.update.js */ \"./node_modules/core-js/modules/esnext.map.update.js\");\n/* harmony import */ var core_js_modules_esnext_map_update_js__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_map_update_js__WEBPACK_IMPORTED_MODULE_23__);\n/* harmony import */ var core_js_modules_esnext_math_clamp_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! core-js/modules/esnext.math.clamp.js */ \"./node_modules/core-js/modules/esnext.math.clamp.js\");\n/* harmony import */ var core_js_modules_esnext_math_clamp_js__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_clamp_js__WEBPACK_IMPORTED_MODULE_24__);\n/* harmony import */ var core_js_modules_esnext_math_deg_per_rad_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! core-js/modules/esnext.math.deg-per-rad.js */ \"./node_modules/core-js/modules/esnext.math.deg-per-rad.js\");\n/* harmony import */ var core_js_modules_esnext_math_deg_per_rad_js__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_deg_per_rad_js__WEBPACK_IMPORTED_MODULE_25__);\n/* harmony import */ var core_js_modules_esnext_math_degrees_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! core-js/modules/esnext.math.degrees.js */ \"./node_modules/core-js/modules/esnext.math.degrees.js\");\n/* harmony import */ var core_js_modules_esnext_math_degrees_js__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_degrees_js__WEBPACK_IMPORTED_MODULE_26__);\n/* harmony import */ var core_js_modules_esnext_math_fscale_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! core-js/modules/esnext.math.fscale.js */ \"./node_modules/core-js/modules/esnext.math.fscale.js\");\n/* harmony import */ var core_js_modules_esnext_math_fscale_js__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_fscale_js__WEBPACK_IMPORTED_MODULE_27__);\n/* harmony import */ var core_js_modules_esnext_math_iaddh_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! core-js/modules/esnext.math.iaddh.js */ \"./node_modules/core-js/modules/esnext.math.iaddh.js\");\n/* harmony import */ var core_js_modules_esnext_math_iaddh_js__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_iaddh_js__WEBPACK_IMPORTED_MODULE_28__);\n/* harmony import */ var core_js_modules_esnext_math_imulh_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! core-js/modules/esnext.math.imulh.js */ \"./node_modules/core-js/modules/esnext.math.imulh.js\");\n/* harmony import */ var core_js_modules_esnext_math_imulh_js__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_imulh_js__WEBPACK_IMPORTED_MODULE_29__);\n/* harmony import */ var core_js_modules_esnext_math_isubh_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! core-js/modules/esnext.math.isubh.js */ \"./node_modules/core-js/modules/esnext.math.isubh.js\");\n/* harmony import */ var core_js_modules_esnext_math_isubh_js__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_isubh_js__WEBPACK_IMPORTED_MODULE_30__);\n/* harmony import */ var core_js_modules_esnext_math_rad_per_deg_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! core-js/modules/esnext.math.rad-per-deg.js */ \"./node_modules/core-js/modules/esnext.math.rad-per-deg.js\");\n/* harmony import */ var core_js_modules_esnext_math_rad_per_deg_js__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_rad_per_deg_js__WEBPACK_IMPORTED_MODULE_31__);\n/* harmony import */ var core_js_modules_esnext_math_radians_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! core-js/modules/esnext.math.radians.js */ \"./node_modules/core-js/modules/esnext.math.radians.js\");\n/* harmony import */ var core_js_modules_esnext_math_radians_js__WEBPACK_IMPORTED_MODULE_32___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_radians_js__WEBPACK_IMPORTED_MODULE_32__);\n/* harmony import */ var core_js_modules_esnext_math_scale_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! core-js/modules/esnext.math.scale.js */ \"./node_modules/core-js/modules/esnext.math.scale.js\");\n/* harmony import */ var core_js_modules_esnext_math_scale_js__WEBPACK_IMPORTED_MODULE_33___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_scale_js__WEBPACK_IMPORTED_MODULE_33__);\n/* harmony import */ var core_js_modules_esnext_math_seeded_prng_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! core-js/modules/esnext.math.seeded-prng.js */ \"./node_modules/core-js/modules/esnext.math.seeded-prng.js\");\n/* harmony import */ var core_js_modules_esnext_math_seeded_prng_js__WEBPACK_IMPORTED_MODULE_34___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_seeded_prng_js__WEBPACK_IMPORTED_MODULE_34__);\n/* harmony import */ var core_js_modules_esnext_math_signbit_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! core-js/modules/esnext.math.signbit.js */ \"./node_modules/core-js/modules/esnext.math.signbit.js\");\n/* harmony import */ var core_js_modules_esnext_math_signbit_js__WEBPACK_IMPORTED_MODULE_35___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_signbit_js__WEBPACK_IMPORTED_MODULE_35__);\n/* harmony import */ var core_js_modules_esnext_math_umulh_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! core-js/modules/esnext.math.umulh.js */ \"./node_modules/core-js/modules/esnext.math.umulh.js\");\n/* harmony import */ var core_js_modules_esnext_math_umulh_js__WEBPACK_IMPORTED_MODULE_36___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_math_umulh_js__WEBPACK_IMPORTED_MODULE_36__);\n/* harmony import */ var core_js_modules_esnext_number_from_string_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! core-js/modules/esnext.number.from-string.js */ \"./node_modules/core-js/modules/esnext.number.from-string.js\");\n/* harmony import */ var core_js_modules_esnext_number_from_string_js__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_number_from_string_js__WEBPACK_IMPORTED_MODULE_37__);\n/* harmony import */ var core_js_modules_esnext_observable_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! core-js/modules/esnext.observable.js */ \"./node_modules/core-js/modules/esnext.observable.js\");\n/* harmony import */ var core_js_modules_esnext_observable_js__WEBPACK_IMPORTED_MODULE_38___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_observable_js__WEBPACK_IMPORTED_MODULE_38__);\n/* harmony import */ var core_js_modules_esnext_promise_try_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! core-js/modules/esnext.promise.try.js */ \"./node_modules/core-js/modules/esnext.promise.try.js\");\n/* harmony import */ var core_js_modules_esnext_promise_try_js__WEBPACK_IMPORTED_MODULE_39___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_promise_try_js__WEBPACK_IMPORTED_MODULE_39__);\n/* harmony import */ var core_js_modules_esnext_reflect_define_metadata_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! core-js/modules/esnext.reflect.define-metadata.js */ \"./node_modules/core-js/modules/esnext.reflect.define-metadata.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_define_metadata_js__WEBPACK_IMPORTED_MODULE_40___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_define_metadata_js__WEBPACK_IMPORTED_MODULE_40__);\n/* harmony import */ var core_js_modules_esnext_reflect_delete_metadata_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! core-js/modules/esnext.reflect.delete-metadata.js */ \"./node_modules/core-js/modules/esnext.reflect.delete-metadata.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_delete_metadata_js__WEBPACK_IMPORTED_MODULE_41___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_delete_metadata_js__WEBPACK_IMPORTED_MODULE_41__);\n/* harmony import */ var core_js_modules_esnext_reflect_get_metadata_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! core-js/modules/esnext.reflect.get-metadata.js */ \"./node_modules/core-js/modules/esnext.reflect.get-metadata.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_get_metadata_js__WEBPACK_IMPORTED_MODULE_42___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_get_metadata_js__WEBPACK_IMPORTED_MODULE_42__);\n/* harmony import */ var core_js_modules_esnext_reflect_get_metadata_keys_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! core-js/modules/esnext.reflect.get-metadata-keys.js */ \"./node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_get_metadata_keys_js__WEBPACK_IMPORTED_MODULE_43___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_get_metadata_keys_js__WEBPACK_IMPORTED_MODULE_43__);\n/* harmony import */ var core_js_modules_esnext_reflect_get_own_metadata_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! core-js/modules/esnext.reflect.get-own-metadata.js */ \"./node_modules/core-js/modules/esnext.reflect.get-own-metadata.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_get_own_metadata_js__WEBPACK_IMPORTED_MODULE_44___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_get_own_metadata_js__WEBPACK_IMPORTED_MODULE_44__);\n/* harmony import */ var core_js_modules_esnext_reflect_get_own_metadata_keys_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! core-js/modules/esnext.reflect.get-own-metadata-keys.js */ \"./node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_get_own_metadata_keys_js__WEBPACK_IMPORTED_MODULE_45___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_get_own_metadata_keys_js__WEBPACK_IMPORTED_MODULE_45__);\n/* harmony import */ var core_js_modules_esnext_reflect_has_metadata_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! core-js/modules/esnext.reflect.has-metadata.js */ \"./node_modules/core-js/modules/esnext.reflect.has-metadata.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_has_metadata_js__WEBPACK_IMPORTED_MODULE_46___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_has_metadata_js__WEBPACK_IMPORTED_MODULE_46__);\n/* harmony import */ var core_js_modules_esnext_reflect_has_own_metadata_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! core-js/modules/esnext.reflect.has-own-metadata.js */ \"./node_modules/core-js/modules/esnext.reflect.has-own-metadata.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_has_own_metadata_js__WEBPACK_IMPORTED_MODULE_47___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_has_own_metadata_js__WEBPACK_IMPORTED_MODULE_47__);\n/* harmony import */ var core_js_modules_esnext_reflect_metadata_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! core-js/modules/esnext.reflect.metadata.js */ \"./node_modules/core-js/modules/esnext.reflect.metadata.js\");\n/* harmony import */ var core_js_modules_esnext_reflect_metadata_js__WEBPACK_IMPORTED_MODULE_48___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_reflect_metadata_js__WEBPACK_IMPORTED_MODULE_48__);\n/* harmony import */ var core_js_modules_esnext_set_add_all_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! core-js/modules/esnext.set.add-all.js */ \"./node_modules/core-js/modules/esnext.set.add-all.js\");\n/* harmony import */ var core_js_modules_esnext_set_add_all_js__WEBPACK_IMPORTED_MODULE_49___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_add_all_js__WEBPACK_IMPORTED_MODULE_49__);\n/* harmony import */ var core_js_modules_esnext_set_delete_all_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! core-js/modules/esnext.set.delete-all.js */ \"./node_modules/core-js/modules/esnext.set.delete-all.js\");\n/* harmony import */ var core_js_modules_esnext_set_delete_all_js__WEBPACK_IMPORTED_MODULE_50___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_delete_all_js__WEBPACK_IMPORTED_MODULE_50__);\n/* harmony import */ var core_js_modules_esnext_set_difference_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! core-js/modules/esnext.set.difference.js */ \"./node_modules/core-js/modules/esnext.set.difference.js\");\n/* harmony import */ var core_js_modules_esnext_set_difference_js__WEBPACK_IMPORTED_MODULE_51___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_difference_js__WEBPACK_IMPORTED_MODULE_51__);\n/* harmony import */ var core_js_modules_esnext_set_every_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! core-js/modules/esnext.set.every.js */ \"./node_modules/core-js/modules/esnext.set.every.js\");\n/* harmony import */ var core_js_modules_esnext_set_every_js__WEBPACK_IMPORTED_MODULE_52___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_every_js__WEBPACK_IMPORTED_MODULE_52__);\n/* harmony import */ var core_js_modules_esnext_set_filter_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! core-js/modules/esnext.set.filter.js */ \"./node_modules/core-js/modules/esnext.set.filter.js\");\n/* harmony import */ var core_js_modules_esnext_set_filter_js__WEBPACK_IMPORTED_MODULE_53___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_filter_js__WEBPACK_IMPORTED_MODULE_53__);\n/* harmony import */ var core_js_modules_esnext_set_find_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! core-js/modules/esnext.set.find.js */ \"./node_modules/core-js/modules/esnext.set.find.js\");\n/* harmony import */ var core_js_modules_esnext_set_find_js__WEBPACK_IMPORTED_MODULE_54___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_find_js__WEBPACK_IMPORTED_MODULE_54__);\n/* harmony import */ var core_js_modules_esnext_set_from_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! core-js/modules/esnext.set.from.js */ \"./node_modules/core-js/modules/esnext.set.from.js\");\n/* harmony import */ var core_js_modules_esnext_set_from_js__WEBPACK_IMPORTED_MODULE_55___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_from_js__WEBPACK_IMPORTED_MODULE_55__);\n/* harmony import */ var core_js_modules_esnext_set_intersection_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! core-js/modules/esnext.set.intersection.js */ \"./node_modules/core-js/modules/esnext.set.intersection.js\");\n/* harmony import */ var core_js_modules_esnext_set_intersection_js__WEBPACK_IMPORTED_MODULE_56___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_intersection_js__WEBPACK_IMPORTED_MODULE_56__);\n/* harmony import */ var core_js_modules_esnext_set_is_disjoint_from_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! core-js/modules/esnext.set.is-disjoint-from.js */ \"./node_modules/core-js/modules/esnext.set.is-disjoint-from.js\");\n/* harmony import */ var core_js_modules_esnext_set_is_disjoint_from_js__WEBPACK_IMPORTED_MODULE_57___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_is_disjoint_from_js__WEBPACK_IMPORTED_MODULE_57__);\n/* harmony import */ var core_js_modules_esnext_set_is_subset_of_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! core-js/modules/esnext.set.is-subset-of.js */ \"./node_modules/core-js/modules/esnext.set.is-subset-of.js\");\n/* harmony import */ var core_js_modules_esnext_set_is_subset_of_js__WEBPACK_IMPORTED_MODULE_58___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_is_subset_of_js__WEBPACK_IMPORTED_MODULE_58__);\n/* harmony import */ var core_js_modules_esnext_set_is_superset_of_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! core-js/modules/esnext.set.is-superset-of.js */ \"./node_modules/core-js/modules/esnext.set.is-superset-of.js\");\n/* harmony import */ var core_js_modules_esnext_set_is_superset_of_js__WEBPACK_IMPORTED_MODULE_59___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_is_superset_of_js__WEBPACK_IMPORTED_MODULE_59__);\n/* harmony import */ var core_js_modules_esnext_set_join_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! core-js/modules/esnext.set.join.js */ \"./node_modules/core-js/modules/esnext.set.join.js\");\n/* harmony import */ var core_js_modules_esnext_set_join_js__WEBPACK_IMPORTED_MODULE_60___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_join_js__WEBPACK_IMPORTED_MODULE_60__);\n/* harmony import */ var core_js_modules_esnext_set_map_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! core-js/modules/esnext.set.map.js */ \"./node_modules/core-js/modules/esnext.set.map.js\");\n/* harmony import */ var core_js_modules_esnext_set_map_js__WEBPACK_IMPORTED_MODULE_61___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_map_js__WEBPACK_IMPORTED_MODULE_61__);\n/* harmony import */ var core_js_modules_esnext_set_of_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! core-js/modules/esnext.set.of.js */ \"./node_modules/core-js/modules/esnext.set.of.js\");\n/* harmony import */ var core_js_modules_esnext_set_of_js__WEBPACK_IMPORTED_MODULE_62___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_of_js__WEBPACK_IMPORTED_MODULE_62__);\n/* harmony import */ var core_js_modules_esnext_set_reduce_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! core-js/modules/esnext.set.reduce.js */ \"./node_modules/core-js/modules/esnext.set.reduce.js\");\n/* harmony import */ var core_js_modules_esnext_set_reduce_js__WEBPACK_IMPORTED_MODULE_63___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_reduce_js__WEBPACK_IMPORTED_MODULE_63__);\n/* harmony import */ var core_js_modules_esnext_set_some_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! core-js/modules/esnext.set.some.js */ \"./node_modules/core-js/modules/esnext.set.some.js\");\n/* harmony import */ var core_js_modules_esnext_set_some_js__WEBPACK_IMPORTED_MODULE_64___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_some_js__WEBPACK_IMPORTED_MODULE_64__);\n/* harmony import */ var core_js_modules_esnext_set_symmetric_difference_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! core-js/modules/esnext.set.symmetric-difference.js */ \"./node_modules/core-js/modules/esnext.set.symmetric-difference.js\");\n/* harmony import */ var core_js_modules_esnext_set_symmetric_difference_js__WEBPACK_IMPORTED_MODULE_65___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_symmetric_difference_js__WEBPACK_IMPORTED_MODULE_65__);\n/* harmony import */ var core_js_modules_esnext_set_union_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! core-js/modules/esnext.set.union.js */ \"./node_modules/core-js/modules/esnext.set.union.js\");\n/* harmony import */ var core_js_modules_esnext_set_union_js__WEBPACK_IMPORTED_MODULE_66___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_set_union_js__WEBPACK_IMPORTED_MODULE_66__);\n/* harmony import */ var core_js_modules_esnext_string_at_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! core-js/modules/esnext.string.at.js */ \"./node_modules/core-js/modules/esnext.string.at.js\");\n/* harmony import */ var core_js_modules_esnext_string_at_js__WEBPACK_IMPORTED_MODULE_67___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_string_at_js__WEBPACK_IMPORTED_MODULE_67__);\n/* harmony import */ var core_js_modules_esnext_string_code_points_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! core-js/modules/esnext.string.code-points.js */ \"./node_modules/core-js/modules/esnext.string.code-points.js\");\n/* harmony import */ var core_js_modules_esnext_string_code_points_js__WEBPACK_IMPORTED_MODULE_68___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_string_code_points_js__WEBPACK_IMPORTED_MODULE_68__);\n/* harmony import */ var core_js_modules_esnext_symbol_dispose_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! core-js/modules/esnext.symbol.dispose.js */ \"./node_modules/core-js/modules/esnext.symbol.dispose.js\");\n/* harmony import */ var core_js_modules_esnext_symbol_dispose_js__WEBPACK_IMPORTED_MODULE_69___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_symbol_dispose_js__WEBPACK_IMPORTED_MODULE_69__);\n/* harmony import */ var core_js_modules_esnext_symbol_observable_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! core-js/modules/esnext.symbol.observable.js */ \"./node_modules/core-js/modules/esnext.symbol.observable.js\");\n/* harmony import */ var core_js_modules_esnext_symbol_observable_js__WEBPACK_IMPORTED_MODULE_70___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_symbol_observable_js__WEBPACK_IMPORTED_MODULE_70__);\n/* harmony import */ var core_js_modules_esnext_symbol_pattern_match_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! core-js/modules/esnext.symbol.pattern-match.js */ \"./node_modules/core-js/modules/esnext.symbol.pattern-match.js\");\n/* harmony import */ var core_js_modules_esnext_symbol_pattern_match_js__WEBPACK_IMPORTED_MODULE_71___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_symbol_pattern_match_js__WEBPACK_IMPORTED_MODULE_71__);\n/* harmony import */ var core_js_modules_esnext_weak_map_delete_all_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! core-js/modules/esnext.weak-map.delete-all.js */ \"./node_modules/core-js/modules/esnext.weak-map.delete-all.js\");\n/* harmony import */ var core_js_modules_esnext_weak_map_delete_all_js__WEBPACK_IMPORTED_MODULE_72___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_map_delete_all_js__WEBPACK_IMPORTED_MODULE_72__);\n/* harmony import */ var core_js_modules_esnext_weak_map_from_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! core-js/modules/esnext.weak-map.from.js */ \"./node_modules/core-js/modules/esnext.weak-map.from.js\");\n/* harmony import */ var core_js_modules_esnext_weak_map_from_js__WEBPACK_IMPORTED_MODULE_73___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_map_from_js__WEBPACK_IMPORTED_MODULE_73__);\n/* harmony import */ var core_js_modules_esnext_weak_map_of_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! core-js/modules/esnext.weak-map.of.js */ \"./node_modules/core-js/modules/esnext.weak-map.of.js\");\n/* harmony import */ var core_js_modules_esnext_weak_map_of_js__WEBPACK_IMPORTED_MODULE_74___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_map_of_js__WEBPACK_IMPORTED_MODULE_74__);\n/* harmony import */ var core_js_modules_esnext_weak_set_add_all_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! core-js/modules/esnext.weak-set.add-all.js */ \"./node_modules/core-js/modules/esnext.weak-set.add-all.js\");\n/* harmony import */ var core_js_modules_esnext_weak_set_add_all_js__WEBPACK_IMPORTED_MODULE_75___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_set_add_all_js__WEBPACK_IMPORTED_MODULE_75__);\n/* harmony import */ var core_js_modules_esnext_weak_set_delete_all_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! core-js/modules/esnext.weak-set.delete-all.js */ \"./node_modules/core-js/modules/esnext.weak-set.delete-all.js\");\n/* harmony import */ var core_js_modules_esnext_weak_set_delete_all_js__WEBPACK_IMPORTED_MODULE_76___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_set_delete_all_js__WEBPACK_IMPORTED_MODULE_76__);\n/* harmony import */ var core_js_modules_esnext_weak_set_from_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! core-js/modules/esnext.weak-set.from.js */ \"./node_modules/core-js/modules/esnext.weak-set.from.js\");\n/* harmony import */ var core_js_modules_esnext_weak_set_from_js__WEBPACK_IMPORTED_MODULE_77___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_set_from_js__WEBPACK_IMPORTED_MODULE_77__);\n/* harmony import */ var core_js_modules_esnext_weak_set_of_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! core-js/modules/esnext.weak-set.of.js */ \"./node_modules/core-js/modules/esnext.weak-set.of.js\");\n/* harmony import */ var core_js_modules_esnext_weak_set_of_js__WEBPACK_IMPORTED_MODULE_78___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_esnext_weak_set_of_js__WEBPACK_IMPORTED_MODULE_78__);\n/* harmony import */ var core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! core-js/modules/web.immediate.js */ \"./node_modules/core-js/modules/web.immediate.js\");\n/* harmony import */ var core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_79___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_79__);\n/* harmony import */ var _logger_Logger__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ../../logger/Logger */ \"./src/logger/Logger.js\");\n/* harmony import */ var _ErrorCodes__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./ErrorCodes */ \"./src/file-loaders/net/ErrorCodes.js\");\n/* harmony import */ var _lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ../lmvtk/common/StringUtils */ \"./src/file-loaders/lmvtk/common/StringUtils.js\");\n/* harmony import */ var _endpoints__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./endpoints */ \"./src/file-loaders/net/endpoints.js\");\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ../../compat */ \"./src/compat.js\");\n/* harmony import */ var exponential_backoff__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! exponential-backoff */ \"./node_modules/exponential-backoff/dist/backoff.js\");\n/* harmony import */ var exponential_backoff__WEBPACK_IMPORTED_MODULE_85___default = /*#__PURE__*/__webpack_require__.n(exponential_backoff__WEBPACK_IMPORTED_MODULE_85__);\n/* harmony import */ var fflate__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! fflate */ \"./node_modules/fflate/esm/browser.js\");\n // These are needed in order to support async/await.\n\n\n\n\n\n\n\n\n\n\nlet ViewingService = {};\nViewingService.WORKER_REGISTER_FILE_PORT = \"REGISTER_FILE_PORT\";\nViewingService.WORKER_READ_FILE = \"READ_FILE\";\n\nvar warnedGzip = false;\n\n// Simplify Unix style file path. For example, turn '/a/./b/../../c/' into \"/c\".\n// Required to deal with OSS crappy URNs where there are embedded '..'.\nfunction simplifyPath(path) {\n\n var elements = path.split('/');\n if (elements.length == 0)\n return path;\n\n var stack = [];\n for (var index = 0; index < elements.length; ++index) {\n var c=e lements[index];\n if (c==='.' ) {\n continue;\n }if (c==='..' && stack.length) {\n stack.pop();\n } else {\n stack.push(c);\n }\n }\n\n // Great, the path commits suicide.\n if (stack.length==0 )\n return '';\n\n return stack.join(\ "/\");\n}\n\n//Maps a relative resource path (like a pack file or texture)\n//to an absolute URL. If absoluteBasePath is specified, it is\n//used to construct the absolute URL, otherwise the window location\n//is used.\nfunction pathToURL(path, absoluteBasePath) {\n\n if (path.indexOf(\ "://\") !==- 1 ||\n path.indexOf(\ "urn:\")===0 ) {\n return path;\n }\n\n if (absoluteBasePath) {\n return absoluteBasePath + path;\n }\n\n if (typeof window===\ "undefined\")\n return path;\n\n const _window=( 0,_compat__WEBPACK_IMPORTED_MODULE_84__.getGlobal)();\n var rootRelPath=_ window.location.pathname;\n //chop off the index.html part\n var lastSlash=r ootRelPath.lastIndexOf(\ "/\");\n rootRelPath=r ootRelPath.substr(0, lastSlash + 1);\n var absPath=_ window.location.protocol + \ "//\" + _window.location.host + rootRelPath + path;\n return absPath;\n}\n\n\nViewingService.simplifyPath=s implifyPath;\n\nfunction textToArrayBuffer(textBuffer, startOffset) {\n var len=t extBuffer.length - startOffset;\n var arrayBuffer=n ew ArrayBuffer(len);\n var ui8a=n ew Uint8Array(arrayBuffer, 0);\n for (var i=0 , j=s tartOffset; i < len; i++, j++)\n ui8a[i]=t extBuffer.charCodeAt(j) & 0xff;\n return ui8a;\n}\n\n\nViewingService.OSS_PREFIX=\ "urn:adsk.objects:os.object:\";\n\n/**\n * Construct full URL given a potentially partial viewing service \ "urn:\" prefixed resource\n * @returns {string}\n */\nViewingService.generateUrl=f unction (baseUrl, api, path, apiData, escapeOssObjects, guid) {\n\n path=p ath || \ "\";\n\n //NODE\n if ((0,_compat__WEBPACK_IMPORTED_MODULE_84__.isNodeJS)() && !isRemotePath(baseUrl, path)) {\n return path;\n }\n\n path=s implifyPath(path);\n\n //V2 only accepts URL encoded paths\n var urnidx=p ath.indexOf(\ "urn:\");\n var qidx=p ath.indexOf(\ "?\");\n if (urnidx !=- 1) {\n if (qidx !==- 1) {\n //TODO: not sure this will happen, queryParams are normally\n //passed in separately in the options object\n path=p ath.slice(0, urnidx) + encodeURIComponent(path.slice(urnidx, qidx)) + path.slice(qidx);\n } else {\n path=p ath.slice(0, urnidx) + encodeURIComponent(path.slice(urnidx));\n }\n } else {\n path=e ncodeURI(path);\n }\n\n // OSS only accepts object ids with escaped slashes\n if (escapeOssObjects && ViewingService.isOSSUrl(path)) {\n var objectsIndex=p ath.indexOf(\ "/objects/\") + 9;\n var objectPath=p ath.substring(objectsIndex);\n path=p ath.substring(0, objectsIndex) + encodeURIComponent(objectPath);\n }\n\n //Check if it 's a viewing service item path\n //Public/static content will not have the urn: prefix.\n //So URL construction is a no-op\n if (!api || decodeURIComponent(path).indexOf('urn: ') !== 0) {\n if (isRemotePath(null, path))\n return path;else\n\n return baseUrl + path;\n }\n\n //Remove \"urn:\" prefix when getting URN-based stuff (manifests and thumbnails)\n if (api !== 'items ') {\n path = path.substr(6);\n }\n\n switch (api) {\n case \"items\":return _endpoints__WEBPACK_IMPORTED_MODULE_83__.endpoint.getItemApi(baseUrl, path, apiData);\n case \"bubbles\":return _endpoints__WEBPACK_IMPORTED_MODULE_83__.endpoint.getManifestApi(baseUrl, path, apiData);\n case \"thumbnails\":return _endpoints__WEBPACK_IMPORTED_MODULE_83__.endpoint.getThumbnailApi(baseUrl, path, apiData);\n case \"properties\":return _endpoints__WEBPACK_IMPORTED_MODULE_83__.endpoint.getPropertyQueryApi(baseUrl, path, apiData, guid);\n }\n};\n\nfunction isRemotePath(baseUrl, path) {\n if (path.indexOf(\"file://\") !== -1)\n return false;\n if (path.indexOf(\"://\") !== -1)\n return true;\n if (baseUrl)\n return true;\n}\n\n\n//Conditional GET request implementation for node vs. browser\nif ((0,_compat__WEBPACK_IMPORTED_MODULE_84__.isNodeJS)()) {\n\n (function () {\n\n var fs = __webpack_require__(/*! fs */ \"?99b8\");\n var zlib = __webpack_require__(/*! zlib */ \"?d497\");\n var https = __webpack_require__(/*! https */ \"?8571\");\n var http = __webpack_require__(/*! http */ \"?aca8\");\n var urllib = __webpack_require__(/*! url */ \"./node_modules/url/url.js\");\n\n let httpsAgent = new https.Agent({\n keepAlive: true,\n keepAliveMsecs: 100,\n maxSockets: 10\n });\n let httpAgent = new http.Agent({\n keepAlive: true,\n keepAliveMsecs: 100,\n maxSockets: 10\n });\n\n\n var forgeAgent = new https.Agent({ maxSockets: 10 });\n\n function loadLocalFile(url, onSuccess, onFailure, options) {\n\n if (url.indexOf(\"file://\") === 0)\n url = url.substr(7);\n\n function postProcess(data) {\n if (options.responseType === \"json\") {\n try {\n return JSON.parse(data.toString(\"utf8\"));\n } catch (e) {\n onFailure(e);\n }\n }\n return data;\n }\n\n //Always use async on Node\n fs.readFile(url, function (error, data) {\n if (error) {\n onFailure(0, 0, { httpStatusText: error, url: url });\n } else {\n if (data[0] === 31 && data[1] === 139) {\n zlib.gunzip(data, null, function (error, data) {\n if (error)\n onFailure(0, 0, { httpStatusText: error, url: url });else\n {\n data = postProcess(data);\n if (options.ondata)\n options.ondata(data);\n onSuccess(data);\n }\n });\n } else {\n data = postProcess(data);\n if (options.ondata)\n options.ondata(data);\n onSuccess(data);\n }\n }\n });\n }\n\n function needsGunzip(res, pathname) {\n\n if (res.headers['content-encoding '] === 'gzip ')\n return true;\n\n //These SVF related files come pre-gzipped\n //regardless of content-encoding header\n\n if (pathname.endsWith(\".json.gz\"))\n return true;\n\n if (pathname.endsWith(\"FragmentList.pack\"))\n return true;\n\n if (pathname.endsWith(\"LightList.bin\"))\n return true;\n\n if (pathname.endsWith(\"CameraList.bin\"))\n return true;\n\n if (pathname.endsWith(\"CameraDefinitions.bin\"))\n return true;\n\n if (pathname.endsWith(\"LightDefinitions.bin\"))\n return true;\n\n return false;\n }\n\n\n /**\n * Performs a GET/HEAD request to Viewing Service. (Node.js specific implementation)\n *\n * @param {string} viewingServiceBaseUrl - The base url for the viewing service.\n * @param {string} api - The api to call in the viewing service.\n * @param {string} url - The url for the request.\n * @param {function} onSuccess - A function that takes a single parameter that represents the response\n * returned if the request is successful.\n * @param {function} onFailure - A function that takes an integer status code, and a string status, which together represent\n * the response returned if the request is unsuccessful, and a third data argument, which\n * has more information about the failure. The data is a dictionary that minimally includes\n * the url, and an exception if one was raised.\n * @param {Object=} [options] - A dictionary of options that can include:\n * headers - A dictionary representing the additional headers to add.\n * queryParams - A string representing the query parameters\n * responseType - A string representing the response type for this request.\n * {boolean} [encodeUrn] - when true, encodes the document urn if found.\n * {boolean} [noBody] - when true, will perform a HEAD request\n */\n ViewingService.rawGet = function (viewingServiceBaseUrl, api, url, onSuccess, onFailure, options) {\n\n options = options || {};\n\n url = ViewingService.generateUrl(viewingServiceBaseUrl, api, url, undefined, options.escapeOssObjects);\n\n if (!isRemotePath(viewingServiceBaseUrl, url)) {\n loadLocalFile(url, onSuccess, onFailure, options);\n return;\n }\n\n if (options.queryParams) {\n var concatSymbol = url.indexOf('? ') === -1 ? '? ' : '& ';\n url = url + concatSymbol + options.queryParams;\n }\n\n var parsed = urllib.parse(url);\n\n var req = {\n host: parsed.hostname,\n port: parsed.port,\n method: options.method || \"GET\",\n path: parsed.path,\n headers: {},\n retryCount: 0,\n agent: parsed.protocol === \"https:\" ? httpsAgent : httpAgent\n };\n\n //Don't overload derivative service with requests\n if (req.host.endsWith(\ ".api.autodesk.com\") && (\n req.path.startsWith(\ "/derivativeservice\") || req.path.startsWith(\ "/modelderivative\"))) {\n req.agent=f orgeAgent;\n }\n\n if (options.headers) {\n for (var p in options.headers) {\n req.headers[p]=o ptions.headers[p];\n }\n }\n\n if (!req.headers[ 'accept-encoding']) {\n req.headers[ 'accept-encoding']='gzip, deflate' ;\n }\n\n if (options.range) {\n req.headers[\ "Range\"]=\ "bytes=\" + options.range.min + \ "-\" + options.range.max;\n }\n\n //Undo hack used to make streaming receive work on browser XHR -- the hack\n //involves processing the response as text, so responseType is set to \ "\".\n if (options.ondata || options.onprogress) {\n options.responseType=\ "arraybuffer\";\n }\n\n var request=( parsed.protocol===\ "https:\" ? https : http).request(req, function (res) {\n\n var hasError=! (res.statusCode>= 200 && res.statusCode < 400);\n\n //Pipe through gunzip if needed\n var stream=r es;\n if (!hasError && needsGunzip(res, parsed.pathname)) {\n stream=r es.pipe(zlib.createGunzip());\n }\n\n //Decode as UTF8 string if needed\n if (options.responseType===\ "json\" || options.responseType===\ "text\" || !options.responseType)\n stream.setEncoding( 'utf8');\n\n var chunks=[ ];\n var receiveBuffer=B uffer.allocUnsafe(65536);\n var receivedLen=0 ;\n stream.on( 'data', function (chunk) {\n\n //The onprogress callback is special in that it\n //want us to accumulate the data as we receive it, and it only looks at it.\n if (options.onprogress) {\n\n if (chunk.length + receivedLen> receiveBuffer.length) {\n var nb = Buffer.allocUnsafe(0 | Math.ceil(receiveBuffer.length * 1.5));\n receiveBuffer.copy(nb, 0, 0, receivedLen);\n receiveBuffer = nb;\n }\n\n chunk.copy(receiveBuffer, receivedLen, 0, chunk.length);\n receivedLen += chunk.length;\n let abort = options.onprogress(receiveBuffer, receivedLen);\n if (abort)\n request.abort();\n return;\n } else {\n chunks.push(chunk);\n }\n\n if (options.ondata) {\n options.ondata(chunk);\n }\n\n });\n\n stream.on('end', function () {\n\n if (res.statusCode >= 200 && res.statusCode < 400) {\n\n if (options.responseType===\ "json\") {\n var jsobj=J SON.parse(chunks.join( ''));\n onSuccess(jsobj);\n return;\n }\n\n if (options.responseType===\ "text\" || options.responseType===\ "\") {\n var str=c hunks.join( '');\n onSuccess(str);\n return;\n }\n\n var buf=o ptions.onprogress ? receiveBuffer : Buffer.concat(chunks);\n\n if (buf[0]===3 1 && buf[1]===1 39) {\n\n _logger_Logger__WEBPACK_IMPORTED_MODULE_80__.logger.warn(\ "An LMV resource (\" + url + \ ") was double compressed, or Content-Encoding header missing\");\n\n try {\n buf=z lib.gunzipSync(buf);\n receivedLen=b uf.length;\n } catch (err) {\n onFailure(_ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.BAD_DATA,\n \ "Malformed data received when requesting file\",\n { \ "url\": url, \ "exception\": err.toString(), \ "stack\": err.stack });\n }\n }\n\n if (request.status===2 00 && options.range) {\n //If we requested a range, but the entire content was returned,\n //make sure to give back just the requested subset to the caller\n buf=n ew Uint8Array(buf, options.range.min, options.range.max - options.range.min);\n }\n\n onSuccess(buf, receivedLen);\n\n } else {\n\n if (onFailure)\n onFailure(res.statusCode, res.statusMessage, { url: url });\n\n }\n });\n\n });\n\n request.on(\ "error\", function (error) {\n if (onFailure)\n onFailure(error.code, error.message, { url: url });\n });\n\n if (options.postData) {\n request.write(options.postData);\n }\n\n request.end();\n\n };\n\n })();\n\n} else {\n\n var Pend=_ _webpack_require__(/*! pend */ \ "./node_modules/pend/index.js\");\n var xhrThrottle=n ew Pend();\n xhrThrottle.max=2 5;\n\n var protocolPortMap={ };\n var pendingPortRequest={ };\n var pendingRequestChannelMap={ };\n\n /**\n * Explain how the protocol handler working in general here\n * Why adding this function:\n * In Emscripten it has a virtual file system, it provide us ability to run wasm loader to load \n * native DWF models, and write the output in that virtual file system\n * \n * While, we run the extraction code in the worker, it makes us hard to read the data back since only \n * the worker thread can read that data. But we need put the resource in the bubble data to indicate that\n * this data is from Emscripten Virtual File System, the urn is not an http(s) or file.\n * \n * It makes the whole process complex, we don 't want to change the existing data schema(bubble) so we need\n * to add a support in the Xhr.js to support the this resource request.\n * \n * The idea here is we register a MessagePort in the main thread, and once we create a worker which need to\n * load the special resource, it will check whether this special protocol has a handler or not. If it does,\n * it will let the handler to do the heavy lifting. \n * \n * In the WorkerCreator, it will create new MessageChannel between new created worker and the main thread,\n * it became the bridge to get the actual resource from the loader who registered the protocol\n * \n */\n ViewingService.registerProtocolPort = function (protocol, port) {\n if (/^(http(s)?|file):/gi.test(protocol)) {\n // for peace of mind: security\n console.warn(\"http(s) or file protocol were not allowed to be handled\");\n return;\n }\n\n if (!port) {\n // means we need to remove if there is a port open\n if (protocolPortMap[protocol] && protocolPortMap[protocol] instanceof MessagePort) {\n protocolPortMap[protocol].onmessage = undefined;\n protocolPortMap[protocol] = undefined;\n }\n\n return;\n }\n\n protocolPortMap[protocol] = port;\n\n port.onmessage = function (message) {\n var url = message.data.url;\n if (pendingPortRequest[url]) {\n var pendingHandler = pendingPortRequest[url];\n\n if (message.data.error) {\n pendingHandler.onFailureWrapped(_ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.BAD_DATA,\n \"Malformed data received when requesting file\",\n { \"url\": url, \"exception\": message.data.error.message, \"stack\": message.data.error.stack });\n } else {\n // In the worker whom is root when request the data\n var rawbuf = message.data.buffer;\n pendingPortRequest[url] = undefined;\n\n if (rawbuf[0] === 31 && rawbuf[1] === 139 && url.match(/(.f2d|.gz)$/gi)) {\n try {\n rawbuf = (0,fflate__WEBPACK_IMPORTED_MODULE_86__.gunzipSync)(rawbuf);\n if (pendingHandler.options && pendingHandler.options.ondata) {\n pendingHandler.options.ondata(rawbuf);\n }\n pendingHandler.onSuccessWrapped(rawbuf);\n } catch (err) {\n pendingHandler.onFailureWrapped(_ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.BAD_DATA,\n \"Malformed data received when requesting file\",\n { \"url\": url, \"exception\": err.toString(), \"stack\": err.stack });\n }\n } else {\n pendingHandler.onSuccessWrapped(rawbuf);\n }\n }\n } else if (pendingRequestChannelMap[url]) {\n // For the middle man\n var transfer = [];\n if (message.data && message.data.buffer && message.data.buffer.buffer instanceof ArrayBuffer) {\n transfer.push(message.data.buffer.buffer);\n }\n pendingRequestChannelMap[url].postMessage(message.data, transfer);\n pendingRequestChannelMap[url] = undefined;\n }\n };\n };\n\n ViewingService.handlerProtocol = function (protocol, url, onSuccessWrapped, onFailureWrapped, options) {\n var port = protocolPortMap[protocol];\n pendingPortRequest[url] = {\n onSuccessWrapped,\n onFailureWrapped,\n options\n };\n\n port.postMessage({\n operation: ViewingService.WORKER_READ_FILE,\n url\n });\n\n };\n\n ViewingService.forwardProtocolHandlerToWorker = function (worker) {\n var map = {};\n\n // create the middle man who connect between the worker who need to request the resource\n // and the main thread\n var channel = new MessageChannel();\n channel.port1.onmessage = function (message) {\n var url = new URL(message.data.url);\n protocolPortMap[url.protocol].postMessage(message.data);\n pendingRequestChannelMap[url] = channel.port1;\n };\n\n for (var key in protocolPortMap) {\n if (protocolPortMap[key] instanceof MessagePort) {\n map[key] = channel.port2;\n }\n }\n\n worker.doOperation({\n operation: ViewingService.WORKER_REGISTER_FILE_PORT,\n protocolPortMap: map\n }, [channel.port2]);\n };\n\n /**\n * Performs a GET/HEAD request to the Viewing Service.\n *\n * @param {string} viewingServiceBaseUrl - The base url for the viewing service.\n * @param {string} api - The api to call in the viewing service.\n * @param {string} url - The url for the request.\n * @param {function} onSuccess - A function that takes a single parameter that represents the response\n * returned if the request is successful.\n * @param {function} onFailure - A function that takes an integer status code and a string status, which together\n * represent the response returned if the request is unsuccessful, and a third data argument, which has more\n * information about the failure. The data is a dictionary that minimally includes the url, and an exception if\n * one was raised.\n * @param {Object} [options] - A dictionary of options that can include:\n * {String} [method='get '] - The request method to use. Confusingly, this accepts any method, not just 'get ' and\n * 'head '. It seems like at least 'post ' is officially supported.\n * {Object} [postData] - The body data to send with the request. Use only in conjunction with method='post '.\n * {boolean} [noBody=false] - When true, will perform a HEAD request.\n * {Object} [headers] - A dictionary representing the additional headers to add. Will be ignored for signed urls.\n * {String} [queryParams] - A string representing the query parameters. It will only be used if the url is not\n * signed.\n * {Object} [range] - An object that defines the specifies the ranged response through 'min ' and 'max ' offsets\n * in bytes.\n * {String} [responseType='text '] - A string representing the response type for this request.\n * {boolean} [withCredentials=true] - Defines whether to send and store credentials. Will be ignored for signed\n * urls.\n * {boolean} [useFetch=false] - When true, the request will use fetch instead of XMLHttpRequest (experimental!).\n * {function}[onprogress] - If this is specified, the response will be received progressively. On each update,\n * the callback function is invoked with the full response that has been received up to\n * that point.\n * {function}[ondata] - If this is specified, the response will be received progressively. On each update,\n * the callback function is invoked with only the new chunk of data.\n */\n ViewingService.rawGet = function (viewingServiceBaseUrl, api, url, onSuccess, onFailure, options) {\n xhrThrottle.go((pendCB) => {\n let onFailureWrapped = function () {\n pendCB();for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}\n onFailure && onFailure.apply(onFailure, args);\n };\n\n let onSuccessWrapped = function () {\n pendCB();for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {args[_key2] = arguments[_key2];}\n onSuccess && onSuccess.apply(onSuccess, args);\n };\n\n var protocolMatch = /^(\\w+:)\\/\\//gi.exec(url);\n // if there is a special handler for this request, delegate this request to the handler\n if (protocolMatch && protocolMatch.length == 2 && protocolPortMap[protocolMatch[1]]) {\n ViewingService.handlerProtocol(protocolMatch[1], url, onSuccessWrapped, onFailureWrapped, options);\n } else {\n let getFunc = ViewingService._rawGet;\n if (options !== null && options !== void 0 && options.useFetch) {\n getFunc = ViewingService._rawGetFetch;\n }\n getFunc(viewingServiceBaseUrl, api, url, onSuccessWrapped, function () {\n const errorCode = arguments.length <= 0 ? undefined : arguments[0];\n const method = ((options === null || options === void 0 ? void 0 : options.method) || (options !== null && options !== void 0 && options.noBody ? 'HEAD ' : 'GET ')).toLowerCase();\n\n let shouldRetry = method === 'get ' && (\n // A status code of 0 indicates any sort of connection error (e.g. network issue, timeout or\n // CORS problems) or overall exception in the request code. We would usually not want to retry\n // requests that fail due to such errors. We still do it 'temporarily ', because DS has an issue\n // that leads to temporary CORS errors, which can be resolved by a retry. This is a client-side\n // work-around for a server-side issue, to unblock customers.\n // See https://jira.autodesk.com/browse/LMV-6827 and the corresponding DS ticket:\n // https://jira.autodesk.com/browse/DERI-8924\n errorCode === 0 ||\n errorCode === 429 ||\n errorCode >= 500);\n\n // Don't retry if the request was cancelled explicitly.\n const data=a rguments.length <=2 ? undefined : arguments[2];\n if (data.aborted) {\n shouldRetry=f alse;\n }\n\n if (shouldRetry) {\n const request=a rguments.length <=3 ? undefined : arguments[3];\n let delayMs=1 00;\n let timeMultiple=5 ;\n // 429 - too many requests, 503 - Service Unavailable until\n let retryAfter=f alse;\n if ((errorCode===4 29 || errorCode===5 03) && request !==n ull && request !==v oid 0 && request.getResponseHeader( 'Retry-After')) {\n retryAfter=r equest.getResponseHeader( 'Retry-After');\n } else if (errorCode===0 ) {\n retryAfter=3 ;\n timeMultiple=2 ;\n }\n if (retryAfter) {\n // retryAfter could be either delay-seconds or http-date \n const seconds=N umber(retryAfter);\n delayMs=! isNaN(seconds) && seconds * 1000 || Date.parse(retryAfter) - new Date().getTime();\n delayMs=d elayMs> 100 ? delayMs : 100;\n }\n\n ViewingService._retryRequest(viewingServiceBaseUrl, api, url, options, delayMs, timeMultiple).\n then((args) => {_logger_Logger__WEBPACK_IMPORTED_MODULE_80__.logger.warn(`request ${url} successful after retries.`);onSuccessWrapped(...args);}).\n catch((args) => {_logger_Logger__WEBPACK_IMPORTED_MODULE_80__.logger.warn(`request ${url} unsuccessful after retries.`);onFailureWrapped(...args);});\n } else {\n onFailureWrapped(...arguments);\n }\n\n }, options);\n }\n });\n };\n\n\n ViewingService._retryRequest = function (viewingServiceBaseUrl, api, url, options, delayMs, timeMultiple) {\n const backOffOptions = {\n delayFirstAttempt: true,\n startingDelay: delayMs,\n numOfAttempts: 4,\n retry: (_ref, attemptNumber) => {let [errorCode, errorMsg, { url }] = _ref;\n _logger_Logger__WEBPACK_IMPORTED_MODULE_80__.logger.warn(`request ${url} failed with status ${errorCode} ${errorMsg}. Attempt ${attemptNumber}`);\n return true;\n },\n timeMultiple: timeMultiple\n };\n\n return (0,exponential_backoff__WEBPACK_IMPORTED_MODULE_85__.backOff)(() => new Promise((resolve, reject) => {\n let getFunc = ViewingService._rawGet;\n if (options !== null && options !== void 0 && options.useFetch) {\n getFunc = ViewingService._rawGetFetch;\n }\n getFunc(viewingServiceBaseUrl, api, url, function () {for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {args[_key3]=a rguments[_key3];}return resolve(args);}, function () {for (var _len4=a rguments.length, args=n ew Array(_len4), _key4=0 ; _key4 < _len4; _key4++) {args[_key4]=a rguments[_key4];}return reject(args);}, options);\n }), backOffOptions);\n };\n\n ViewingService.isOSSUrl=f unction (url) {\n if (!url) {\n return false;\n }\n\n return url.indexOf( '/oss/v2/buckets') !==- 1;\n };\n\n /**\n * Given an OSS URL, returns a signed-url.\n *\n * @param {string} url - The url for the request.\n *\n * @returns {Promise} that resolves with a simple success or fail of the request\n */\n ViewingService.getSignedS3DownloadUrl=f unction (url) {\n return new Promise((resolve)=> {\n const acmsessionIndex = url.indexOf(\"?acmsession=\");\n\n // When using signedURL, no need to append acmsession.\n if (acmsessionIndex !== -1) {\n url = url.substring(0, acmsessionIndex);\n }\n\n // https://wiki.autodesk.com/display/FDPA/API+Endpoints#APIEndpoints-GetDownloadURL\n url += \"/signeds3download?useCdn=true\";\n\n const request = new XMLHttpRequest();\n\n request.open('GET', url);\n\n // Bearer token is needed.\n request.setRequestHeader(\"Authorization\", _endpoints__WEBPACK_IMPORTED_MODULE_83__.endpoint.HTTP_REQUEST_HEADERS[\"Authorization\"]);\n request.responseType = 'json';\n\n request.send();\n\n const success = (e) => {\n const response = e.currentTarget.response;\n resolve(response.url);\n };\n\n const fail = () => {\n resolve(null);\n };\n\n request.onload = success;\n request.onerror = fail;\n request.ontimeout = fail;\n request.onabort = fail;\n });\n };\n\n /**\n * A specific implementation of `rawGet` that uses XMLHttpRequest. See `rawGet` for most of the common parameters.\n * We only document implementation-specific behavior here.\n *\n * @param {Object} [options] - In addition to the common options documented on `rawGet`:\n * {boolean} [asynchronous=true] - Whether the request is asynchronous or blocking.\n * Progressive loading (onprogress / ondata) requires `responseType='text'`.\n */\n ViewingService._rawGet = async function (viewingServiceBaseUrl, api, url, onSuccess, onFailure, options) {\n\n options = options || {};\n\n url = ViewingService.generateUrl(viewingServiceBaseUrl, api, url, options.apiData, options.escapeOssObjects, options.guid);\n\n let isSignedUrl = false;\n\n if (ViewingService.isOSSUrl(url)) {\n const signedUrl = await ViewingService.getSignedS3DownloadUrl(url);\n\n if (signedUrl) {\n url = signedUrl;\n isSignedUrl = true;\n } else {\n // In case that we couldn't get the signed URL for some reason, try to use the original URL.\n // If it's under 10MB it should work - so we got lucky.\n console.warn('Failed getting signed URL - Fallback to direct OSS resource.');\n }\n\n }\n\n // If we are dealing with signed URL, adding additional query params will prevent it from working.\n if (options.queryParams && !isSignedUrl) {\n var concatSymbol = url.indexOf('?') === -1 ? '?' : '&';\n url = url + concatSymbol + options.queryParams;\n }\n\n var request = new XMLHttpRequest();\n\n function onError(e) {\n if (onFailure)\n onFailure(request.status, request.statusText, { url: url }, request);\n }\n\n function onAbort(e) {\n if (onFailure)\n onFailure(request.status, 'request was aborted', { url: url, aborted: true }, request);\n }\n\n function fixJsonResponse(response) {\n if (options.responseType === \"json\") {\n try {\n if (response instanceof Uint8Array) {\n //This should only happen in the node.js case so we can do toString\n //instead of using the LMV utf8 converter.\n return (0,_lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_82__.blobToJson)(response);\n } else if (typeof response === \"string\") {\n return JSON.parse(response);\n }\n } catch (e) {}\n }\n return response;\n }\n\n function onLoad(e) {\n if (request.status >= 200 && request.status < 400) {\n\n if (request.response &&\n request.response instanceof ArrayBuffer) {\n\n var rawbuf;\n if (request.status===2 00 && options.range) {\n //If we requested a range, but the entire content was returned,\n //make sure to give back just the requested subset to the caller\n rawbuf=n ew Uint8Array(request.response, options.range.min, options.range.max - options.range.min);\n } else {\n rawbuf=n ew Uint8Array(request.response);\n }\n\n // It 's possible that if the Content-Encoding header is set,\n // the browser unzips the file by itself, so let's check if it did.\n if (rawbuf[0]===3 1 && rawbuf[1]===1 39) {\n if (!warnedGzip) {\n warnedGzip=t rue;\n _logger_Logger__WEBPACK_IMPORTED_MODULE_80__.logger.warn(\ "An LMV resource (\" + url + \ ") was not uncompressed by the browser. This hurts performance. Check the Content-Encoding header returned by the server and check whether you're getting double-compressed streams. The warning prints only once but it's likely the problem affects multiple resources.\");\n }\n try {\n rawbuf=( 0,fflate__WEBPACK_IMPORTED_MODULE_86__.gunzipSync)(rawbuf);\n } catch (err) {\n onFailure(_ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.BAD_DATA,\n \ "Malformed data received when requesting file\",\n { \ "url\": url, \ "exception\": err.toString(), \ "stack\": err.stack },\n request);\n }\n }\n\n onSuccess && onSuccess(fixJsonResponse(rawbuf));\n } else\n {\n var res=r equest.response;\n if (!res && (!options.responseType || options.responseType===\ "text\"))\n res=r equest.responseText;\n\n onSuccess && onSuccess(fixJsonResponse(res));\n }\n } else\n {\n onError(e);\n }\n }\n\n try {\n\n var isAsync=O bject.prototype.hasOwnProperty.call(options, 'asynchronous') ? options.asynchronous : true;\n request.open(options.method || (options.noBody ? 'HEAD' : 'GET'), url, isAsync);\n\n if (Object.prototype.hasOwnProperty.call(options, 'responseType')) {\n request.responseType=o ptions.responseType;\n }\n\n if (options.range) {\n request.setRequestHeader(\ "Range\", \ "bytes=\" + options.range.min + \ "-\" + options.range.max);\n }\n\n // In case that URL already signed, no need to add credentials to it.\n if (!isSignedUrl) {\n request.withCredentials=t rue;\n\n if (Object.prototype.hasOwnProperty.call(options, \ "withCredentials\"))\n request.withCredentials=o ptions.withCredentials;\n\n if (options.headers) {\n for (var header in options.headers) {\n request.setRequestHeader(header, options.headers[header]);\n\n // Disable withCredentials if header is Authorization type\n // NOTE: using withCredentials attaches cookie data to request\n if (header.toLocaleLowerCase()===\ "authorization\") {\n request.withCredentials=f alse;\n }\n }\n }\n }\n\n if (isAsync) {\n request.onload=o nLoad;\n request.onerror=o nError;\n request.ontimeout=o nError;\n request.onabort=o nAbort;\n\n if (options.ondata || options.onprogress) {\n\n //Set up incremental progress notification\n //if needed. We have to do some magic in order\n //to get the received data progressively.\n //https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest\n request.overrideMimeType( 'text/plain; charset=x-user-defined');\n options._dlProgress={ \n streamOffset: 0\n };\n\n request.onreadystatechange=f unction () {\n\n if (request.readyState> 2 && request.status === 200) {\n\n if (options.ondata) {\n\n var textBuffer = request.responseText;\n\n // No new data coming in.\n if (options._dlProgress.streamOffset >= textBuffer.length)\n return;\n\n var arrayBuffer = textToArrayBuffer(textBuffer, options._dlProgress.streamOffset);\n\n options._dlProgress.streamOffset = textBuffer.length;\n\n options.ondata(arrayBuffer);\n\n } else if (options.onprogress) {\n\n let abort = options.onprogress(request.responseText);\n if (abort)\n request.abort();\n }\n }\n };\n }\n }\n\n request.send(options.postData);\n\n if (!isAsync) {\n onLoad();\n }\n }\n catch (e) {\n onFailure(request.status, request.statusText, { url: url, exception: e }, request);\n }\n };\n\n // TODO: This method is not fully implemented yet, though (see todos in the code). At the moment, it's only fully\n // tested for the progressive loading of binary data, i.e. the case where options.onprogress is defined. All other\n // cases and response types are not supported yet.\n /**\n * A specific implementation of `rawGet` that uses fetch. See `rawGet` for most of the common parameters.\n * We only document implementation-specific behavior here.\n *\n * @param {Object} [options] - Details on the common options documented on `rawGet`:\n * Progressive loading (onprogress / ondata) will always return binary data (array buffers), regardless of\n * `responseType`.\n */\n ViewingService._rawGetFetch = async function (viewingServiceBaseUrl, api, url, onSuccess, onFailure, options) {\n\n options = options || {};\n\n url = ViewingService.generateUrl(viewingServiceBaseUrl, api, url, options.apiData, options.escapeOssObjects, options.guid);\n\n let isSignedUrl = false;\n\n if (ViewingService.isOSSUrl(url)) {\n const signedUrl = await ViewingService.getSignedS3DownloadUrl(url);\n\n if (signedUrl) {\n url = signedUrl;\n isSignedUrl = true;\n } else {\n // In case that we couldn't get the signed URL for some reason, try to use the original URL.\n // If it's under 10MB it should work - so we got lucky.\n console.warn('Failed getting signed URL - Fallback to direct OSS resource.');\n }\n }\n\n // If we are dealing with signed URL, adding additional query params will prevent it from working.\n if (options.queryParams && !isSignedUrl) {\n var concatSymbol = url.indexOf('?') === -1 ? '?' : '&';\n url = url + concatSymbol + options.queryParams;\n }\n\n var request = new Request(url);\n var response;\n var abortController = new AbortController();\n\n /**\n * The fetch API is not fully compatible with the XMLHttpRequest API.\n * For _rawGet, the `onFailure` callback can receive the XMLHttpRequest's `request` object as the 4th parameter.\n * There is no corresponding object for fetch that would provide a compatible API. A thorough search through the\n * code base suggests that this parameter is only used in the `rawGet` error handler to read the `retryAfter`\n * header, so we provide a proxy object that mimics this single API.\n * @param {Response} response The response of the fetch request.\n * @returns {Object} A proxy object that mimics the API of an XMLHttpRequest's 'request' instance, to the extent\n * that we found to be used in the code.\n */\n function wrapResponse(response) {\n return {\n getResponseHeader: (header) => {var _response$headers;return response === null || response === void 0 || (_response$headers = response.headers) === null || _response$headers === void 0 ? void 0 : _response$headers.get(header);}\n };\n }\n\n /**\n * This is called when the request failed with an HTTP error code (not for actual exceptions, e.g. network errors)\n * @param {Number} status The status code of the response.\n * @param {String} statusText The status text of the response.\n * @param {Response} response The response object of the fetch request.\n */\n function onError(status, statusText, response) {\n if (onFailure)\n onFailure(status, statusText, { url: url }, wrapResponse(response));\n }\n\n /**\n * This is called when the request is aborted by the code that initiated the request.\n * @param {Response} [response=undefined] The response of the fetch request. Can be undefined if the request is\n * aborted before any response is received.\n */\n function onAbort() {let response = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n if (onFailure)\n onFailure(0, 'request was aborted', { url: url, aborted: true }, wrapResponse(response));\n }\n\n // TODO: This might be obsolete once we handle JSON responses properly in onLoad.\n // Or maybe we still need it to generate JSON results if the user requested that, while the actual response type\n // was binary or string?\n function fixJsonResponse(response) {\n if (options.responseType === \"json\") {\n try {\n if (response instanceof Uint8Array) {\n //This should only happen in the node.js case so we can do toString\n //instead of using the LMV utf8 converter.\n return (0,_lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_82__.blobToJson)(response);\n } else if (typeof response === \"string\") {\n return JSON.parse(response);\n }\n } catch (e) {}\n }\n return response;\n }\n\n /**\n * This is called when the request completed successfully.\n * @param {Response} response The response object of the fetch request.\n * @param {ArrayBuffer|undefined} data The response data. This will only be set if the response has already been\n * processed progressively (as we cannot access the data via the response anymore in that case). Otherwise, the\n * data needs to be accessed through the response.\n */\n async function onLoad(response) {let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n if (response.status >= 200 && response.status < 400) {\n\n // eslint-disable-next-line no-constant-condition\n if (false) { var rawbuf; } else\n {\n var res;\n if (response.bodyUsed) {// the data has already been read progressively\n res=d ata;\n } else if (!options.responseType || options.responseType===\ "text\") {\n res=a wait response.text();\n } else {\n res=a wait response.arrayBuffer();\n }\n // TODO: Handle other types, i.e. json (might make fixJsonResponse obsolete), blob or document.\n // options.responseType can only provide a hint to what the user expects. We also need to look at\n // response headers (content-type) to determine the actual response format (we should still try to\n // provide the type that was requested by the user, if possible).\n\n onSuccess && onSuccess(fixJsonResponse(res));\n }\n } else\n {\n onError(response.status, response.responseText, response);\n }\n }\n\n try {\n\n const requestOptions={ \n method: options.method || (options.noBody ? 'HEAD' : 'GET'),\n body: options.postData,\n headers: options.headers || {},\n signal: abortController.signal\n };\n\n if (options.range) {\n requestOptions.headers.Range=\ "bytes=\" + options.range.min + \ "-\" + options.range.max;\n }\n\n // In case that URL already signed, no need to add credentials to it.\n if (!isSignedUrl) {\n requestOptions.credentials='include' ;\n\n if (Object.prototype.hasOwnProperty.call(options, \ "withCredentials\") && options.withCredentials===f alse)\n requestOptions.credentials='omit' ;\n\n if (options.headers) {\n for (var header in options.headers) {\n // Disable withCredentials if header is Authorization type\n // NOTE: using withCredentials attaches cookie data to request\n if (header.toLocaleLowerCase()===\ "authorization\") {\n requestOptions.credentials='omit' ;\n }\n }\n }\n }\n\n response=a wait fetch(request, requestOptions);\n\n if (response.ok) {\n\n if (options.ondata || options.onprogress) {// requester expects progressive updates\n\n const reader=r esponse.body.getReader();\n\n let aggregateBuffer;\n let currentView;\n if (options.onprogress) {\n const contentLength=r esponse.headers.get( 'content-length');\n // Note that content-length will usually refer to the gzipped size, while this array is supposed\n // to store the uncompressed data. So we will have to resize it during the download.\n if (contentLength) {\n aggregateBuffer=n ew Uint8Array(contentLength);\n } else {\n aggregateBuffer=n ew Uint8Array(5 << 11); // start with 10 kb; this is arbitrary\n }\n }\n\n let receivedLength=0 ;\n\n const progressCallback=( _ref2)=> {let { done, value } = _ref2;\n if (done) {\n if (options.onprogress && receivedLength < aggregateBuffer.length) {\n // TODO: Is it better to copy instead of just creating a view, so that unused memory can be freed?\n aggregateBuffer=n ew Uint8Array(aggregateBuffer.buffer, 0, receivedLength);\n }\n\n onLoad(response, aggregateBuffer);\n return;\n }\n\n if (options.ondata) {\n options.ondata(value); // only send the incremental update\n } else {// onprogress\n // We need to keep track of the entire response.\n if (aggregateBuffer.length < value.length + receivedLength) {\n const newlen=M ath.max(aggregateBuffer.length * 2, value.length + receivedLength);\n var newBuffer=n ew Uint8Array(newlen);\n newBuffer.set(aggregateBuffer);\n aggregateBuffer=n ewBuffer;\n }\n aggregateBuffer.set(value, receivedLength);\n receivedLength +=v alue.length;\n\n currentView=n ew Uint8Array(aggregateBuffer.buffer, 0, receivedLength);\n\n const abort=o ptions.onprogress(currentView); // send everything that has been received so far\n\n if (abort) {\n reader.cancel();\n abortController.abort();\n onAbort(response);\n return;\n }\n }\n\n reader.read().then(progressCallback);\n };\n\n // TODO: This (and the instance above) might need error handling (catch), unless this is handled by\n // the try ... catch already.\n reader.read().then(progressCallback);\n } else {// requester expects one-time full response\n onLoad(response);\n }\n } else {// We got a status code that indicates an error (400+)\n onError(response.status, response.statusText, response);\n }\n }\n catch (e) {\n // We might not have a valid response object in this case.\n if (response) {\n onFailure(response.status, response.statusText, { url: url, exception: e }, wrapResponse(response));\n } else {\n onFailure(0, \ "network error\", { url: url, exception: e });\n }\n }\n };\n\n} // browser get implementation\n\n// Create the default failure callback.\n//\nViewingService.defaultFailureCallback=f unction (httpStatus, httpStatusText, data) {\n if (httpStatus==4 03) {\n this.raiseError(\n _ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.NETWORK_ACCESS_DENIED,\n \ "Access denied to remote resource\",\n { \ "url\": data.url, \ "httpStatus\": httpStatus, \ "httpStatusText\": httpStatusText });\n } else\n if (httpStatus==4 04) {\n this.raiseError(\n _ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.NETWORK_FILE_NOT_FOUND,\n \ "Remote resource not found\",\n { \ "url\": data.url, \ "httpStatus\": httpStatus, \ "httpStatusText\": httpStatusText });\n } else\n if (httpStatus===0 && data.aborted) {\n this.raiseError(\n _ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.LOAD_CANCELED,\n \ "Request aborted\",\n { \ "url\": data.url, \ "httpStatus\": httpStatus, \ "httpStatusText\": httpStatusText });\n } else\n if (httpStatus>= 500 && httpStatus < 600) {\n this.raiseError(\n _ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.NETWORK_SERVER_ERROR,\n \ "Server error when accessing resource\",\n { \ "url\": data.url, \ "httpStatus\": httpStatus, \ "httpStatusText\": httpStatusText });\n } else\n if (data.exception) {\n this.raiseError(\n _ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.NETWORK_FAILURE,\n \ "Network failure\",\n { \ "url\": data.url, \ "exception\": data.exception.toString(), \ "stack\": data.exception.stack });\n } else\n {\n this.raiseError(\n _ErrorCodes__WEBPACK_IMPORTED_MODULE_81__.ErrorCodes.NETWORK_UNHANDLED_RESPONSE_CODE,\n \ "Unhandled response code from server\",\n { \ "url\": data.url, \ "httpStatus\": httpStatus, \ "httpStatusText\": httpStatusText, data: data });\n }\n};\n\n\n\nfunction copyOptions(loadContext, options) {\n\n //Those are the usual defaults when called from the LMV worker\n\n if (!Object.prototype.hasOwnProperty.call(options, \ "responseType\"))\n options.responseType=\ "arraybuffer\";\n\n //Add options junk we got from the main thread context\n\n if (!Object.prototype.hasOwnProperty.call(options, \ "withCredentials\"))\n options.withCredentials=! !loadContext.auth;\n\n options.headers=l oadContext.headers;\n options.queryParams=l oadContext.queryParams;\n options.endpoint=l oadContext.endpoint;\n options.escapeOssObjects=l oadContext.escapeOssObjects;\n}\n\n//Utility function called from the web worker to set up the options for a get request,\n//then calling ViewingService.get internally\nViewingService.getItem=f unction (loadContext, url, onSuccess, onFailure, options) {\n\n options=o ptions || {};\n\n copyOptions(loadContext, options);\n\n //If the endpoint does not support range requests (Apigee), then convert\n //the range to start/end URL parameters.\n if (options.range && !loadContext.supportsRangeRequests) {\n\n let rangeParam=\ "start=\" + options.range.min + \ "&end=\" + options.range.max;\n if (options.queryParams) {\n options.queryParams +=\ "&\" + rangeParam;\n } else {\n options.queryParams=r angeParam;\n }\n\n options.range=u ndefined;\n }\n\n ViewingService.rawGet(loadContext.endpoint, 'items', url, onSuccess, onFailure, options);\n\n};\n\n//Utility function called from the web worker to set up the options for a get request,\n//then calling ViewingService.get internally\nViewingService.getManifest=f unction (loadContext, url, onSuccess, onFailure, options) {\n\n options=o ptions || {};\n\n if (!Object.prototype.hasOwnProperty.call(options, \ "responseType\"))\n options.responseType=\ "json\";\n\n copyOptions(loadContext, options);\n\n ViewingService.rawGet(loadContext.endpoint, 'bubbles', url, onSuccess, onFailure, options);\n\n};\n\nViewingService.getProperties=f unction (loadContext, url, guid, query, onSuccess, onFailure) {\n const options={ };\n copyOptions(loadContext, options);\n options.responseType='json' ;\n options.guid=g uid;\n options.method='POST' ;\n options.postData=J SON.stringify(query);\n options.headers[ 'Content-Type']='application/json' ;\n options.headers[ 'accept']='application/json' ;\n options.headers[ 'Access-Control-Allow-Origin']='*' ;\n ViewingService.rawGet(loadContext.endpoint, 'properties', url, onSuccess, onFailure, options);\n};\n\n//Utility function called from the web worker to set up the options for a get request,\n//then calling ViewingService.get internally\nViewingService.getThumbnail=f unction (loadContext, url, onSuccess, onFailure, options) {\n\n options=o ptions || {};\n\n copyOptions(loadContext, options);\n\n var queryParams=o ptions.queryParams || '';\n var missingElements=[ ];\n if (queryParams.indexOf( 'guid=')===- 1 && options.guid) {\n missingElements.push(\ "guid=\" + encodeURIComponent(options.guid));\n }\n if (queryParams.indexOf( 'role=')===- 1) {\n var role=o ptions.role || \ "rendered\";\n missingElements.push(\ "role=\" + role);\n }\n if (queryParams.indexOf( 'width=')===- 1) {\n let sz=o ptions.size || 400;\n missingElements.push(\ "width=\" + sz);\n }\n if (queryParams.indexOf( 'height=')===- 1) {\n let sz=o ptions.size || 400;\n missingElements.push(\ "height=\" + sz);\n }\n if (queryParams.indexOf( 'acmsession=')===- 1 && options.acmsession) {\n missingElements.push(\ "acmsession=\" + options.acmsession);\n }\n var thumbQueryParams=m issingElements.join( '&');\n\n if (options.queryParams) {\n options.queryParams=o ptions.queryParams + '&' + thumbQueryParams;\n } else {\n options.queryParams=t humbQueryParams;\n }\n\n ViewingService.rawGet(loadContext.endpoint, 'thumbnails', url, onSuccess, onFailure, options);\n};\n\n\nViewingService.getACMSession=f unction (endpoint, acmProperties, onSuccess, onFailure) {\n const backOffOptions={ \n numOfAttempts: 4,\n timeMultiple: 5,\n retry: (_, attemptNumber)=> {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_80__.logger.warn(`acmsession request failed. Attempt #${attemptNumber}`);\n return true;\n }\n };\n\n (0,exponential_backoff__WEBPACK_IMPORTED_MODULE_85__.backOff)(() => new Promise((resolve, reject) => {\n ViewingService._getACMSession(endpoint, acmProperties, resolve, reject);\n }), backOffOptions).\n then(function () {return onSuccess(...arguments);}).\n catch(function () {return onFailure(...arguments);});\n};\n\n\nViewingService._getACMSession = function (endpoint, acmProperties, onSuccess, onFailure) {\n\n var acmHeaders = {};\n var token;\n\n for (var key in acmProperties) {\n\n if (key === \"oauth2AccessToken\")\n token = acmProperties[key];else\n\n if (key.indexOf(\"x-ads-acm\") !== -1)\n acmHeaders[key] = acmProperties[key];\n }\n\n // The value of this can be anything. Required for some arcane reasons.\n acmHeaders.application = \"autodesk\";\n\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\", endpoint + '/oss-ext/v2/acmsessions', true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.setRequestHeader(\"Authorization\", \"Bearer \" + token);\n xhr.responseType = \"json\";\n\n xhr.onload = function () {\n if (xhr.status === 200 && xhr.response) {\n // If the response is a string (e.g. from IE), need to parse it to an object first\n var response = typeof xhr.response === 'string' ? JSON.parse(xhr.response) : xhr.response;\n\n if (response && response.acmsession) {\n onSuccess(response.acmsession);\n } else\n {\n onFailure(xhr.status, \"Can't get acm session from response.\");\n }\n\n } else {\n onFailure(xhr.status);\n }\n };\n\n xhr.onerror = onFailure;\n xhr.ontimeout = onFailure;\n xhr.send(JSON.stringify(acmHeaders));\n\n // \"application\" header is only required for OSS end point, and should not be passed\n // with normal requests because this header is not in allowed header sets of APIGEE.\n delete acmHeaders.application;\n\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL25ldC9YaHIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQUE7OztBQUc2QztBQUNIO0FBQ2U7QUFDbEI7QUFDWTtBQUNMO0FBQ1Y7O0FBRXpCLElBQUlRLGNBQWMsR0FBRyxDQUFFLENBQUM7QUFDL0JBLGNBQWMsQ0FBQ0MseUJBQXlCLEdBQUcsb0JBQW9CO0FBQy9ERCxjQUFjLENBQUNFLGdCQUFnQixHQUFHLFdBQVc7O0FBRTdDLElBQUlDLFVBQVUsR0FBRyxLQUFLOztBQUV0QjtBQUNBO0FBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0MsSUFBSSxFQUFFOztFQUV4QixJQUFJQyxRQUFRLEdBQUdELElBQUksQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQztFQUM5QixJQUFJRCxRQUFRLENBQUNFLE1BQU0sSUFBSSxDQUFDO0VBQ3BCLE9BQU9ILElBQUk7O0VBRWYsSUFBSUksS0FBSyxHQUFHLEVBQUU7RUFDZCxLQUFLLElBQUlDLEtBQUssR0FBRyxDQUFDLEVBQUVBLEtBQUssR0FBR0osUUFBUSxDQUFDRSxNQUFNLEVBQUUsRUFBRUUsS0FBSyxFQUFFO0lBQ2xELElBQUlDLENBQUMsR0FBR0wsUUFBUSxDQUFDSSxLQUFLLENBQUM7SUFDdkIsSUFBSUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtNQUNYO0lBQ0osQ0FBRyxJQUFJQSxDQUFDLEtBQUssSUFBSSxJQUFJRixLQUFLLENBQUNELE1BQU0sRUFBRTtNQUMvQkMsS0FBSyxDQUFDRyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUMsTUFBTTtNQUNISCxLQUFLLENBQUNJLElBQUksQ0FBQ0YsQ0FB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akNoUCxTQUFTLENBQUM0SixRQUFRLENBQUNvRixVQUFVLENBQUM7TUFDbEMsQ0FBQztNQUNJO1FBQ0QvTyxTQUFTLENBQUN3UCxHQUFHLENBQUMxTCxNQUFNLEVBQUUsc0NBQXNDLENBQUM7TUFDakU7O0lBRUosQ0FBQyxNQUFNO01BQ0g5RCxTQUFTLENBQUN3UCxHQUFHLENBQUMxTCxNQUFNLENBQUM7SUFDekI7RUFDSixDQUFDOztFQUVEMEwsR0FBRyxDQUFDekYsT0FBTyxHQUFHL0osU0FBUztFQUN2QndQLEdBQUcsQ0FBQ3hGLFNBQVMsR0FBR2hLLFNBQVM7RUFDekJ3UCxHQUFHLENBQUMvRixJQUFJLENBQUNwSixJQUFJLENBQUNvTyxTQUFTLENBQUNZLFVBQVUsQ0FBQyxDQUFDOztFQUVwQztFQUNBO0VBQ0EsT0FBT0EsVUFBVSxDQUFDRSxXQUFXOztBQUVqQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9uZXQvWGhyLmpzP2Q3MDUiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlc2UgYXJlIG5lZWRlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFzeW5jL2F3YWl0LlxuaW1wb3J0IFwiY29yZS1qc1wiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vbG9nZ2VyL0xvZ2dlclwiO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gXCIuL0Vycm9yQ29kZXNcIjtcbmltcG9ydCB7IGJsb2JUb0pzb24gfSBmcm9tICcuLi9sbXZ0ay9jb21tb24vU3RyaW5nVXRpbHMnO1xuaW1wb3J0IHsgZW5kcG9pbnQgfSBmcm9tIFwiLi9lbmRwb2ludHNcIjtcbmltcG9ydCB7IGlzTm9kZUpTLCBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vY29tcGF0XCI7XG5pbXBvcnQgeyBiYWNrT2ZmIH0gZnJvbSAnZXhwb25lbnRpYWwtYmFja29mZic7XG5pbXBvcnQgeyBndW56aXBTeW5jIH0gZnJvbSAnZmZsYXRlJztcblxuICAgIGV4cG9ydCBsZXQgVmlld2luZ1NlcnZpY2UgPSB7IH07XG4gICAgVmlld2luZ1NlcnZpY2UuV09SS0VSX1JFR0lTVEVSX0ZJTEVfUE9SVCA9IFwiUkVHSVNURVJfRklMRV9QT1JUXCI7XG4gICAgVmlld2luZ1NlcnZpY2UuV09SS0VSX1JFQURfRklMRSA9IFwiUkVBRF9GSUxFXCI7XG5cbiAgICB2YXIgd2FybmVkR3ppcCA9IGZhbHNlO1xuXG4gICAgLy8gU2ltcGxpZnkgVW5peCBzdHlsZSBmaWxlIHBhdGguIEZvciBleGFtcGxlLCB0dXJuICcvYS8uL2IvLi4vLi4vYy8nIGludG8gXCIvY1wiLlxuICAgIC8vIFJlcXVpcmVkIHRvIGRlYWwgd2l0aCBPU1MgY3JhcHB5IFVSTnMgd2hlcmUgdGhlcmUgYXJlIGVtYmVkZGVkICcuLicuXG4gICAgZnVuY3Rpb24gc2ltcGxpZnlQYXRoKHBhdGgpIHtcblxuICAgICAgICB2YXIgZWxlbWVudHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xuXG4gICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudHMubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICAgICAgICB2YXIgYyA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChjID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gIGlmIChjID09PSAnLi4nICYmIHN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gR3JlYXQsIHRoZSBwYXRoIGNvbW1pdHMgc3VpY2lkZS5cbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuXG4gICAgICAgIHJldHVybiBzdGFjay5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICAvL01hcHMgYSByZWxhdGl2ZSByZXNvdXJjZSBwYXRoIChsaWtlIGEgcGFjayBmaWxlIG9yIHRleHR1cmUpXG4gICAgLy90byBhbiBhYnNvbHV0ZSBVUkwuIElmIGFic29sdXRlQmFzZVBhdGggaXMgc3BlY2lmaWVkLCBpdCBpc1xuICAgIC8vdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGFic29sdXRlIFVSTCwgb3RoZXJ3aXNlIHRoZSB3aW5kb3cgbG9jYXRpb25cbiAgICAvL2lzIHVzZWQuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb1VSTChwYXRoLCBhYnNvbHV0ZUJhc2VQYXRoKSB7XG5cbiAgICAgICAgaWYgKHBhdGguaW5kZXhPZihcIjovL1wiKSAhPT0gLTEgfHxcbiAgICAgICAgICAgIHBhdGguaW5kZXhPZihcInVybjpcIikgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFic29sdXRlQmFzZVBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBhYnNvbHV0ZUJhc2VQYXRoICsgcGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IF93aW5kb3cgPSBnZXRHbG9iYWwoKTtcbiAgICAgICAgdmFyIHJvb3RSZWxQYXRoID0gX3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgLy9jaG9wIG9mZiB0aGUgaW5kZXguaHRtbCBwYXJ0XG4gICAgICAgIHZhciBsYXN0U2xhc2ggPSByb290UmVsUGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgIHJvb3RSZWxQYXRoID0gcm9vdFJlbFBhdGguc3Vic3RyKDAsIGxhc3RTbGFzaCsxKTtcbiAgICAgICAgdmFyIGFic1BhdGggPSBfd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgX3dpbmRvdy5sb2NhdGlvbi5ob3N0ICsgcm9vdFJlbFBhdGggKyBwYXRoO1xuICAgICAgICByZXR1cm4gYWJzUGF0aDtcbiAgICB9XG5cblxuICAgIFZpZXdpbmdTZXJ2aWNlLnNpbXBsaWZ5UGF0aCA9IHNpbXBsaWZ5UGF0aDtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiB0ZXh0VG9BcnJheUJ1ZmZlcih0ZXh0QnVmZmVyLCBzdGFydE9mZnNldCkge1xuICAgICAgICB2YXIgbGVuID0gdGV4dEJ1ZmZlci5sZW5ndGggLSBzdGFydE9mZnNldDtcbiAgICAgICAgdmFyIGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGxlbik7XG4gICAgICAgIHZhciB1aThhID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIDApO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHN0YXJ0T2Zmc2V0OyBpIDwgbGVuOyBpKyssIGorKylcbiAgICAgICAgICAgIHVpOGFbaV0gPSAodGV4dEJ1ZmZlci5jaGFyQ29kZUF0KGopICYgMHhmZik7XG4gICAgICAgIHJldHVybiB1aThhO1xuICAgIH1cblxuXG4gICAgVmlld2luZ1NlcnZpY2UuT1NTX1BSRUZJWCA9IFwidXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6XCI7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgZnVsbCBVUkwgZ2l2ZW4gYSBwb3RlbnRpYWxseSBwYXJ0aWFsIHZpZXdpbmcgc2VydmljZSBcInVybjpcIiBwcmVmaXhlZCByZXNvdXJjZVxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgVmlld2luZ1NlcnZpY2UuZ2VuZXJhdGVVcmwgPSBmdW5jdGlvbiAoYmFzZVVybCwgYXBpLCBwYXRoLCBhcGlEYXRhLCBlc2NhcGVPc3NPYmplY3RzLCBndWlkKSB7XG5cbiAgICAgICAgcGF0aCA9IHBhdGggfHwgXCJcIjtcblxuICAgICAgICAvL05PREVcbiAgICAgICAgaWYgKGlzTm9kZUpTKCkgJiYgIWlzUmVtb3RlUGF0aChiYXNlVXJsLCBwYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICBwYXRoID0gc2ltcGxpZnlQYXRoKHBhdGgpO1xuXG4gICAgICAgIC8vVjIgb25seSBhY2NlcHRzIFVSTCBlbmNvZGVkIHBhdGhzXG4gICAgICAgIHZhciB1cm5pZHggPSBwYXRoLmluZGV4T2YoXCJ1cm46XCIpO1xuICAgICAgICB2YXIgcWlkeCA9IHBhdGguaW5kZXhPZihcIj9cIik7XG4gICAgICAgIGlmICh1cm5pZHggIT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChxaWR4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vVE9ETzogbm90IHN1cmUgdGhpcyB3aWxsIGhhcHBlbiwgcXVlcnlQYXJhbXMgYXJlIG5vcm1hbGx5XG4gICAgICAgICAgICAgICAgLy9wYXNzZWQgaW4gc2VwYXJhdGVseSBpbiB0aGUgb3B0aW9ucyBvYmplY3RcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zbGljZSgwLCB1cm5pZHgpICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhdGguc2xpY2UodXJuaWR4LCBxaWR4KSkgKyBwYXRoLnNsaWNlKHFpZHgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zbGljZSgwLCB1cm5pZHgpICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhdGguc2xpY2UodXJuaWR4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXRoID0gZW5jb2RlVVJJKHBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT1NTIG9ubHkgYWNjZXB0cyBvYmplY3QgaWRzIHdpdGggZXNjYXBlZCBzbGFzaGVzXG4gICAgICAgIGlmIChlc2NhcGVPc3NPYmplY3RzICYmIFZpZXdpbmdTZXJ2aWNlLmlzT1NTVXJsKHBhdGgpKSB7XG4gICAgICAgICAgdmFyIG9iamVjdHNJbmRleCA9IHBhdGguaW5kZXhPZihcIi9vYmplY3RzL1wiKSArIDk7XG4gICAgICAgICAgdmFyIG9iamVjdFBhdGggPSBwYXRoLnN1YnN0cmluZyhvYmplY3RzSW5kZXgpO1xuICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBvYmplY3RzSW5kZXgpICsgZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9DaGVjayBpZiBpdCdzIGEgdmlld2luZyBzZXJ2aWNlIGl0ZW0gcGF0aFxuICAgICAgICAvL1B1YmxpYy9zdGF0aWMgY29udGVudCB3aWxsIG5vdCBoYXZlIHRoZSB1cm46IHByZWZpeC5cbiAgICAgICAgLy9TbyBVUkwgY29uc3RydWN0aW9uIGlzIGEgbm8tb3BcbiAgICAgICAgaWYgKCFhcGkgfHwgZGVjb2RlVVJJQ29tcG9uZW50KHBhdGgpLmluZGV4T2YoJ3VybjonKSAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKGlzUmVtb3RlUGF0aChudWxsLCBwYXRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVVybCArIHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICAvL1JlbW92ZSBcInVybjpcIiBwcmVmaXggd2hlbiBnZXR0aW5nIFVSTi1iYXNlZCBzdHVmZiAobWFuaWZlc3RzIGFuZCB0aHVtYm5haWxzKVxuICAgICAgICBpZiAoYXBpICE9PSAnaXRlbXMnKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoNik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGFwaSkge1xuICAgICAgICAgICAgY2FzZSBcIml0ZW1zXCI6IHJldHVybiBlbmRwb2ludC5nZXRJdGVtQXBpKGJhc2VVcmwsIHBhdGgsIGFwaURhdGEpO1xuICAgICAgICAgICAgY2FzZSBcImJ1YmJsZXNcIjogcmV0dXJuIGVuZHBvaW50LmdldE1hbmlmZXN0QXBpKGJhc2VVcmwsIHBhdGgsIGFwaURhdGEpO1xuICAgICAgICAgICAgY2FzZSBcInRodW1ibmFpbHNcIjogcmV0dXJuIGVuZHBvaW50LmdldFRodW1ibmFpbEFwaShiYXNlVXJsLCBwYXRoLCBhcGlEYXRhKTtcbiAgICAgICAgICAgIGNhc2UgXCJwcm9wZXJ0aWVzXCI6IHJldHVybiBlbmRwb2ludC5nZXRQcm9wZXJ0eVF1ZXJ5QXBpKGJhc2VVcmwsIHBhdGgsIGFwaURhdGEsIGd1aWQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGlzUmVtb3RlUGF0aChiYXNlVXJsLCBwYXRoKSB7XG4gICAgICAgIGlmIChwYXRoLmluZGV4T2YoXCJmaWxlOi8vXCIpICE9PSAtMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHBhdGguaW5kZXhPZihcIjovL1wiKSAhPT0gLTEpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGJhc2VVcmwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cblxuLy9Db25kaXRpb25hbCBHRVQgcmVxdWVzdCBpbXBsZW1lbnRhdGlvbiBmb3Igbm9kZSB2cy4gYnJvd3NlclxuaWYgKGlzTm9kZUpTKCkpIHtcblxuKGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICB2YXIgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbiAgICB2YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuICAgIHZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xuICAgIHZhciB1cmxsaWIgPSByZXF1aXJlKCd1cmwnKTtcblxuICAgIGxldCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcbiAgICAgICAga2VlcEFsaXZlIDogdHJ1ZSxcbiAgICAgICAga2VlcEFsaXZlTXNlY3M6IDEwMCxcbiAgICAgICAgbWF4U29ja2V0czogMTBcbiAgICB9KTtcbiAgICBsZXQgaHR0cEFnZW50ID0gbmV3IGh0dHAuQWdlbnQoe1xuICAgICAgICBrZWVwQWxpdmUgOiB0cnVlLFxuICAgICAgICBrZWVwQWxpdmVNc2VjczogMTAwLFxuICAgICAgICBtYXhTb2NrZXRzOiAxMFxuICAgIH0pO1xuXG5cbiAgICB2YXIgZm9yZ2VBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7bWF4U29ja2V0czoxMH0pO1xuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsRmlsZSh1cmwsIG9uU3VjY2Vzcywgb25GYWlsdXJlLCBvcHRpb25zKSB7XG5cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFwiZmlsZTovL1wiKSA9PT0gMClcbiAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHIoNyk7XG5cbiAgICAgICAgZnVuY3Rpb24gcG9zdFByb2Nlc3MoZGF0YSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVzcG9uc2VUeXBlID09PSBcImpzb25cIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb25GYWlsdXJlKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9BbHdheXMgdXNlIGFzeW5jIG9uIE5vZGVcbiAgICAgICAgZnMucmVhZEZpbGUodXJsLCBmdW5jdGlvbihlcnJvciwgZGF0YSkge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25GYWlsdXJlKDAsMCx7aHR0cFN0YXR1c1RleHQ6ZXJyb3IsIHVybDp1cmx9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFbMF0gPT09IDMxICYmIGRhdGFbMV0gPT09IDEzOSkge1xuICAgICAgICAgICAgICAgICAgICB6bGliLmd1bnppcChkYXRhLCBudWxsLCBmdW5jdGlvbihlcnJvciwgZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmFpbHVyZSgwLDAse2h0dHBTdGF0dXNUZXh0OmVycm9yLCB1cmw6dXJsfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9zdFByb2Nlc3MoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uZGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblN1Y2Nlc3MoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwb3N0UHJvY2VzcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbmRhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZWVkc0d1bnppcChyZXMsIHBhdGhuYW1lKSB7XG5cbiAgICAgICAgaWYgKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPT09ICdnemlwJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vVGhlc2UgU1ZGIHJlbGF0ZWQgZmlsZXMgY29tZSBwcmUtZ3ppcHBlZFxuICAgICAgICAvL3JlZ2FyZGxlc3Mgb2YgY29udGVudC1lbmNvZGluZyBoZWFkZXJcblxuICAgICAgICBpZiAocGF0aG5hbWUuZW5kc1dpdGgoXCIuanNvbi5nelwiKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGlmIChwYXRobmFtZS5lbmRzV2l0aChcIkZyYWdtZW50TGlzdC5wYWNrXCIpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgaWYgKHBhdGhuYW1lLmVuZHNXaXRoKFwiTGlnaHRMaXN0LmJpblwiKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGlmIChwYXRobmFtZS5lbmRzV2l0aChcIkNhbWVyYUxpc3QuYmluXCIpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgaWYgKHBhdGhuYW1lLmVuZHNXaXRoKFwiQ2FtZXJhRGVmaW5pdGlvbnMuYmluXCIpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgaWYgKHBhdGhuYW1lLmVuZHNXaXRoKFwiTGlnaHREZWZpbml0aW9ucy5iaW5cIikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiAgUGVyZm9ybXMgYSBHRVQvSEVBRCByZXF1ZXN0IHRvIFZpZXdpbmcgU2VydmljZS4gKE5vZGUuanMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24pXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmlld2luZ1NlcnZpY2VCYXNlVXJsIC0gVGhlIGJhc2UgdXJsIGZvciB0aGUgdmlld2luZyBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBUaGUgYXBpIHRvIGNhbGwgaW4gdGhlIHZpZXdpbmcgc2VydmljZS5cbiAgICAgKiAgQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSB1cmwgZm9yIHRoZSByZXF1ZXN0LlxuICAgICAqICBAcGFyYW0ge2Z1bmN0aW9ufSBvblN1Y2Nlc3MgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVzcG9uc2VcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bC5cbiAgICAgKiAgQHBhcmFtIHtmdW5jdGlvbn0gb25GYWlsdXJlIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIGludGVnZXIgc3RhdHVzIGNvZGUsIGFuZCBhIHN0cmluZyBzdGF0dXMsIHdoaWNoIHRvZ2V0aGVyIHJlcHJlc2VudFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzcG9uc2UgcmV0dXJuZWQgaWYgdGhlIHJlcXVlc3QgaXMgdW5zdWNjZXNzZnVsLCBhbmQgYSB0aGlyZCBkYXRhIGFyZ3VtZW50LCB3aGljaFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmFpbHVyZS4gIFRoZSBkYXRhIGlzIGEgZGljdGlvbmFyeSB0aGF0IG1pbmltYWxseSBpbmNsdWRlc1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdXJsLCBhbmQgYW4gZXhjZXB0aW9uIGlmIG9uZSB3YXMgcmFpc2VkLlxuICAgICAqICBAcGFyYW0ge09iamVjdD19IFtvcHRpb25zXSAtIEEgZGljdGlvbmFyeSBvZiBvcHRpb25zIHRoYXQgY2FuIGluY2x1ZGU6XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyAtIEEgZGljdGlvbmFyeSByZXByZXNlbnRpbmcgdGhlIGFkZGl0aW9uYWwgaGVhZGVycyB0byBhZGQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgLSBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGUgLSBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHJlc3BvbnNlIHR5cGUgZm9yIHRoaXMgcmVxdWVzdC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ym9vbGVhbn0gW2VuY29kZVVybl0gLSB3aGVuIHRydWUsIGVuY29kZXMgdGhlIGRvY3VtZW50IHVybiBpZiBmb3VuZC5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ym9vbGVhbn0gW25vQm9keV0gLSB3aGVuIHRydWUsIHdpbGwgcGVyZm9ybSBhIEhFQUQgcmVxdWVzdFxuICAgICAqL1xuICAgIFZpZXdpbmdTZXJ2aWNlLnJhd0dldCA9IGZ1bmN0aW9uICh2aWV3aW5nU2VydmljZUJhc2VVcmwsIGFwaSwgdXJsLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSwgb3B0aW9ucykge1xuXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIHVybCA9IFZpZXdpbmdTZXJ2aWNlLmdlbmVyYXRlVXJsKHZpZXdpbmdTZXJ2aWNlQmFzZVVybCwgYXBpLCB1cmwsIHVuZGVmaW5lZCwgb3B0aW9ucy5lc2NhcGVPc3NPYmplY3RzKTtcblxuICAgICAgICBpZiAoIWlzUmVtb3RlUGF0aCh2aWV3aW5nU2VydmljZUJhc2VVcmwsIHVybCkpIHtcbiAgICAgICAgICAgIGxvYWRMb2NhbEZpbGUodXJsLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdmFyIGNvbmNhdFN5bWJvbCA9IHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnO1xuICAgICAgICAgICAgdXJsID0gdXJsICsgY29uY2F0U3ltYm9sICsgb3B0aW9ucy5xdWVyeVBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJzZWQgPSB1cmxsaWIucGFyc2UodXJsKTtcblxuICAgICAgICB2YXIgcmVxID0ge1xuICAgICAgICAgICAgaG9zdDogICAgICAgICAgICAgICAgICBwYXJzZWQuaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiAgICAgICAgICAgICAgICAgIHBhcnNlZC5wb3J0LFxuICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiLFxuICAgICAgICAgICAgcGF0aDogICAgICAgICAgICAgICAgICBwYXJzZWQucGF0aCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgfSxcbiAgICAgICAgICAgIHJldHJ5Q291bnQ6ICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGFnZW50OiAgICAgICAgICAgICAgICAgKHBhcnNlZC5wcm90b2NvbCA9PT0gXCJodHRwczpcIikgPyBodHRwc0FnZW50IDogaHR0cEFnZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgLy9Eb24ndCBvdmVybG9hZCBkZXJpdmF0aXZlIHNlcnZpY2Ugd2l0aCByZXF1ZXN0c1xuICAgICAgICBpZiAocmVxLmhvc3QuZW5kc1dpdGgoXCIuYXBpLmF1dG9kZXNrLmNvbVwiKSAmJlxuICAgICAgICAgICAgKHJlcS5wYXRoLnN0YXJ0c1dpdGgoXCIvZGVyaXZhdGl2ZXNlcnZpY2VcIikgfHwgcmVxLnBhdGguc3RhcnRzV2l0aChcIi9tb2RlbGRlcml2YXRpdmVcIikpKSB7XG4gICAgICAgICAgICByZXEuYWdlbnQgPSBmb3JnZUFnZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICByZXEuaGVhZGVyc1twXSA9IG9wdGlvbnMuaGVhZGVyc1twXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVxLmhlYWRlcnNbJ2FjY2VwdC1lbmNvZGluZyddKSB7XG4gICAgICAgICAgICByZXEuaGVhZGVyc1snYWNjZXB0LWVuY29kaW5nJ10gPSAnZ3ppcCwgZGVmbGF0ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5yYW5nZSkge1xuICAgICAgICAgICAgcmVxLmhlYWRlcnNbXCJSYW5nZVwiXSA9IFwiYnl0ZXM9XCIgKyBvcHRpb25zLnJhbmdlLm1pbiArIFwiLVwiICsgb3B0aW9ucy5yYW5nZS5tYXg7XG4gICAgICAgIH1cblxuICAgICAgICAvL1VuZG8gaGFjayB1c2VkIHRvIG1ha2Ugc3RyZWFtaW5nIHJlY2VpdmUgd29yayBvbiBicm93c2VyIFhIUiAtLSB0aGUgaGFja1xuICAgICAgICAvL2ludm9sdmVzIHByb2Nlc3NpbmcgdGhlIHJlc3BvbnNlIGFzIHRleHQsIHNvIHJlc3BvbnNlVHlwZSBpcyBzZXQgdG8gXCJcIi5cbiAgICAgICAgaWYgKG9wdGlvbnMub25kYXRhIHx8IG9wdGlvbnMub25wcm9ncmVzcykge1xuICAgICAgICAgICAgb3B0aW9ucy5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVxdWVzdCA9ICgocGFyc2VkLnByb3RvY29sID09PSBcImh0dHBzOlwiKSA/IGh0dHBzIDogaHR0cCkucmVxdWVzdChyZXEsIGZ1bmN0aW9uKHJlcykge1xuXG4gICAgICAgICAgICB2YXIgaGFzRXJyb3IgPSAgIShyZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPCA0MDApO1xuXG4gICAgICAgICAgICAvL1BpcGUgdGhyb3VnaCBndW56aXAgaWYgbmVlZGVkXG4gICAgICAgICAgICB2YXIgc3RyZWFtID0gcmVzO1xuICAgICAgICAgICAgaWYgKCFoYXNFcnJvciAmJiBuZWVkc0d1bnppcChyZXMsIHBhcnNlZC5wYXRobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0gPSByZXMucGlwZSh6bGliLmNyZWF0ZUd1bnppcCgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9EZWNvZGUgYXMgVVRGOCBzdHJpbmcgaWYgbmVlZGVkXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZXNwb25zZVR5cGUgPT09IFwianNvblwiIHx8IG9wdGlvbnMucmVzcG9uc2VUeXBlID09PSBcInRleHRcIiB8fCAhb3B0aW9ucy5yZXNwb25zZVR5cGUpXG4gICAgICAgICAgICAgICAgc3RyZWFtLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgY2h1bmtzID0gW107XG4gICAgICAgICAgICB2YXIgcmVjZWl2ZUJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNik7XG4gICAgICAgICAgICB2YXIgcmVjZWl2ZWRMZW4gPSAwO1xuICAgICAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcblxuICAgICAgICAgICAgICAgIC8vVGhlIG9ucHJvZ3Jlc3MgY2FsbGJhY2sgaXMgc3BlY2lhbCBpbiB0aGF0IGl0XG4gICAgICAgICAgICAgICAgLy93YW50IHVzIHRvIGFjY3VtdWxhdGUgdGhlIGRhdGEgYXMgd2UgcmVjZWl2ZSBpdCwgYW5kIGl0IG9ubHkgbG9va3MgYXQgaXQuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25wcm9ncmVzcykge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaHVuay5sZW5ndGggKyByZWNlaXZlZExlbiA+IHJlY2VpdmVCdWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCB8IE1hdGguY2VpbChyZWNlaXZlQnVmZmVyLmxlbmd0aCAqIDEuNSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZUJ1ZmZlci5jb3B5KG5iLCAwLCAwLCByZWNlaXZlZExlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlQnVmZmVyID0gbmI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjaHVuay5jb3B5KHJlY2VpdmVCdWZmZXIsIHJlY2VpdmVkTGVuLCAwLCBjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICByZWNlaXZlZExlbiArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhYm9ydCA9IG9wdGlvbnMub25wcm9ncmVzcyhyZWNlaXZlQnVmZmVyLCByZWNlaXZlZExlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhYm9ydClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbmRhdGEoY2h1bmspO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPCA0MDApIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXNwb25zZVR5cGUgPT09IFwianNvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvYmogPSBKU09OLnBhcnNlKGNodW5rcy5qb2luKCcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblN1Y2Nlc3MoanNvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVzcG9uc2VUeXBlID09PSBcInRleHRcIiB8fCBvcHRpb25zLnJlc3BvbnNlVHlwZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9IGNodW5rcy5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzcyhzdHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZiA9IG9wdGlvbnMub25wcm9ncmVzcyA/IHJlY2VpdmVCdWZmZXIgOiBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZlswXSA9PT0gMzEgJiYgYnVmWzFdID09PSAxMzkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJBbiBMTVYgcmVzb3VyY2UgKFwiICsgdXJsICsgXCIpIHdhcyBkb3VibGUgY29tcHJlc3NlZCwgb3IgQ29udGVudC1FbmNvZGluZyBoZWFkZXIgbWlzc2luZ1wiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSB6bGliLmd1bnppcFN5bmMoYnVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZExlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZhaWx1cmUoRXJyb3JDb2Rlcy5CQURfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNYWxmb3JtZWQgZGF0YSByZWNlaXZlZCB3aGVuIHJlcXVlc3RpbmcgZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwidXJsXCI6IHVybCwgXCJleGNlcHRpb25cIjogZXJyLnRvU3RyaW5nKCksIFwic3RhY2tcIjogZXJyLnN0YWNrIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDAgJiYgb3B0aW9ucy5yYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB3ZSByZXF1ZXN0ZWQgYSByYW5nZSwgYnV0IHRoZSBlbnRpcmUgY29udGVudCB3YXMgcmV0dXJuZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAvL21ha2Ugc3VyZSB0byBnaXZlIGJhY2sganVzdCB0aGUgcmVxdWVzdGVkIHN1YnNldCB0byB0aGUgY2FsbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheShidWYsIG9wdGlvbnMucmFuZ2UubWluLCBvcHRpb25zLnJhbmdlLm1heCAtIG9wdGlvbnMucmFuZ2UubWluKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzcyhidWYsIHJlY2VpdmVkTGVuKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRmFpbHVyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRmFpbHVyZShyZXMuc3RhdHVzQ29kZSwgcmVzLnN0YXR1c01lc3NhZ2UsIHt1cmw6IHVybH0pO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVxdWVzdC5vbihcImVycm9yXCIsIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAob25GYWlsdXJlKVxuICAgICAgICAgICAgICAgIG9uRmFpbHVyZShlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlLCB7dXJsOiB1cmx9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucG9zdERhdGEpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUob3B0aW9ucy5wb3N0RGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmVuZCgpO1xuXG4gICAgfTtcblxufSkoKTtcblxufSBlbHNlIHtcblxuICAgIHZhciBQZW5kID0gcmVxdWlyZShcInBlbmRcIik7XG4gICAgdmFyIHhoclRocm90dGxlID0gbmV3IFBlbmQoKTtcbiAgICB4aHJUaHJvdHRsZS5tYXggPSAyNTtcblxuICAgIHZhciBwcm90b2NvbFBvcnRNYXAgPSB7fTtcbiAgICB2YXIgcGVuZGluZ1BvcnRSZXF1ZXN0ID0ge307XG4gICAgdmFyIHBlbmRpbmdSZXF1ZXN0Q2hhbm5lbE1hcCA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogRXhwbGFpbiBob3cgdGhlIHByb3RvY29sIGhhbmRsZXIgd29ya2luZyBpbiBnZW5lcmFsIGhlcmVcbiAgICAgKiBXaHkgYWRkaW5nIHRoaXMgZnVuY3Rpb246XG4gICAgICogSW4gRW1zY3JpcHRlbiBpdCBoYXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtLCBpdCBwcm92aWRlIHVzIGFiaWxpdHkgdG8gcnVuIHdhc20gbG9hZGVyIHRvIGxvYWQgXG4gICAgICogbmF0aXZlIERXRiBtb2RlbHMsIGFuZCB3cml0ZSB0aGUgb3V0cHV0IGluIHRoYXQgdmlydHVhbCBmaWxlIHN5c3RlbVxuICAgICAqIFxuICAgICAqIFdoaWxlLCB3ZSBydW4gdGhlIGV4dHJhY3Rpb24gY29kZSBpbiB0aGUgd29ya2VyLCBpdCBtYWtlcyB1cyBoYXJkIHRvIHJlYWQgdGhlIGRhdGEgYmFjayBzaW5jZSBvbmx5IFxuICAgICAqIHRoZSB3b3JrZXIgdGhyZWFkIGNhbiByZWFkIHRoYXQgZGF0YS4gQnV0IHdlIG5lZWQgcHV0IHRoZSByZXNvdXJjZSBpbiB0aGUgYnViYmxlIGRhdGEgdG8gaW5kaWNhdGUgdGhhdFxuICAgICAqIHRoaXMgZGF0YSBpcyBmcm9tIEVtc2NyaXB0ZW4gVmlydHVhbCBGaWxlIFN5c3RlbSwgdGhlIHVybiBpcyBub3QgYW4gaHR0cChzKSBvciBmaWxlLlxuICAgICAqIFxuICAgICAqIEl0IG1ha2VzIHRoZSB3aG9sZSBwcm9jZXNzIGNvbXBsZXgsIHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBleGlzdGluZyBkYXRhIHNjaGVtYShidWJibGUpIHNvIHdlIG5lZWRcbiAgICAgKiB0byBhZGQgYSBzdXBwb3J0IGluIHRoZSBYaHIuanMgdG8gc3VwcG9ydCB0aGUgdGhpcyByZXNvdXJjZSByZXF1ZXN0LlxuICAgICAqIFxuICAgICAqIFRoZSBpZGVhIGhlcmUgaXMgd2UgcmVnaXN0ZXIgYSBNZXNzYWdlUG9ydCBpbiB0aGUgbWFpbiB0aHJlYWQsIGFuZCBvbmNlIHdlIGNyZWF0ZSBhIHdvcmtlciB3aGljaCBuZWVkIHRvXG4gICAgICogbG9hZCB0aGUgc3BlY2lhbCByZXNvdXJjZSwgaXQgd2lsbCBjaGVjayB3aGV0aGVyIHRoaXMgc3BlY2lhbCBwcm90b2NvbCBoYXMgYSBoYW5kbGVyIG9yIG5vdC4gSWYgaXQgZG9lcyxcbiAgICAgKiBpdCB3aWxsIGxldCB0aGUgaGFuZGxlciB0byBkbyB0aGUgaGVhdnkgbGlmdGluZy4gXG4gICAgICogXG4gICAgICogSW4gdGhlIFdvcmtlckNyZWF0b3IsIGl0IHdpbGwgY3JlYXRlIG5ldyAgTWVzc2FnZUNoYW5uZWwgYmV0d2VlbiBuZXcgY3JlYXRlZCB3b3JrZXIgYW5kIHRoZSBtYWluIHRocmVhZCxcbiAgICAgKiBpdCBiZWNhbWUgdGhlIGJyaWRnZSB0byBnZXQgdGhlIGFjdHVhbCByZXNvdXJjZSBmcm9tIHRoZSBsb2FkZXIgd2hvIHJlZ2lzdGVyZWQgdGhlIHByb3RvY29sXG4gICAgICogXG4gICAgICovXG4gICAgVmlld2luZ1NlcnZpY2UucmVnaXN0ZXJQcm90b2NvbFBvcnQgPSBmdW5jdGlvbihwcm90b2NvbCwgcG9ydCkge1xuICAgICAgICBpZigoL14oaHR0cChzKT98ZmlsZSk6L2dpLnRlc3QocHJvdG9jb2wpKSkge1xuICAgICAgICAgICAgLy8gZm9yIHBlYWNlIG9mIG1pbmQ6IHNlY3VyaXR5XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJodHRwKHMpIG9yIGZpbGUgcHJvdG9jb2wgd2VyZSBub3QgYWxsb3dlZCB0byBiZSBoYW5kbGVkXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIXBvcnQpIHtcbiAgICAgICAgICAgIC8vIG1lYW5zIHdlIG5lZWQgdG8gcmVtb3ZlIGlmIHRoZXJlIGlzIGEgcG9ydCBvcGVuXG4gICAgICAgICAgICBpZihwcm90b2NvbFBvcnRNYXBbcHJvdG9jb2xdICYmIHByb3RvY29sUG9ydE1hcFtwcm90b2NvbF0gaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkge1xuICAgICAgICAgICAgICAgIHByb3RvY29sUG9ydE1hcFtwcm90b2NvbF0ub25tZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHByb3RvY29sUG9ydE1hcFtwcm90b2NvbF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb3RvY29sUG9ydE1hcFtwcm90b2NvbF0gPSBwb3J0O1xuICAgICAgICBcbiAgICAgICAgcG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gbWVzc2FnZS5kYXRhLnVybDtcbiAgICAgICAgICAgIGlmKHBlbmRpbmdQb3J0UmVxdWVzdFt1cmxdKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBlbmRpbmdIYW5kbGVyID0gcGVuZGluZ1BvcnRSZXF1ZXN0W3VybF07XG5cbiAgICAgICAgICAgICAgICBpZihtZXNzYWdlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0hhbmRsZXIub25GYWlsdXJlV3JhcHBlZChFcnJvckNvZGVzLkJBRF9EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJNYWxmb3JtZWQgZGF0YSByZWNlaXZlZCB3aGVuIHJlcXVlc3RpbmcgZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcInVybFwiOiB1cmwsIFwiZXhjZXB0aW9uXCI6IG1lc3NhZ2UuZGF0YS5lcnJvci5tZXNzYWdlLCBcInN0YWNrXCI6IG1lc3NhZ2UuZGF0YS5lcnJvci5zdGFja30pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSB3b3JrZXIgd2hvbSBpcyByb290IHdoZW4gcmVxdWVzdCB0aGUgZGF0YVxuICAgICAgICAgICAgICAgICAgICB2YXIgcmF3YnVmID0gbWVzc2FnZS5kYXRhLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1BvcnRSZXF1ZXN0W3VybF0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYocmF3YnVmWzBdID09PSAzMSAmJiByYXdidWZbMV0gPT09IDEzOSAmJiB1cmwubWF0Y2goLyguZjJkfC5neikkL2dpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdidWYgPSBndW56aXBTeW5jKHJhd2J1Zik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocGVuZGluZ0hhbmRsZXIub3B0aW9ucyAmJiBwZW5kaW5nSGFuZGxlci5vcHRpb25zLm9uZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nSGFuZGxlci5vcHRpb25zLm9uZGF0YShyYXdidWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nSGFuZGxlci5vblN1Y2Nlc3NXcmFwcGVkKHJhd2J1Zik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nSGFuZGxlci5vbkZhaWx1cmVXcmFwcGVkKEVycm9yQ29kZXMuQkFEX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk1hbGZvcm1lZCBkYXRhIHJlY2VpdmVkIHdoZW4gcmVxdWVzdGluZyBmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwidXJsXCI6IHVybCwgXCJleGNlcHRpb25cIjogZXJyLnRvU3RyaW5nKCksIFwic3RhY2tcIjogZXJyLnN0YWNrIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0hhbmRsZXIub25TdWNjZXNzV3JhcHBlZChyYXdidWYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwZW5kaW5nUmVxdWVzdENoYW5uZWxNYXBbdXJsXSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgbWlkZGxlIG1hblxuICAgICAgICAgICAgICAgIHZhciB0cmFuc2ZlciA9IFtdO1xuICAgICAgICAgICAgICAgIGlmKG1lc3NhZ2UuZGF0YSAmJiBtZXNzYWdlLmRhdGEuYnVmZmVyICYmIG1lc3NhZ2UuZGF0YS5idWZmZXIuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIucHVzaChtZXNzYWdlLmRhdGEuYnVmZmVyLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Q2hhbm5lbE1hcFt1cmxdLnBvc3RNZXNzYWdlKG1lc3NhZ2UuZGF0YSwgdHJhbnNmZXIpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Q2hhbm5lbE1hcFt1cmxdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBWaWV3aW5nU2VydmljZS5oYW5kbGVyUHJvdG9jb2wgPSBmdW5jdGlvbihwcm90b2NvbCwgdXJsLCBvblN1Y2Nlc3NXcmFwcGVkLCBvbkZhaWx1cmVXcmFwcGVkLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBwb3J0ID0gcHJvdG9jb2xQb3J0TWFwW3Byb3RvY29sXTtcbiAgICAgICAgcGVuZGluZ1BvcnRSZXF1ZXN0W3VybF0gPSB7XG4gICAgICAgICAgICBvblN1Y2Nlc3NXcmFwcGVkLFxuICAgICAgICAgICAgb25GYWlsdXJlV3JhcHBlZCxcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfTtcblxuICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogVmlld2luZ1NlcnZpY2UuV09SS0VSX1JFQURfRklMRSxcbiAgICAgICAgICAgIHVybFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfTtcblxuICAgIFZpZXdpbmdTZXJ2aWNlLmZvcndhcmRQcm90b2NvbEhhbmRsZXJUb1dvcmtlciA9IGZ1bmN0aW9uKHdvcmtlcikge1xuICAgICAgICB2YXIgbWFwID0ge307XG5cbiAgICAgICAgLy8gY3JlYXRlIHRoZSBtaWRkbGUgbWFuIHdobyBjb25uZWN0IGJldHdlZW4gdGhlIHdvcmtlciB3aG8gbmVlZCB0byByZXF1ZXN0IHRoZSByZXNvdXJjZVxuICAgICAgICAvLyBhbmQgdGhlIG1haW4gdGhyZWFkXG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkge1xuICAgICAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwobWVzc2FnZS5kYXRhLnVybCk7XG4gICAgICAgICAgICBwcm90b2NvbFBvcnRNYXBbdXJsLnByb3RvY29sXS5wb3N0TWVzc2FnZShtZXNzYWdlLmRhdGEpO1xuICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3RDaGFubmVsTWFwW3VybF0gPSBjaGFubmVsLnBvcnQxO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvcih2YXIga2V5IGluIHByb3RvY29sUG9ydE1hcCkge1xuICAgICAgICAgICAgaWYocHJvdG9jb2xQb3J0TWFwW2tleV0gaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkge1xuICAgICAgICAgICAgICAgIG1hcFtrZXldID0gY2hhbm5lbC5wb3J0MjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdvcmtlci5kb09wZXJhdGlvbih7XG4gICAgICAgICAgICBvcGVyYXRpb246IFZpZXdpbmdTZXJ2aWNlLldPUktFUl9SRUdJU1RFUl9GSUxFX1BPUlQsXG4gICAgICAgICAgICBwcm90b2NvbFBvcnRNYXA6IG1hcFxuICAgICAgICB9LCBbY2hhbm5lbC5wb3J0Ml0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIEdFVC9IRUFEIHJlcXVlc3QgdG8gdGhlIFZpZXdpbmcgU2VydmljZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3aW5nU2VydmljZUJhc2VVcmwgLSBUaGUgYmFzZSB1cmwgZm9yIHRoZSB2aWV3aW5nIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFwaSAtIFRoZSBhcGkgdG8gY2FsbCBpbiB0aGUgdmlld2luZyBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgdXJsIGZvciB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvblN1Y2Nlc3MgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVzcG9uc2VcbiAgICAgKiAgcmV0dXJuZWQgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bC5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbkZhaWx1cmUgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW4gaW50ZWdlciBzdGF0dXMgY29kZSBhbmQgYSBzdHJpbmcgc3RhdHVzLCB3aGljaCB0b2dldGhlclxuICAgICAqICByZXByZXNlbnQgdGhlIHJlc3BvbnNlIHJldHVybmVkIGlmIHRoZSByZXF1ZXN0IGlzIHVuc3VjY2Vzc2Z1bCwgYW5kIGEgdGhpcmQgZGF0YSBhcmd1bWVudCwgd2hpY2ggaGFzIG1vcmVcbiAgICAgKiAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhaWx1cmUuIFRoZSBkYXRhIGlzIGEgZGljdGlvbmFyeSB0aGF0IG1pbmltYWxseSBpbmNsdWRlcyB0aGUgdXJsLCBhbmQgYW4gZXhjZXB0aW9uIGlmXG4gICAgICogIG9uZSB3YXMgcmFpc2VkLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBBIGRpY3Rpb25hcnkgb2Ygb3B0aW9ucyB0aGF0IGNhbiBpbmNsdWRlOlxuICAgICAqICB7U3RyaW5nfSAgW21ldGhvZD0nZ2V0J10gLSBUaGUgcmVxdWVzdCBtZXRob2QgdG8gdXNlLiBDb25mdXNpbmdseSwgdGhpcyBhY2NlcHRzIGFueSBtZXRob2QsIG5vdCBqdXN0ICdnZXQnIGFuZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVhZCcuIEl0IHNlZW1zIGxpa2UgYXQgbGVhc3QgJ3Bvc3QnIGlzIG9mZmljaWFsbHkgc3VwcG9ydGVkLlxuICAgICAqICB7T2JqZWN0fSAgW3Bvc3REYXRhXSAtIFRoZSBib2R5IGRhdGEgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LiBVc2Ugb25seSBpbiBjb25qdW5jdGlvbiB3aXRoIG1ldGhvZD0ncG9zdCcuXG4gICAgICogIHtib29sZWFufSBbbm9Cb2R5PWZhbHNlXSAtIFdoZW4gdHJ1ZSwgd2lsbCBwZXJmb3JtIGEgSEVBRCByZXF1ZXN0LlxuICAgICAqICB7T2JqZWN0fSAgW2hlYWRlcnNdIC0gQSBkaWN0aW9uYXJ5IHJlcHJlc2VudGluZyB0aGUgYWRkaXRpb25hbCBoZWFkZXJzIHRvIGFkZC4gV2lsbCBiZSBpZ25vcmVkIGZvciBzaWduZWQgdXJscy5cbiAgICAgKiAge1N0cmluZ30gIFtxdWVyeVBhcmFtc10gLSBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuIEl0IHdpbGwgb25seSBiZSB1c2VkIGlmIHRoZSB1cmwgaXMgbm90XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkLlxuICAgICAqICB7T2JqZWN0fSAgW3JhbmdlXSAtIEFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHNwZWNpZmllcyB0aGUgcmFuZ2VkIHJlc3BvbnNlIHRocm91Z2ggJ21pbicgYW5kICdtYXgnIG9mZnNldHNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBpbiBieXRlcy5cbiAgICAgKiAge1N0cmluZ30gIFtyZXNwb25zZVR5cGU9J3RleHQnXSAtIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcmVzcG9uc2UgdHlwZSBmb3IgdGhpcyByZXF1ZXN0LlxuICAgICAqICB7Ym9vbGVhbn0gW3dpdGhDcmVkZW50aWFscz10cnVlXSAtIERlZmluZXMgd2hldGhlciB0byBzZW5kIGFuZCBzdG9yZSBjcmVkZW50aWFscy4gV2lsbCBiZSBpZ25vcmVkIGZvciBzaWduZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzLlxuICAgICAqICB7Ym9vbGVhbn0gW3VzZUZldGNoPWZhbHNlXSAtIFdoZW4gdHJ1ZSwgdGhlIHJlcXVlc3Qgd2lsbCB1c2UgZmV0Y2ggaW5zdGVhZCBvZiBYTUxIdHRwUmVxdWVzdCAoZXhwZXJpbWVudGFsISkuXG4gICAgICogIHtmdW5jdGlvbn1bb25wcm9ncmVzc10gLSBJZiB0aGlzIGlzIHNwZWNpZmllZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgcmVjZWl2ZWQgcHJvZ3Jlc3NpdmVseS4gT24gZWFjaCB1cGRhdGUsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRoZSBmdWxsIHJlc3BvbnNlIHRoYXQgaGFzIGJlZW4gcmVjZWl2ZWQgdXAgdG9cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgcG9pbnQuXG4gICAgICogIHtmdW5jdGlvbn1bb25kYXRhXSAtIElmIHRoaXMgaXMgc3BlY2lmaWVkLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSByZWNlaXZlZCBwcm9ncmVzc2l2ZWx5LiBPbiBlYWNoIHVwZGF0ZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBvbmx5IHRoZSBuZXcgY2h1bmsgb2YgZGF0YS5cbiAgICAgKi9cbiAgICBWaWV3aW5nU2VydmljZS5yYXdHZXQgPSBmdW5jdGlvbiAodmlld2luZ1NlcnZpY2VCYXNlVXJsLCBhcGksIHVybCwgb25TdWNjZXNzLCBvbkZhaWx1cmUsIG9wdGlvbnMpIHtcbiAgICAgICAgeGhyVGhyb3R0bGUuZ28ocGVuZENCID0+IHtcbiAgICAgICAgICAgIGxldCBvbkZhaWx1cmVXcmFwcGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBwZW5kQ0IoKTtcbiAgICAgICAgICAgICAgICBvbkZhaWx1cmUgJiYgb25GYWlsdXJlLmFwcGx5KG9uRmFpbHVyZSwgYXJncyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgb25TdWNjZXNzV3JhcHBlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVuZENCKCk7XG4gICAgICAgICAgICAgICAgb25TdWNjZXNzICYmIG9uU3VjY2Vzcy5hcHBseShvblN1Y2Nlc3MsIGFyZ3MpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHByb3RvY29sTWF0Y2ggPSAvXihcXHcrOilcXC9cXC8vZ2kuZXhlYyh1cmwpO1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBzcGVjaWFsIGhhbmRsZXIgZm9yIHRoaXMgcmVxdWVzdCwgZGVsZWdhdGUgdGhpcyByZXF1ZXN0IHRvIHRoZSBoYW5kbGVyXG4gICAgICAgICAgICBpZihwcm90b2NvbE1hdGNoICYmIHByb3RvY29sTWF0Y2gubGVuZ3RoID09IDIgJiYgcHJvdG9jb2xQb3J0TWFwW3Byb3RvY29sTWF0Y2hbMV1dKSB7XG4gICAgICAgICAgICAgICAgVmlld2luZ1NlcnZpY2UuaGFuZGxlclByb3RvY29sKHByb3RvY29sTWF0Y2hbMV0sIHVybCwgb25TdWNjZXNzV3JhcHBlZCwgb25GYWlsdXJlV3JhcHBlZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBnZXRGdW5jID0gVmlld2luZ1NlcnZpY2UuX3Jhd0dldDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucz8udXNlRmV0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0RnVuYyA9IFZpZXdpbmdTZXJ2aWNlLl9yYXdHZXRGZXRjaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2V0RnVuYyh2aWV3aW5nU2VydmljZUJhc2VVcmwsIGFwaSwgdXJsLCBvblN1Y2Nlc3NXcmFwcGVkLCAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSAob3B0aW9ucz8ubWV0aG9kIHx8IChvcHRpb25zPy5ub0JvZHkgPyAnSEVBRCcgOiAnR0VUJykpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHNob3VsZFJldHJ5ID0gbWV0aG9kID09PSAnZ2V0JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBzdGF0dXMgY29kZSBvZiAwIGluZGljYXRlcyBhbnkgc29ydCBvZiBjb25uZWN0aW9uIGVycm9yIChlLmcuIG5ldHdvcmsgaXNzdWUsIHRpbWVvdXQgb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENPUlMgcHJvYmxlbXMpIG9yIG92ZXJhbGwgZXhjZXB0aW9uIGluIHRoZSByZXF1ZXN0IGNvZGUuIFdlIHdvdWxkIHVzdWFsbHkgbm90IHdhbnQgdG8gcmV0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RzIHRoYXQgZmFpbCBkdWUgdG8gc3VjaCBlcnJvcnMuIFdlIHN0aWxsIGRvIGl0ICd0ZW1wb3JhcmlseScsIGJlY2F1c2UgRFMgaGFzIGFuIGlzc3VlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHRlbXBvcmFyeSBDT1JTIGVycm9ycywgd2hpY2ggY2FuIGJlIHJlc29sdmVkIGJ5IGEgcmV0cnkuIFRoaXMgaXMgYSBjbGllbnQtc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd29yay1hcm91bmQgZm9yIGEgc2VydmVyLXNpZGUgaXNzdWUsIHRvIHVuYmxvY2sgY3VzdG9tZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vamlyYS5hdXRvZGVzay5jb20vYnJvd3NlL0xNVi02ODI3IGFuZCB0aGUgY29ycmVzcG9uZGluZyBEUyB0aWNrZXQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2ppcmEuYXV0b2Rlc2suY29tL2Jyb3dzZS9ERVJJLTg5MjRcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvckNvZGUgPT09IDAgICB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9PT0gNDI5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID49IDUwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmV0cnkgaWYgdGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGxlZCBleHBsaWNpdGx5LlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXJnc1syXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmV0cnkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZXRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGFyZ3NbM107XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGVsYXlNcyA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lTXVsdGlwbGUgPSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gNDI5IC0gdG9vIG1hbnkgcmVxdWVzdHMsIDUwMyAtIFNlcnZpY2UgVW5hdmFpbGFibGUgdW50aWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRyeUFmdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGVycm9yQ29kZSA9PT0gNDI5IHx8IGVycm9yQ29kZSA9PT0gNTAzKSAmJiByZXF1ZXN0Py5nZXRSZXNwb25zZUhlYWRlcignUmV0cnktQWZ0ZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5QWZ0ZXIgPSByZXF1ZXN0LmdldFJlc3BvbnNlSGVhZGVyKCdSZXRyeS1BZnRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvckNvZGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUFmdGVyID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lTXVsdGlwbGUgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5QWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRyeUFmdGVyIGNvdWxkIGJlIGVpdGhlciBkZWxheS1zZWNvbmRzIG9yIGh0dHAtZGF0ZSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHJldHJ5QWZ0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5TXMgPSAoKCFpc05hTihzZWNvbmRzKSAmJiBzZWNvbmRzICogMTAwMCkgfHwgKERhdGUucGFyc2UocmV0cnlBZnRlcikgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5TXMgPSBkZWxheU1zID4gMTAwID8gZGVsYXlNcyA6IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgVmlld2luZ1NlcnZpY2UuX3JldHJ5UmVxdWVzdCh2aWV3aW5nU2VydmljZUJhc2VVcmwsIGFwaSwgdXJsLCBvcHRpb25zLCBkZWxheU1zLCB0aW1lTXVsdGlwbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoYXJncykgPT4geyBsb2dnZXIud2FybihgcmVxdWVzdCAke3VybH0gc3VjY2Vzc2Z1bCBhZnRlciByZXRyaWVzLmApOyBvblN1Y2Nlc3NXcmFwcGVkKC4uLmFyZ3MpOyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChhcmdzKSA9PiB7IGxvZ2dlci53YXJuKGByZXF1ZXN0ICR7dXJsfSB1bnN1Y2Nlc3NmdWwgYWZ0ZXIgcmV0cmllcy5gKTsgb25GYWlsdXJlV3JhcHBlZCguLi5hcmdzKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkZhaWx1cmVXcmFwcGVkKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG5cbiAgICBWaWV3aW5nU2VydmljZS5fcmV0cnlSZXF1ZXN0ID0gZnVuY3Rpb24odmlld2luZ1NlcnZpY2VCYXNlVXJsLCBhcGksIHVybCwgb3B0aW9ucywgZGVsYXlNcywgdGltZU11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGJhY2tPZmZPcHRpb25zID0ge1xuICAgICAgICAgICAgZGVsYXlGaXJzdEF0dGVtcHQ6IHRydWUsXG4gICAgICAgICAgICBzdGFydGluZ0RlbGF5OiBkZWxheU1zLFxuICAgICAgICAgICAgbnVtT2ZBdHRlbXB0czogNCxcbiAgICAgICAgICAgIHJldHJ5OiAoW2Vycm9yQ29kZSwgZXJyb3JNc2csIHsgdXJsIH1dLCBhdHRlbXB0TnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKGByZXF1ZXN0ICR7dXJsfSBmYWlsZWQgd2l0aCBzdGF0dXMgJHtlcnJvckNvZGV9ICR7ZXJyb3JNc2d9LiBBdHRlbXB0ICR7YXR0ZW1wdE51bWJlcn1gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGltZU11bHRpcGxlOiB0aW1lTXVsdGlwbGVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2tPZmYoKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgZ2V0RnVuYyA9IFZpZXdpbmdTZXJ2aWNlLl9yYXdHZXQ7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zPy51c2VGZXRjaCkge1xuICAgICAgICAgICAgICAgICAgZ2V0RnVuYyA9IFZpZXdpbmdTZXJ2aWNlLl9yYXdHZXRGZXRjaDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBnZXRGdW5jKHZpZXdpbmdTZXJ2aWNlQmFzZVVybCwgYXBpLCB1cmwsICguLi5hcmdzKSA9PiByZXNvbHZlKGFyZ3MpLCAoLi4uYXJncykgPT4gcmVqZWN0KGFyZ3MpLCBvcHRpb25zKTtcbiAgICAgICAgICB9KSwgYmFja09mZk9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBWaWV3aW5nU2VydmljZS5pc09TU1VybCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cmwuaW5kZXhPZignL29zcy92Mi9idWNrZXRzJykgIT09IC0xO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgR2l2ZW4gYW4gT1NTIFVSTCwgcmV0dXJucyBhIHNpZ25lZC11cmwuXG4gICAgICpcbiAgICAgKiAgQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSB1cmwgZm9yIHRoZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhIHNpbXBsZSBzdWNjZXNzIG9yIGZhaWwgb2YgdGhlIHJlcXVlc3RcbiAgICAgKi9cbiAgICBWaWV3aW5nU2VydmljZS5nZXRTaWduZWRTM0Rvd25sb2FkVXJsID0gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY21zZXNzaW9uSW5kZXggPSB1cmwuaW5kZXhPZihcIj9hY21zZXNzaW9uPVwiKTtcblxuICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBzaWduZWRVUkwsIG5vIG5lZWQgdG8gYXBwZW5kIGFjbXNlc3Npb24uXG4gICAgICAgICAgICBpZiAoYWNtc2Vzc2lvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgYWNtc2Vzc2lvbkluZGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93aWtpLmF1dG9kZXNrLmNvbS9kaXNwbGF5L0ZEUEEvQVBJK0VuZHBvaW50cyNBUElFbmRwb2ludHMtR2V0RG93bmxvYWRVUkxcbiAgICAgICAgICAgIHVybCArPSBcIi9zaWduZWRzM2Rvd25sb2FkP3VzZUNkbj10cnVlXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwpO1xuXG4gICAgICAgICAgICAvLyBCZWFyZXIgdG9rZW4gaXMgbmVlZGVkLlxuICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBlbmRwb2ludC5IVFRQX1JFUVVFU1RfSEVBREVSU1tcIkF1dGhvcml6YXRpb25cIl0pO1xuICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnanNvbic7XG5cbiAgICAgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuXG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGUuY3VycmVudFRhcmdldC5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnVybCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBmYWlsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXF1ZXN0Lm9ubG9hZCA9IHN1Y2Nlc3M7XG4gICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmYWlsO1xuICAgICAgICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmYWlsO1xuICAgICAgICAgICAgcmVxdWVzdC5vbmFib3J0ID0gZmFpbDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYHJhd0dldGAgdGhhdCB1c2VzIFhNTEh0dHBSZXF1ZXN0LiBTZWUgYHJhd0dldGAgZm9yIG1vc3Qgb2YgdGhlIGNvbW1vbiBwYXJhbWV0ZXJzLlxuICAgICAqIFdlIG9ubHkgZG9jdW1lbnQgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgYmVoYXZpb3IgaGVyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBJbiBhZGRpdGlvbiB0byB0aGUgY29tbW9uIG9wdGlvbnMgZG9jdW1lbnRlZCBvbiBgcmF3R2V0YDpcbiAgICAgKiAge2Jvb2xlYW59IFthc3luY2hyb25vdXM9dHJ1ZV0gLSBXaGV0aGVyIHRoZSByZXF1ZXN0IGlzIGFzeW5jaHJvbm91cyBvciBibG9ja2luZy5cbiAgICAgKiAgUHJvZ3Jlc3NpdmUgbG9hZGluZyAob25wcm9ncmVzcyAvIG9uZGF0YSkgcmVxdWlyZXMgYHJlc3BvbnNlVHlwZT0ndGV4dCdgLlxuICAgICAqL1xuICAgIFZpZXdpbmdTZXJ2aWNlLl9yYXdHZXQgPSBhc3luYyBmdW5jdGlvbiAodmlld2luZ1NlcnZpY2VCYXNlVXJsLCBhcGksIHVybCwgb25TdWNjZXNzLCBvbkZhaWx1cmUsIG9wdGlvbnMpIHtcblxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICB1cmwgPSBWaWV3aW5nU2VydmljZS5nZW5lcmF0ZVVybCh2aWV3aW5nU2VydmljZUJhc2VVcmwsIGFwaSwgdXJsLCBvcHRpb25zLmFwaURhdGEsIG9wdGlvbnMuZXNjYXBlT3NzT2JqZWN0cywgb3B0aW9ucy5ndWlkKTtcblxuICAgICAgICBsZXQgaXNTaWduZWRVcmwgPSBmYWxzZTtcblxuICAgICAgICBpZiAoVmlld2luZ1NlcnZpY2UuaXNPU1NVcmwodXJsKSkge1xuICAgICAgICAgICAgY29uc3Qgc2lnbmVkVXJsID0gYXdhaXQgVmlld2luZ1NlcnZpY2UuZ2V0U2lnbmVkUzNEb3dubG9hZFVybCh1cmwpO1xuXG4gICAgICAgICAgICBpZiAoc2lnbmVkVXJsKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gc2lnbmVkVXJsO1xuICAgICAgICAgICAgICAgIGlzU2lnbmVkVXJsID0gdHJ1ZTsgICAgXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEluIGNhc2UgdGhhdCB3ZSBjb3VsZG4ndCBnZXQgdGhlIHNpZ25lZCBVUkwgZm9yIHNvbWUgcmVhc29uLCB0cnkgdG8gdXNlIHRoZSBvcmlnaW5hbCBVUkwuXG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyB1bmRlciAxME1CIGl0IHNob3VsZCB3b3JrIC0gc28gd2UgZ290IGx1Y2t5LlxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIGdldHRpbmcgc2lnbmVkIFVSTCAtIEZhbGxiYWNrIHRvIGRpcmVjdCBPU1MgcmVzb3VyY2UuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIHNpZ25lZCBVUkwsIGFkZGluZyBhZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtcyB3aWxsIHByZXZlbnQgaXQgZnJvbSB3b3JraW5nLlxuICAgICAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcyAmJiAhaXNTaWduZWRVcmwpIHtcbiAgICAgICAgICAgIHZhciBjb25jYXRTeW1ib2wgPSB1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJztcbiAgICAgICAgICAgIHVybCA9IHVybCArIGNvbmNhdFN5bWJvbCArIG9wdGlvbnMucXVlcnlQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZSkge1xuICAgICAgICAgICAgaWYgKG9uRmFpbHVyZSlcbiAgICAgICAgICAgICAgICBvbkZhaWx1cmUocmVxdWVzdC5zdGF0dXMsIHJlcXVlc3Quc3RhdHVzVGV4dCwge3VybDogdXJsfSwgcmVxdWVzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvbkFib3J0KGUpIHtcbiAgICAgICAgICAgIGlmIChvbkZhaWx1cmUpXG4gICAgICAgICAgICAgICAgb25GYWlsdXJlKHJlcXVlc3Quc3RhdHVzLCAncmVxdWVzdCB3YXMgYWJvcnRlZCcsIHsgdXJsOiB1cmwsIGFib3J0ZWQ6IHRydWUgfSwgcmVxdWVzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaXhKc29uUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlc3BvbnNlVHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL1RoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGluIHRoZSBub2RlLmpzIGNhc2Ugc28gd2UgY2FuIGRvIHRvU3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2luc3RlYWQgb2YgdXNpbmcgdGhlIExNViB1dGY4IGNvbnZlcnRlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9iVG9Kc29uKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzcG9uc2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpe31cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uTG9hZChlKSB7XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPj0gMjAwICYmIHJlcXVlc3Quc3RhdHVzIDwgNDAwKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAmJiByZXF1ZXN0LnJlc3BvbnNlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmF3YnVmO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCAmJiBvcHRpb25zLnJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHdlIHJlcXVlc3RlZCBhIHJhbmdlLCBidXQgdGhlIGVudGlyZSBjb250ZW50IHdhcyByZXR1cm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRvIGdpdmUgYmFjayBqdXN0IHRoZSByZXF1ZXN0ZWQgc3Vic2V0IHRvIHRoZSBjYWxsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd2J1ZiA9IG5ldyBVaW50OEFycmF5KHJlcXVlc3QucmVzcG9uc2UsIG9wdGlvbnMucmFuZ2UubWluLCBvcHRpb25zLnJhbmdlLm1heCAtIG9wdGlvbnMucmFuZ2UubWluKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd2J1ZiA9IG5ldyBVaW50OEFycmF5KHJlcXVlc3QucmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGlmIHRoZSBDb250ZW50LUVuY29kaW5nIGhlYWRlciBpcyBzZXQsXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBicm93c2VyIHVuemlwcyB0aGUgZmlsZSBieSBpdHNlbGYsIHNvIGxldCdzIGNoZWNrIGlmIGl0IGRpZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhd2J1ZlswXSA9PT0gMzEgJiYgcmF3YnVmWzFdID09PSAxMzkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd2FybmVkR3ppcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5lZEd6aXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKFwiQW4gTE1WIHJlc291cmNlIChcIiArIHVybCArIFwiKSB3YXMgbm90IHVuY29tcHJlc3NlZCBieSB0aGUgYnJvd3Nlci4gVGhpcyBodXJ0cyBwZXJmb3JtYW5jZS4gQ2hlY2sgdGhlIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgYW5kIGNoZWNrIHdoZXRoZXIgeW91J3JlIGdldHRpbmcgZG91YmxlLWNvbXByZXNzZWQgc3RyZWFtcy4gVGhlIHdhcm5pbmcgcHJpbnRzIG9ubHkgb25jZSBidXQgaXQncyBsaWtlbHkgdGhlIHByb2JsZW0gYWZmZWN0cyBtdWx0aXBsZSByZXNvdXJjZXMuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdidWYgPSBndW56aXBTeW5jKHJhd2J1Zik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZhaWx1cmUoRXJyb3JDb2Rlcy5CQURfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNYWxmb3JtZWQgZGF0YSByZWNlaXZlZCB3aGVuIHJlcXVlc3RpbmcgZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwidXJsXCI6IHVybCwgXCJleGNlcHRpb25cIjogZXJyLnRvU3RyaW5nKCksIFwic3RhY2tcIjogZXJyLnN0YWNrIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgb25TdWNjZXNzICYmIG9uU3VjY2VzcyhmaXhKc29uUmVzcG9uc2UocmF3YnVmKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMgJiYgKCFvcHRpb25zLnJlc3BvbnNlVHlwZSB8fCBvcHRpb25zLnJlc3BvbnNlVHlwZSA9PT0gXCJ0ZXh0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVxdWVzdC5yZXNwb25zZVRleHQ7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBvblN1Y2Nlc3MgJiYgb25TdWNjZXNzKGZpeEpzb25SZXNwb25zZShyZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvbkVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgdmFyIGlzQXN5bmMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ2FzeW5jaHJvbm91cycpID8gb3B0aW9ucy5hc3luY2hyb25vdXMgOiB0cnVlO1xuICAgICAgICAgICAgcmVxdWVzdC5vcGVuKG9wdGlvbnMubWV0aG9kIHx8IChvcHRpb25zLm5vQm9keSA/ICdIRUFEJyA6ICdHRVQnKSwgdXJsLCBpc0FzeW5jKTtcblxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAncmVzcG9uc2VUeXBlJykpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yYW5nZSkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihcIlJhbmdlXCIsIFwiYnl0ZXM9XCIgKyBvcHRpb25zLnJhbmdlLm1pbiArIFwiLVwiICsgb3B0aW9ucy5yYW5nZS5tYXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbiBjYXNlIHRoYXQgVVJMIGFscmVhZHkgc2lnbmVkLCBubyBuZWVkIHRvIGFkZCBjcmVkZW50aWFscyB0byBpdC5cbiAgICAgICAgICAgIGlmICghaXNTaWduZWRVcmwpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIFwid2l0aENyZWRlbnRpYWxzXCIpKVxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycyApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaGVhZGVyIGluIG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgb3B0aW9ucy5oZWFkZXJzW2hlYWRlcl0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIHdpdGhDcmVkZW50aWFscyBpZiBoZWFkZXIgaXMgQXV0aG9yaXphdGlvbiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB1c2luZyB3aXRoQ3JlZGVudGlhbHMgYXR0YWNoZXMgY29va2llIGRhdGEgdG8gcmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlci50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcImF1dGhvcml6YXRpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0FzeW5jKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbmxvYWQgPSBvbkxvYWQ7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gb25FcnJvcjtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9udGltZW91dCA9IG9uRXJyb3I7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbmFib3J0ID0gb25BYm9ydDtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZGF0YSB8fCBvcHRpb25zLm9ucHJvZ3Jlc3MpIHtcblxuICAgICAgICAgICAgICAgICAgICAvL1NldCB1cCBpbmNyZW1lbnRhbCBwcm9ncmVzcyBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgLy9pZiBuZWVkZWQuIFdlIGhhdmUgdG8gZG8gc29tZSBtYWdpYyBpbiBvcmRlclxuICAgICAgICAgICAgICAgICAgICAvL3RvIGdldCB0aGUgcmVjZWl2ZWQgZGF0YSBwcm9ncmVzc2l2ZWx5LlxuICAgICAgICAgICAgICAgICAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5fZGxQcm9ncmVzcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldDogMFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgPiAyICYmIHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0QnVmZmVyID0gcmVxdWVzdC5yZXNwb25zZVRleHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gbmV3IGRhdGEgY29taW5nIGluLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5fZGxQcm9ncmVzcy5zdHJlYW1PZmZzZXQgPj0gdGV4dEJ1ZmZlci5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5QnVmZmVyID0gdGV4dFRvQXJyYXlCdWZmZXIodGV4dEJ1ZmZlciwgb3B0aW9ucy5fZGxQcm9ncmVzcy5zdHJlYW1PZmZzZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuX2RsUHJvZ3Jlc3Muc3RyZWFtT2Zmc2V0ID0gdGV4dEJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbmRhdGEoYXJyYXlCdWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm9ucHJvZ3Jlc3MpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWJvcnQgPSBvcHRpb25zLm9ucHJvZ3Jlc3MocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVxdWVzdC5zZW5kKG9wdGlvbnMucG9zdERhdGEpO1xuXG4gICAgICAgICAgICBpZiAoIWlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICBvbkxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgb25GYWlsdXJlKHJlcXVlc3Quc3RhdHVzLCByZXF1ZXN0LnN0YXR1c1RleHQsIHt1cmw6IHVybCwgZXhjZXB0aW9uOiBlfSwgcmVxdWVzdCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gVE9ETzogVGhpcyBtZXRob2QgaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIHlldCwgdGhvdWdoIChzZWUgdG9kb3MgaW4gdGhlIGNvZGUpLiBBdCB0aGUgbW9tZW50LCBpdCdzIG9ubHkgZnVsbHlcbiAgICAvLyB0ZXN0ZWQgZm9yIHRoZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIG9mIGJpbmFyeSBkYXRhLCBpLmUuIHRoZSBjYXNlIHdoZXJlIG9wdGlvbnMub25wcm9ncmVzcyBpcyBkZWZpbmVkLiBBbGwgb3RoZXJcbiAgICAvLyBjYXNlcyBhbmQgcmVzcG9uc2UgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LlxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYHJhd0dldGAgdGhhdCB1c2VzIGZldGNoLiBTZWUgYHJhd0dldGAgZm9yIG1vc3Qgb2YgdGhlIGNvbW1vbiBwYXJhbWV0ZXJzLlxuICAgICAqIFdlIG9ubHkgZG9jdW1lbnQgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgYmVoYXZpb3IgaGVyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBEZXRhaWxzIG9uIHRoZSBjb21tb24gb3B0aW9ucyBkb2N1bWVudGVkIG9uIGByYXdHZXRgOlxuICAgICAqICBQcm9ncmVzc2l2ZSBsb2FkaW5nIChvbnByb2dyZXNzIC8gb25kYXRhKSB3aWxsIGFsd2F5cyByZXR1cm4gYmluYXJ5IGRhdGEgKGFycmF5IGJ1ZmZlcnMpLCByZWdhcmRsZXNzIG9mXG4gICAgICogIGByZXNwb25zZVR5cGVgLlxuICAgICAqL1xuICAgIFZpZXdpbmdTZXJ2aWNlLl9yYXdHZXRGZXRjaCA9IGFzeW5jIGZ1bmN0aW9uICh2aWV3aW5nU2VydmljZUJhc2VVcmwsIGFwaSwgdXJsLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSwgb3B0aW9ucykge1xuXG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgdXJsID0gVmlld2luZ1NlcnZpY2UuZ2VuZXJhdGVVcmwodmlld2luZ1NlcnZpY2VCYXNlVXJsLCBhcGksIHVybCwgb3B0aW9ucy5hcGlEYXRhLCBvcHRpb25zLmVzY2FwZU9zc09iamVjdHMsIG9wdGlvbnMuZ3VpZCk7XG5cbiAgICAgIGxldCBpc1NpZ25lZFVybCA9IGZhbHNlO1xuXG4gICAgICBpZiAoVmlld2luZ1NlcnZpY2UuaXNPU1NVcmwodXJsKSkge1xuICAgICAgICAgIGNvbnN0IHNpZ25lZFVybCA9IGF3YWl0IFZpZXdpbmdTZXJ2aWNlLmdldFNpZ25lZFMzRG93bmxvYWRVcmwodXJsKTtcblxuICAgICAgICAgIGlmIChzaWduZWRVcmwpIHtcbiAgICAgICAgICAgICAgdXJsID0gc2lnbmVkVXJsO1xuICAgICAgICAgICAgICBpc1NpZ25lZFVybCA9IHRydWU7ICAgIFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEluIGNhc2UgdGhhdCB3ZSBjb3VsZG4ndCBnZXQgdGhlIHNpZ25lZCBVUkwgZm9yIHNvbWUgcmVhc29uLCB0cnkgdG8gdXNlIHRoZSBvcmlnaW5hbCBVUkwuXG4gICAgICAgICAgICAgIC8vIElmIGl0J3MgdW5kZXIgMTBNQiBpdCBzaG91bGQgd29yayAtIHNvIHdlIGdvdCBsdWNreS5cbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgZ2V0dGluZyBzaWduZWQgVVJMIC0gRmFsbGJhY2sgdG8gZGlyZWN0IE9TUyByZXNvdXJjZS4nKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggc2lnbmVkIFVSTCwgYWRkaW5nIGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zIHdpbGwgcHJldmVudCBpdCBmcm9tIHdvcmtpbmcuXG4gICAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcyAmJiAhaXNTaWduZWRVcmwpIHtcbiAgICAgICAgICB2YXIgY29uY2F0U3ltYm9sID0gdXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJic7XG4gICAgICAgICAgdXJsID0gdXJsICsgY29uY2F0U3ltYm9sICsgb3B0aW9ucy5xdWVyeVBhcmFtcztcbiAgICAgIH1cblxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwpO1xuICAgICAgdmFyIHJlc3BvbnNlO1xuICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZmV0Y2ggQVBJIGlzIG5vdCBmdWxseSBjb21wYXRpYmxlIHdpdGggdGhlIFhNTEh0dHBSZXF1ZXN0IEFQSS5cbiAgICAgICAqIEZvciBfcmF3R2V0LCB0aGUgYG9uRmFpbHVyZWAgY2FsbGJhY2sgY2FuIHJlY2VpdmUgdGhlIFhNTEh0dHBSZXF1ZXN0J3MgYHJlcXVlc3RgIG9iamVjdCBhcyB0aGUgNHRoIHBhcmFtZXRlci5cbiAgICAgICAqIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgb2JqZWN0IGZvciBmZXRjaCB0aGF0IHdvdWxkIHByb3ZpZGUgYSBjb21wYXRpYmxlIEFQSS4gQSB0aG9yb3VnaCBzZWFyY2ggdGhyb3VnaCB0aGVcbiAgICAgICAqIGNvZGUgYmFzZSBzdWdnZXN0cyB0aGF0IHRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgYHJhd0dldGAgZXJyb3IgaGFuZGxlciB0byByZWFkIHRoZSBgcmV0cnlBZnRlcmBcbiAgICAgICAqIGhlYWRlciwgc28gd2UgcHJvdmlkZSBhIHByb3h5IG9iamVjdCB0aGF0IG1pbWljcyB0aGlzIHNpbmdsZSBBUEkuXG4gICAgICAgKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2YgdGhlIGZldGNoIHJlcXVlc3QuXG4gICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBBIHByb3h5IG9iamVjdCB0aGF0IG1pbWljcyB0aGUgQVBJIG9mIGFuIFhNTEh0dHBSZXF1ZXN0J3MgJ3JlcXVlc3QnIGluc3RhbmNlLCB0byB0aGUgZXh0ZW50XG4gICAgICAgKiAgdGhhdCB3ZSBmb3VuZCB0byBiZSB1c2VkIGluIHRoZSBjb2RlLlxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiB3cmFwUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogKGhlYWRlcikgPT4geyByZXR1cm4gcmVzcG9uc2U/LmhlYWRlcnM/LmdldChoZWFkZXIpOyB9XG4gICAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZhaWxlZCB3aXRoIGFuIEhUVFAgZXJyb3IgY29kZSAobm90IGZvciBhY3R1YWwgZXhjZXB0aW9ucywgZS5nLiBuZXR3b3JrIGVycm9ycylcbiAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzdGF0dXMgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZS5cbiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdGF0dXNUZXh0IFRoZSBzdGF0dXMgdGV4dCBvZiB0aGUgcmVzcG9uc2UuXG4gICAgICAgKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0IG9mIHRoZSBmZXRjaCByZXF1ZXN0LlxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBvbkVycm9yKHN0YXR1cywgc3RhdHVzVGV4dCwgcmVzcG9uc2UpIHtcbiAgICAgICAgICBpZiAob25GYWlsdXJlKVxuICAgICAgICAgICAgICBvbkZhaWx1cmUoc3RhdHVzLCBzdGF0dXNUZXh0LCB7dXJsOiB1cmx9LCB3cmFwUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGlzIGFib3J0ZWQgYnkgdGhlIGNvZGUgdGhhdCBpbml0aWF0ZWQgdGhlIHJlcXVlc3QuXG4gICAgICAgKiBAcGFyYW0ge1Jlc3BvbnNlfSBbcmVzcG9uc2U9dW5kZWZpbmVkXSBUaGUgcmVzcG9uc2Ugb2YgdGhlIGZldGNoIHJlcXVlc3QuIENhbiBiZSB1bmRlZmluZWQgaWYgdGhlIHJlcXVlc3QgaXNcbiAgICAgICAqICBhYm9ydGVkIGJlZm9yZSBhbnkgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIG9uQWJvcnQocmVzcG9uc2UgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAob25GYWlsdXJlKVxuICAgICAgICAgICAgICBvbkZhaWx1cmUoMCwgJ3JlcXVlc3Qgd2FzIGFib3J0ZWQnLCB7IHVybDogdXJsLCBhYm9ydGVkOiB0cnVlIH0sIHdyYXBSZXNwb25zZShyZXNwb25zZSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBUaGlzIG1pZ2h0IGJlIG9ic29sZXRlIG9uY2Ugd2UgaGFuZGxlIEpTT04gcmVzcG9uc2VzIHByb3Blcmx5IGluIG9uTG9hZC5cbiAgICAgIC8vIE9yIG1heWJlIHdlIHN0aWxsIG5lZWQgaXQgdG8gZ2VuZXJhdGUgSlNPTiByZXN1bHRzIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCB0aGF0LCB3aGlsZSB0aGUgYWN0dWFsIHJlc3BvbnNlIHR5cGVcbiAgICAgIC8vIHdhcyBiaW5hcnkgb3Igc3RyaW5nP1xuICAgICAgZnVuY3Rpb24gZml4SnNvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMucmVzcG9uc2VUeXBlID09PSBcImpzb25cIikge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaW4gdGhlIG5vZGUuanMgY2FzZSBzbyB3ZSBjYW4gZG8gdG9TdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAvL2luc3RlYWQgb2YgdXNpbmcgdGhlIExNViB1dGY4IGNvbnZlcnRlci5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmxvYlRvSnNvbihyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXNwb25zZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSl7fVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAgICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdCBvZiB0aGUgZmV0Y2ggcmVxdWVzdC5cbiAgICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ8dW5kZWZpbmVkfSBkYXRhIFRoZSByZXNwb25zZSBkYXRhLiBUaGlzIHdpbGwgb25seSBiZSBzZXQgaWYgdGhlIHJlc3BvbnNlIGhhcyBhbHJlYWR5IGJlZW5cbiAgICAgICAqICBwcm9jZXNzZWQgcHJvZ3Jlc3NpdmVseSAoYXMgd2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSB2aWEgdGhlIHJlc3BvbnNlIGFueW1vcmUgaW4gdGhhdCBjYXNlKS4gT3RoZXJ3aXNlLCB0aGVcbiAgICAgICAqICBkYXRhIG5lZWRzIHRvIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHJlc3BvbnNlLlxuICAgICAgICovXG4gICAgICBhc3luYyBmdW5jdGlvbiBvbkxvYWQocmVzcG9uc2UsIGRhdGEgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCA0MDApIHtcblxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgICAgICAgIGlmIChmYWxzZSAmJiByZXF1ZXN0LnJlc3BvbnNlIC8vIFRPRE86IEhhbmRsZSB0aGlzIGJyYW5jaCBcbiAgICAgICAgICAgICAgICAgICYmIHJlcXVlc3QucmVzcG9uc2UgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuXG4gICAgICAgICAgICAgICAgICB2YXIgcmF3YnVmO1xuICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDAgJiYgb3B0aW9ucy5yYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vSWYgd2UgcmVxdWVzdGVkIGEgcmFuZ2UsIGJ1dCB0aGUgZW50aXJlIGNvbnRlbnQgd2FzIHJldHVybmVkLFxuICAgICAgICAgICAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRvIGdpdmUgYmFjayBqdXN0IHRoZSByZXF1ZXN0ZWQgc3Vic2V0IHRvIHRoZSBjYWxsZXJcbiAgICAgICAgICAgICAgICAgICAgICByYXdidWYgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlLCBvcHRpb25zLnJhbmdlLm1pbiwgb3B0aW9ucy5yYW5nZS5tYXggLSBvcHRpb25zLnJhbmdlLm1pbik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJhd2J1ZiA9IG5ldyBVaW50OEFycmF5KHJlcXVlc3QucmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgaWYgdGhlIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyIGlzIHNldCxcbiAgICAgICAgICAgICAgICAgIC8vIHRoZSBicm93c2VyIHVuemlwcyB0aGUgZmlsZSBieSBpdHNlbGYsIHNvIGxldCdzIGNoZWNrIGlmIGl0IGRpZC5cbiAgICAgICAgICAgICAgICAgIGlmIChyYXdidWZbMF0gPT09IDMxICYmIHJhd2J1ZlsxXSA9PT0gMTM5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCF3YXJuZWRHemlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5lZEd6aXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihcIkFuIExNViByZXNvdXJjZSAoXCIgKyB1cmwgKyBcIikgd2FzIG5vdCB1bmNvbXByZXNzZWQgYnkgdGhlIGJyb3dzZXIuIFRoaXMgaHVydHMgcGVyZm9ybWFuY2UuIENoZWNrIHRoZSBDb250ZW50LUVuY29kaW5nIGhlYWRlciByZXR1cm5lZCBieSB0aGUgc2VydmVyIGFuZCBjaGVjayB3aGV0aGVyIHlvdSdyZSBnZXR0aW5nIGRvdWJsZS1jb21wcmVzc2VkIHN0cmVhbXMuIFRoZSB3YXJuaW5nIHByaW50cyBvbmx5IG9uY2UgYnV0IGl0J3MgbGlrZWx5IHRoZSBwcm9ibGVtIGFmZmVjdHMgbXVsdGlwbGUgcmVzb3VyY2VzLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3YnVmID0gZ3VuemlwU3luYyhyYXdidWYpO1xuICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZhaWx1cmUoRXJyb3JDb2Rlcy5CQURfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiTWFsZm9ybWVkIGRhdGEgcmVjZWl2ZWQgd2hlbiByZXF1ZXN0aW5nIGZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJ1cmxcIjogdXJsLCBcImV4Y2VwdGlvblwiOiBlcnIudG9TdHJpbmcoKSwgXCJzdGFja1wiOiBlcnIuc3RhY2sgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgb25TdWNjZXNzICYmIG9uU3VjY2VzcyhmaXhKc29uUmVzcG9uc2UocmF3YnVmKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHlVc2VkKSB7IC8vIHRoZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gcmVhZCBwcm9ncmVzc2l2ZWx5XG4gICAgICAgICAgICAgICAgICAgICAgcmVzID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMucmVzcG9uc2VUeXBlIHx8IG9wdGlvbnMucmVzcG9uc2VUeXBlID09PSBcInRleHRcIikge1xuICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBvdGhlciB0eXBlcywgaS5lLiBqc29uIChtaWdodCBtYWtlIGZpeEpzb25SZXNwb25zZSBvYnNvbGV0ZSksIGJsb2Igb3IgZG9jdW1lbnQuXG4gICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLnJlc3BvbnNlVHlwZSBjYW4gb25seSBwcm92aWRlIGEgaGludCB0byB3aGF0IHRoZSB1c2VyIGV4cGVjdHMuIFdlIGFsc28gbmVlZCB0byBsb29rIGF0XG4gICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSBoZWFkZXJzIChjb250ZW50LXR5cGUpIHRvIGRldGVybWluZSB0aGUgYWN0dWFsIHJlc3BvbnNlIGZvcm1hdCAod2Ugc2hvdWxkIHN0aWxsIHRyeSB0b1xuICAgICAgICAgICAgICAgICAgLy8gcHJvdmlkZSB0aGUgdHlwZSB0aGF0IHdhcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIsIGlmIHBvc3NpYmxlKS5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgb25TdWNjZXNzICYmIG9uU3VjY2VzcyhmaXhKc29uUmVzcG9uc2UocmVzKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIG9uRXJyb3IocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5yZXNwb25zZVRleHQsIHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG5cbiAgICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCB8fCAob3B0aW9ucy5ub0JvZHkgPyAnSEVBRCcgOiAnR0VUJyksXG4gICAgICAgICAgICAgIGJvZHk6IG9wdGlvbnMucG9zdERhdGEsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fSxcbiAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChvcHRpb25zLnJhbmdlKSB7XG4gICAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMuUmFuZ2UgPSBcImJ5dGVzPVwiICsgb3B0aW9ucy5yYW5nZS5taW4gKyBcIi1cIiArIG9wdGlvbnMucmFuZ2UubWF4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEluIGNhc2UgdGhhdCBVUkwgYWxyZWFkeSBzaWduZWQsIG5vIG5lZWQgdG8gYWRkIGNyZWRlbnRpYWxzIHRvIGl0LlxuICAgICAgICAgIGlmICghaXNTaWduZWRVcmwpIHtcbiAgICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSAnaW5jbHVkZSc7XG5cbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBcIndpdGhDcmVkZW50aWFsc1wiKSAmJiBvcHRpb25zLndpdGhDcmVkZW50aWFscyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9ICdvbWl0JztcblxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSB3aXRoQ3JlZGVudGlhbHMgaWYgaGVhZGVyIGlzIEF1dGhvcml6YXRpb24gdHlwZVxuICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IHVzaW5nIHdpdGhDcmVkZW50aWFscyBhdHRhY2hlcyBjb29raWUgZGF0YSB0byByZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlci50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcImF1dGhvcml6YXRpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9ICdvbWl0JztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QsIHJlcXVlc3RPcHRpb25zKTtcblxuICAgICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uZGF0YSB8fCBvcHRpb25zLm9ucHJvZ3Jlc3MpIHsgLy8gcmVxdWVzdGVyIGV4cGVjdHMgcHJvZ3Jlc3NpdmUgdXBkYXRlc1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuXG4gICAgICAgICAgICAgICAgICBsZXQgYWdncmVnYXRlQnVmZmVyO1xuICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRWaWV3O1xuICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgY29udGVudC1sZW5ndGggd2lsbCB1c3VhbGx5IHJlZmVyIHRvIHRoZSBnemlwcGVkIHNpemUsIHdoaWxlIHRoaXMgYXJyYXkgaXMgc3VwcG9zZWRcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzdG9yZSB0aGUgdW5jb21wcmVzc2VkIGRhdGEuIFNvIHdlIHdpbGwgaGF2ZSB0byByZXNpemUgaXQgZHVyaW5nIHRoZSBkb3dubG9hZC5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVCdWZmZXIgPSBuZXcgVWludDhBcnJheShjb250ZW50TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVCdWZmZXIgPSBuZXcgVWludDhBcnJheSg1IDw8IDExKTsgLy8gc3RhcnQgd2l0aCAxMCBrYjsgdGhpcyBpcyBhcmJpdHJhcnlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGxldCByZWNlaXZlZExlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzQ2FsbGJhY2sgPSAoe2RvbmUsIHZhbHVlfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9ucHJvZ3Jlc3MgJiYgcmVjZWl2ZWRMZW5ndGggPCBhZ2dyZWdhdGVCdWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBJcyBpdCBiZXR0ZXIgdG8gY29weSBpbnN0ZWFkIG9mIGp1c3QgY3JlYXRpbmcgYSB2aWV3LCBzbyB0aGF0IHVudXNlZCBtZW1vcnkgY2FuIGJlIGZyZWVkP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYWdncmVnYXRlQnVmZmVyLmJ1ZmZlciwgMCwgcmVjZWl2ZWRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25Mb2FkKHJlc3BvbnNlLCBhZ2dyZWdhdGVCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25kYXRhKHZhbHVlKTsgLy8gb25seSBzZW5kIHRoZSBpbmNyZW1lbnRhbCB1cGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBvbnByb2dyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZW50aXJlIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWdncmVnYXRlQnVmZmVyLmxlbmd0aCA8IHZhbHVlLmxlbmd0aCArIHJlY2VpdmVkTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdsZW4gPSBNYXRoLm1heChhZ2dyZWdhdGVCdWZmZXIubGVuZ3RoICogMiwgdmFsdWUubGVuZ3RoICsgcmVjZWl2ZWRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld2xlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCdWZmZXIuc2V0KGFnZ3JlZ2F0ZUJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGVCdWZmZXIgPSBuZXdCdWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlQnVmZmVyLnNldCh2YWx1ZSwgcmVjZWl2ZWRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZExlbmd0aCArPSB2YWx1ZS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpZXcgPSBuZXcgVWludDhBcnJheShhZ2dyZWdhdGVCdWZmZXIuYnVmZmVyLCAwLCByZWNlaXZlZExlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvcnQgPSBvcHRpb25zLm9ucHJvZ3Jlc3MoY3VycmVudFZpZXcpOyAvLyBzZW5kIGV2ZXJ5dGhpbmcgdGhhdCBoYXMgYmVlbiByZWNlaXZlZCBzbyBmYXJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BYm9ydChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3NDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIChhbmQgdGhlIGluc3RhbmNlIGFib3ZlKSBtaWdodCBuZWVkIGVycm9yIGhhbmRsaW5nIChjYXRjaCksIHVubGVzcyB0aGlzIGlzIGhhbmRsZWQgYnlcbiAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cnkgLi4uIGNhdGNoIGFscmVhZHkuXG4gICAgICAgICAgICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3NDYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHJlcXVlc3RlciBleHBlY3RzIG9uZS10aW1lIGZ1bGwgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgIG9uTG9hZChyZXNwb25zZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgeyAvLyBXZSBnb3QgYSBzdGF0dXMgY29kZSB0aGF0IGluZGljYXRlcyBhbiBlcnJvciAoNDAwKylcbiAgICAgICAgICAgICAgb25FcnJvcihyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQsIHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgdmFsaWQgcmVzcG9uc2Ugb2JqZWN0IGluIHRoaXMgY2FzZS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgb25GYWlsdXJlKHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2Uuc3RhdHVzVGV4dCwge3VybDogdXJsLCBleGNlcHRpb246IGV9LCB3cmFwUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvbkZhaWx1cmUoMCwgXCJuZXR3b3JrIGVycm9yXCIsIHt1cmw6IHVybCwgZXhjZXB0aW9uOiBlfSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9O1xuXG59IC8vIGJyb3dzZXIgZ2V0IGltcGxlbWVudGF0aW9uXG5cbiAgICAvLyBDcmVhdGUgdGhlIGRlZmF1bHQgZmFpbHVyZSBjYWxsYmFjay5cbiAgICAvL1xuICAgIFZpZXdpbmdTZXJ2aWNlLmRlZmF1bHRGYWlsdXJlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaHR0cFN0YXR1cywgaHR0cFN0YXR1c1RleHQsIGRhdGEpIHtcbiAgICAgICAgaWYgKGh0dHBTdGF0dXMgPT0gNDAzKSB7XG4gICAgICAgICAgICB0aGlzLnJhaXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgRXJyb3JDb2Rlcy5ORVRXT1JLX0FDQ0VTU19ERU5JRUQsXG4gICAgICAgICAgICAgICAgXCJBY2Nlc3MgZGVuaWVkIHRvIHJlbW90ZSByZXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIHsgXCJ1cmxcIjogZGF0YS51cmwsIFwiaHR0cFN0YXR1c1wiOiBodHRwU3RhdHVzLCBcImh0dHBTdGF0dXNUZXh0XCI6IGh0dHBTdGF0dXNUZXh0IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGh0dHBTdGF0dXMgPT0gNDA0KSB7XG4gICAgICAgICAgICB0aGlzLnJhaXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgRXJyb3JDb2Rlcy5ORVRXT1JLX0ZJTEVfTk9UX0ZPVU5ELFxuICAgICAgICAgICAgICAgIFwiUmVtb3RlIHJlc291cmNlIG5vdCBmb3VuZFwiLFxuICAgICAgICAgICAgICAgIHsgXCJ1cmxcIjogZGF0YS51cmwsIFwiaHR0cFN0YXR1c1wiOiBodHRwU3RhdHVzLCBcImh0dHBTdGF0dXNUZXh0XCI6IGh0dHBTdGF0dXNUZXh0IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGh0dHBTdGF0dXMgPT09IDAgJiYgZGF0YS5hYm9ydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJhaXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgRXJyb3JDb2Rlcy5MT0FEX0NBTkNFTEVELFxuICAgICAgICAgICAgICAgIFwiUmVxdWVzdCBhYm9ydGVkXCIsXG4gICAgICAgICAgICAgICAgeyBcInVybFwiOiBkYXRhLnVybCwgXCJodHRwU3RhdHVzXCI6IGh0dHBTdGF0dXMsIFwiaHR0cFN0YXR1c1RleHRcIjogaHR0cFN0YXR1c1RleHQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHR0cFN0YXR1cyA+PSA1MDAgJiYgaHR0cFN0YXR1cyA8IDYwMCkge1xuICAgICAgICAgICAgdGhpcy5yYWlzZUVycm9yKFxuICAgICAgICAgICAgICAgIEVycm9yQ29kZXMuTkVUV09SS19TRVJWRVJfRVJST1IsXG4gICAgICAgICAgICAgICAgXCJTZXJ2ZXIgZXJyb3Igd2hlbiBhY2Nlc3NpbmcgcmVzb3VyY2VcIixcbiAgICAgICAgICAgICAgICB7IFwidXJsXCI6IGRhdGEudXJsLCBcImh0dHBTdGF0dXNcIjogaHR0cFN0YXR1cywgXCJodHRwU3RhdHVzVGV4dFwiOiBodHRwU3RhdHVzVGV4dCB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhLmV4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yYWlzZUVycm9yKFxuICAgICAgICAgICAgICAgIEVycm9yQ29kZXMuTkVUV09SS19GQUlMVVJFLFxuICAgICAgICAgICAgICAgIFwiTmV0d29yayBmYWlsdXJlXCIsXG4gICAgICAgICAgICAgICAgeyBcInVybFwiOiBkYXRhLnVybCwgXCJleGNlcHRpb25cIjogZGF0YS5leGNlcHRpb24udG9TdHJpbmcoKSwgXCJzdGFja1wiOiBkYXRhLmV4Y2VwdGlvbi5zdGFja30pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yYWlzZUVycm9yKFxuICAgICAgICAgICAgICAgIEVycm9yQ29kZXMuTkVUV09SS19VTkhBTkRMRURfUkVTUE9OU0VfQ09ERSxcbiAgICAgICAgICAgICAgICBcIlVuaGFuZGxlZCByZXNwb25zZSBjb2RlIGZyb20gc2VydmVyXCIsXG4gICAgICAgICAgICAgICAgeyBcInVybFwiOiBkYXRhLnVybCwgXCJodHRwU3RhdHVzXCI6IGh0dHBTdGF0dXMsIFwiaHR0cFN0YXR1c1RleHRcIjogaHR0cFN0YXR1c1RleHQsIGRhdGE6ZGF0YSB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cblxuXG4gICAgZnVuY3Rpb24gY29weU9wdGlvbnMobG9hZENvbnRleHQsIG9wdGlvbnMpIHtcblxuICAgICAgICAvL1Rob3NlIGFyZSB0aGUgdXN1YWwgZGVmYXVsdHMgd2hlbiBjYWxsZWQgZnJvbSB0aGUgTE1WIHdvcmtlclxuXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIFwicmVzcG9uc2VUeXBlXCIpKVxuICAgICAgICAgICAgb3B0aW9ucy5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG5cbiAgICAgICAgLy9BZGQgb3B0aW9ucyBqdW5rIHdlIGdvdCBmcm9tIHRoZSBtYWluIHRocmVhZCBjb250ZXh0XG5cbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgXCJ3aXRoQ3JlZGVudGlhbHNcIikpXG4gICAgICAgICAgICBvcHRpb25zLndpdGhDcmVkZW50aWFscyA9ICEhbG9hZENvbnRleHQuYXV0aDtcblxuICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBsb2FkQ29udGV4dC5oZWFkZXJzO1xuICAgICAgICBvcHRpb25zLnF1ZXJ5UGFyYW1zID0gbG9hZENvbnRleHQucXVlcnlQYXJhbXM7XG4gICAgICAgIG9wdGlvbnMuZW5kcG9pbnQgPSBsb2FkQ29udGV4dC5lbmRwb2ludDtcbiAgICAgICAgb3B0aW9ucy5lc2NhcGVPc3NPYmplY3RzID0gbG9hZENvbnRleHQuZXNjYXBlT3NzT2JqZWN0cztcbiAgICB9XG5cbiAgICAvL1V0aWxpdHkgZnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIHdlYiB3b3JrZXIgdG8gc2V0IHVwIHRoZSBvcHRpb25zIGZvciBhIGdldCByZXF1ZXN0LFxuICAgIC8vdGhlbiBjYWxsaW5nIFZpZXdpbmdTZXJ2aWNlLmdldCBpbnRlcm5hbGx5XG4gICAgVmlld2luZ1NlcnZpY2UuZ2V0SXRlbSA9IGZ1bmN0aW9uIChsb2FkQ29udGV4dCwgdXJsLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSwgb3B0aW9ucykge1xuXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIGNvcHlPcHRpb25zKGxvYWRDb250ZXh0LCBvcHRpb25zKTtcblxuICAgICAgICAvL0lmIHRoZSBlbmRwb2ludCBkb2VzIG5vdCBzdXBwb3J0IHJhbmdlIHJlcXVlc3RzIChBcGlnZWUpLCB0aGVuIGNvbnZlcnRcbiAgICAgICAgLy90aGUgcmFuZ2UgdG8gc3RhcnQvZW5kIFVSTCBwYXJhbWV0ZXJzLlxuICAgICAgICBpZiAob3B0aW9ucy5yYW5nZSAmJiAhbG9hZENvbnRleHQuc3VwcG9ydHNSYW5nZVJlcXVlc3RzKSB7XG5cbiAgICAgICAgICAgIGxldCByYW5nZVBhcmFtID0gXCJzdGFydD1cIiArIG9wdGlvbnMucmFuZ2UubWluICsgXCImZW5kPVwiICsgb3B0aW9ucy5yYW5nZS5tYXg7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucXVlcnlQYXJhbXMgKz0gXCImXCIgKyByYW5nZVBhcmFtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnF1ZXJ5UGFyYW1zID0gcmFuZ2VQYXJhbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3B0aW9ucy5yYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIFZpZXdpbmdTZXJ2aWNlLnJhd0dldChsb2FkQ29udGV4dC5lbmRwb2ludCwgJ2l0ZW1zJywgdXJsLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSwgb3B0aW9ucyk7XG5cbiAgICB9O1xuXG4gICAgLy9VdGlsaXR5IGZ1bmN0aW9uIGNhbGxlZCBmcm9tIHRoZSB3ZWIgd29ya2VyIHRvIHNldCB1cCB0aGUgb3B0aW9ucyBmb3IgYSBnZXQgcmVxdWVzdCxcbiAgICAvL3RoZW4gY2FsbGluZyBWaWV3aW5nU2VydmljZS5nZXQgaW50ZXJuYWxseVxuICAgIFZpZXdpbmdTZXJ2aWNlLmdldE1hbmlmZXN0ID0gZnVuY3Rpb24gKGxvYWRDb250ZXh0LCB1cmwsIG9uU3VjY2Vzcywgb25GYWlsdXJlLCBvcHRpb25zKSB7XG5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgXCJyZXNwb25zZVR5cGVcIikpXG4gICAgICAgICAgICBvcHRpb25zLnJlc3BvbnNlVHlwZSA9IFwianNvblwiO1xuXG4gICAgICAgIGNvcHlPcHRpb25zKGxvYWRDb250ZXh0LCBvcHRpb25zKTtcblxuICAgICAgICBWaWV3aW5nU2VydmljZS5yYXdHZXQobG9hZENvbnRleHQuZW5kcG9pbnQsICdidWJibGVzJywgdXJsLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSwgb3B0aW9ucyk7XG5cbiAgICB9O1xuXG4gICAgVmlld2luZ1NlcnZpY2UuZ2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uIChsb2FkQ29udGV4dCwgdXJsLCBndWlkLCBxdWVyeSwgb25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBjb3B5T3B0aW9ucyhsb2FkQ29udGV4dCwgb3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnMucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgICBvcHRpb25zLmd1aWQgPSBndWlkO1xuICAgICAgICBvcHRpb25zLm1ldGhvZCA9ICdQT1NUJztcbiAgICAgICAgb3B0aW9ucy5wb3N0RGF0YSA9IEpTT04uc3RyaW5naWZ5KHF1ZXJ5KTtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydhY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nXSA9ICcqJztcbiAgICAgICAgVmlld2luZ1NlcnZpY2UucmF3R2V0KGxvYWRDb250ZXh0LmVuZHBvaW50LCAncHJvcGVydGllcycsIHVybCwgb25TdWNjZXNzLCBvbkZhaWx1cmUsIG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICAvL1V0aWxpdHkgZnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIHdlYiB3b3JrZXIgdG8gc2V0IHVwIHRoZSBvcHRpb25zIGZvciBhIGdldCByZXF1ZXN0LFxuICAgIC8vdGhlbiBjYWxsaW5nIFZpZXdpbmdTZXJ2aWNlLmdldCBpbnRlcm5hbGx5XG4gICAgVmlld2luZ1NlcnZpY2UuZ2V0VGh1bWJuYWlsID0gZnVuY3Rpb24gKGxvYWRDb250ZXh0LCB1cmwsIG9uU3VjY2Vzcywgb25GYWlsdXJlLCBvcHRpb25zKSB7XG5cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgY29weU9wdGlvbnMobG9hZENvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG9wdGlvbnMucXVlcnlQYXJhbXMgfHwgJyc7XG4gICAgICAgIHZhciBtaXNzaW5nRWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLmluZGV4T2YoJ2d1aWQ9JykgPT09IC0xICYmIG9wdGlvbnMuZ3VpZCkge1xuICAgICAgICAgICAgbWlzc2luZ0VsZW1lbnRzLnB1c2goXCJndWlkPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuZ3VpZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxdWVyeVBhcmFtcy5pbmRleE9mKCdyb2xlPScpID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIHJvbGUgPSBvcHRpb25zLnJvbGUgfHwgXCJyZW5kZXJlZFwiO1xuICAgICAgICAgICAgbWlzc2luZ0VsZW1lbnRzLnB1c2goXCJyb2xlPVwiICsgcm9sZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLmluZGV4T2YoJ3dpZHRoPScpID09PSAtMSkge1xuICAgICAgICAgICAgbGV0IHN6ID0gb3B0aW9ucy5zaXplIHx8IDQwMDtcbiAgICAgICAgICAgIG1pc3NpbmdFbGVtZW50cy5wdXNoKFwid2lkdGg9XCIgKyBzeik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLmluZGV4T2YoJ2hlaWdodD0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGxldCBzeiA9IG9wdGlvbnMuc2l6ZSB8fCA0MDA7XG4gICAgICAgICAgICBtaXNzaW5nRWxlbWVudHMucHVzaChcImhlaWdodD1cIiArIHN6KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocXVlcnlQYXJhbXMuaW5kZXhPZignYWNtc2Vzc2lvbj0nKSA9PT0gLTEgJiYgb3B0aW9ucy5hY21zZXNzaW9uKSB7XG4gICAgICAgICAgICBtaXNzaW5nRWxlbWVudHMucHVzaChcImFjbXNlc3Npb249XCIgKyBvcHRpb25zLmFjbXNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aHVtYlF1ZXJ5UGFyYW1zID0gbWlzc2luZ0VsZW1lbnRzLmpvaW4oJyYnKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgb3B0aW9ucy5xdWVyeVBhcmFtcyA9IG9wdGlvbnMucXVlcnlQYXJhbXMgKyAnJicgKyB0aHVtYlF1ZXJ5UGFyYW1zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5xdWVyeVBhcmFtcyA9IHRodW1iUXVlcnlQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBWaWV3aW5nU2VydmljZS5yYXdHZXQobG9hZENvbnRleHQuZW5kcG9pbnQsICd0aHVtYm5haWxzJywgdXJsLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSwgb3B0aW9ucyk7XG4gICAgfTtcblxuXG4gICAgVmlld2luZ1NlcnZpY2UuZ2V0QUNNU2Vzc2lvbiA9IGZ1bmN0aW9uIChlbmRwb2ludCwgYWNtUHJvcGVydGllcywgb25TdWNjZXNzLCBvbkZhaWx1cmUpIHtcbiAgICAgICAgY29uc3QgYmFja09mZk9wdGlvbnMgPSB7XG4gICAgICAgICAgICBudW1PZkF0dGVtcHRzOiA0LFxuICAgICAgICAgICAgdGltZU11bHRpcGxlOiA1LFxuICAgICAgICAgICAgcmV0cnk6IChfICwgYXR0ZW1wdE51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybihgYWNtc2Vzc2lvbiByZXF1ZXN0IGZhaWxlZC4gQXR0ZW1wdCAjJHthdHRlbXB0TnVtYmVyfWApO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgXG4gICAgICAgIGJhY2tPZmYoKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgVmlld2luZ1NlcnZpY2UuX2dldEFDTVNlc3Npb24oZW5kcG9pbnQsIGFjbVByb3BlcnRpZXMsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pLCBiYWNrT2ZmT3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKCguLi5hcmdzKSA9PiBvblN1Y2Nlc3MoLi4uYXJncykpXG4gICAgICAgICAgICAuY2F0Y2goKC4uLmFyZ3MpID0+IG9uRmFpbHVyZSguLi5hcmdzKSk7XG4gICAgfTtcblxuXG4gICAgVmlld2luZ1NlcnZpY2UuX2dldEFDTVNlc3Npb24gPSBmdW5jdGlvbiAoZW5kcG9pbnQsIGFjbVByb3BlcnRpZXMsIG9uU3VjY2Vzcywgb25GYWlsdXJlKSB7XG5cbiAgICAgICAgdmFyIGFjbUhlYWRlcnMgPSB7fTtcbiAgICAgICAgdmFyIHRva2VuO1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBhY21Qcm9wZXJ0aWVzKSB7XG5cbiAgICAgICAgICAgIGlmIChrZXkgPT09IFwib2F1dGgyQWNjZXNzVG9rZW5cIilcbiAgICAgICAgICAgICAgICB0b2tlbiA9IGFjbVByb3BlcnRpZXNba2V5XTtcblxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5LmluZGV4T2YoXCJ4LWFkcy1hY21cIikgIT09IC0xKVxuICAgICAgICAgICAgICAgIGFjbUhlYWRlcnNba2V5XSA9IGFjbVByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSB2YWx1ZSBvZiB0aGlzIGNhbiBiZSBhbnl0aGluZy4gUmVxdWlyZWQgZm9yIHNvbWUgYXJjYW5lIHJlYXNvbnMuXG4gICAgICAgIGFjbUhlYWRlcnMuYXBwbGljYXRpb24gPSBcImF1dG9kZXNrXCI7XG5cbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgZW5kcG9pbnQgKyAnL29zcy1leHQvdjIvYWNtc2Vzc2lvbnMnLCB0cnVlKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBcImpzb25cIjtcblxuICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiB4aHIucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgYSBzdHJpbmcgKGUuZy4gZnJvbSBJRSksIG5lZWQgdG8gcGFyc2UgaXQgdG8gYW4gb2JqZWN0IGZpcnN0XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gdHlwZW9mKHhoci5yZXNwb25zZSkgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpIDogeGhyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmFjbXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb25TdWNjZXNzKHJlc3BvbnNlLmFjbXNlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb25GYWlsdXJlKHhoci5zdGF0dXMsIFwiQ2FuJ3QgZ2V0IGFjbSBzZXNzaW9uIGZyb20gcmVzcG9uc2UuXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvbkZhaWx1cmUoeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgeGhyLm9uZXJyb3IgPSBvbkZhaWx1cmU7XG4gICAgICAgIHhoci5vbnRpbWVvdXQgPSBvbkZhaWx1cmU7XG4gICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGFjbUhlYWRlcnMpKTtcblxuICAgICAgICAvLyBcImFwcGxpY2F0aW9uXCIgaGVhZGVyIGlzIG9ubHkgcmVxdWlyZWQgZm9yIE9TUyBlbmQgcG9pbnQsIGFuZCBzaG91bGQgbm90IGJlIHBhc3NlZFxuICAgICAgICAvLyB3aXRoIG5vcm1hbCByZXF1ZXN0cyBiZWNhdXNlIHRoaXMgaGVhZGVyIGlzIG5vdCBpbiBhbGxvd2VkIGhlYWRlciBzZXRzIG9mIEFQSUdFRS5cbiAgICAgICAgZGVsZXRlIGFjbUhlYWRlcnMuYXBwbGljYXRpb247XG5cbiAgICB9O1xuXG4gICAgIl0sIm5hbWVzIjpbImxvZ2dlciIsIkVycm9yQ29kZXMiLCJibG9iVG9Kc29uIiwiZW5kcG9pbnQiLCJpc05vZGVKUyIsImdldEdsb2JhbCIsImJhY2tPZmYiLCJndW56aXBTeW5jIiwiVmlld2luZ1NlcnZpY2UiLCJXT1JLRVJfUkVHSVNURVJfRklMRV9QT1JUIiwiV09SS0VSX1JFQURfRklMRSIsIndhcm5lZEd6aXAiLCJzaW1wbGlmeVBhdGgiLCJwYXRoIiwiZWxlbWVudHMiLCJzcGxpdCIsImxlbmd0aCIsInN0YWNrIiwiaW5kZXgiLCJjIiwicG9wIiwicHVzaCIsImpvaW4iLCJwYXRoVG9VUkwiLCJhYnNvbHV0ZUJhc2VQYXRoIiwiaW5kZXhPZiIsIndpbmRvdyIsIl93aW5kb3ciLCJyb290UmVsUGF0aCIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJsYXN0U2xhc2giLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsImFic1BhdGgiLCJwcm90b2NvbCIsImhvc3QiLCJ0ZXh0VG9BcnJheUJ1ZmZlciIsInRleHRCdWZmZXIiLCJzdGFydE9mZnNldCIsImxlbiIsImFycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJ1aThhIiwiVWludDhBcnJheSIsImkiLCJqIiwiY2hhckNvZGVBdCIsIk9TU19QUkVGSVgiLCJnZW5lcmF0ZVVybCIsImJhc2VVcmwiLCJhcGkiLCJhcGlEYXRhIiwiZXNjYXBlT3NzT2JqZWN0cyIsImd1aWQiLCJpc1JlbW90ZVBhdGgiLCJ1cm5pZHgiLCJxaWR4Iiwic2xpY2UiLCJlbmNvZGVVUklDb21wb25lbnQiLCJlbmNvZGVVUkkiLCJpc09TU1VybCIsIm9iamVjdHNJbmRleCIsIm9iamVjdFBhdGgiLCJzdWJzdHJpbmciLCJkZWNvZGVVUklDb21wb25lbnQiLCJnZXRJdGVtQXBpIiwiZ2V0TWFuaWZlc3RBcGkiLCJnZXRUaHVtYm5haWxBcGkiLCJnZXRQcm9wZXJ0eVF1ZXJ5QXBpIiwiZnMiLCJyZXF1aXJlIiwiemxpYiIsImh0dHBzIiwiaHR0cCIsInVybGxpYiIsImh0dHBzQWdlbnQiLCJBZ2VudCIsImtlZXBBbGl2ZSIsImtlZXBBbGl2ZU1zZWNzIiwibWF4U29ja2V0cyIsImh0dHBBZ2VudCIsImZvcmdlQWdlbnQiLCJsb2FkTG9jYWxGaWxlIiwidXJsIiwib25TdWNjZXNzIiwib25GYWlsdXJlIiwib3B0aW9ucyIsInBvc3RQcm9jZXNzIiwiZGF0YSIsInJlc3BvbnNlVHlwZSIsIkpTT04iLCJwYXJzZSIsInRvU3RyaW5nIiwiZSIsInJlYWRGaWxlIiwiZXJyb3IiLCJodHRwU3RhdHVzVGV4dCIsImd1bnppcCIsIm9uZGF0YSIsIm5lZWRzR3VuemlwIiwicmVzIiwiaGVhZGVycyIsImVuZHNXaXRoIiwicmF3R2V0Iiwidmlld2luZ1NlcnZpY2VCYXNlVXJsIiwidW5kZWZpbmVkIiwicXVlcnlQYXJhbXMiLCJjb25jYXRTeW1ib2wiLCJwYXJzZWQiLCJyZXEiLCJob3N0bmFtZSIsInBvcnQiLCJtZXRob2QiLCJyZXRyeUNvdW50IiwiYWdlbnQiLCJzdGFydHNXaXRoIiwicCIsInJhbmdlIiwibWluIiwibWF4Iiwib25wcm9ncmVzcyIsInJlcXVlc3QiLCJoYXNFcnJvciIsInN0YXR1c0NvZGUiLCJzdHJlYW0iLCJwaXBlIiwiY3JlYXRlR3VuemlwIiwic2V0RW5jb2RpbmciLCJjaHVua3MiLCJyZWNlaXZlQnVmZmVyIiwiQnVmZmVyIiwiYWxsb2NVbnNhZmUiLCJyZWNlaXZlZExlbiIsIm9uIiwiY2h1bmsiLCJuYiIsIk1hdGgiLCJjZWlsIiwiY29weSIsImFib3J0IiwianNvYmoiLCJzdHIiLCJidWYiLCJjb25jYXQiLCJ3YXJuIiwiZXJyIiwiQkFEX0RBVEEiLCJzdGF0dXMiLCJzdGF0dXNNZXNzYWdlIiwiY29kZSIsIm1lc3NhZ2UiLCJwb3N0RGF0YSIsIndyaXRlIiwiZW5kIiwiUGVuZCIsInhoclRocm90dGxlIiwicHJvdG9jb2xQb3J0TWFwIiwicGVuZGluZ1BvcnRSZXF1ZXN0IiwicGVuZGluZ1JlcXVlc3RDaGFubmVsTWFwIiwicmVnaXN0ZXJQcm90b2NvbFBvcnQiLCJ0ZXN0IiwiY29uc29sZSIsIk1lc3NhZ2VQb3J0Iiwib25tZXNzYWdlIiwicGVuZGluZ0hhbmRsZXIiLCJvbkZhaWx1cmVXcmFwcGVkIiwicmF3YnVmIiwiYnVmZmVyIiwibWF0Y2giLCJvblN1Y2Nlc3NXcmFwcGVkIiwidHJhbnNmZXIiLCJwb3N0TWVzc2FnZSIsImhhbmRsZXJQcm90b2NvbCIsIm9wZXJhdGlvbiIsImZvcndhcmRQcm90b2NvbEhhbmRsZXJUb1dvcmtlciIsIndvcmtlciIsIm1hcCIsImNoYW5uZWwiLCJNZXNzYWdlQ2hhbm5lbCIsInBvcnQxIiwiVVJMIiwia2V5IiwicG9ydDIiLCJkb09wZXJhdGlvbiIsImdvIiwicGVuZENCIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJhcHBseSIsIl9sZW4yIiwiX2tleTIiLCJwcm90b2NvbE1hdGNoIiwiZXhlYyIsImdldEZ1bmMiLCJfcmF3R2V0IiwidXNlRmV0Y2giLCJfcmF3R2V0RmV0Y2giLCJlcnJvckNvZGUiLCJub0JvZHkiLCJ0b0xvd2VyQ2FzZSIsInNob3VsZFJldHJ5IiwiYWJvcnRlZCIsImRlbGF5TXMiLCJ0aW1lTXVsdGlwbGUiLCJyZXRyeUFmdGVyIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJzZWNvbmRzIiwiTnVtYmVyIiwiaXNOYU4iLCJEYXRlIiwiZ2V0VGltZSIsIl9yZXRyeVJlcXVlc3QiLCJ0aGVuIiwiY2F0Y2giLCJiYWNrT2ZmT3B0aW9ucyIsImRlbGF5Rmlyc3RBdHRlbXB0Iiwic3RhcnRpbmdEZWxheSIsIm51bU9mQXR0ZW1wdHMiLCJyZXRyeSIsIl9yZWYiLCJhdHRlbXB0TnVtYmVyIiwiZXJyb3JNc2ciLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9sZW4zIiwiX2tleTMiLCJfbGVuNCIsIl9rZXk0IiwiZ2V0U2lnbmVkUzNEb3dubG9hZFVybCIsImFjbXNlc3Npb25JbmRleCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInNldFJlcXVlc3RIZWFkZXIiLCJIVFRQX1JFUVVFU1RfSEVBREVSUyIsInNlbmQiLCJzdWNjZXNzIiwicmVzcG9uc2UiLCJjdXJyZW50VGFyZ2V0IiwiZmFpbCIsIm9ubG9hZCIsIm9uZXJyb3IiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaXNTaWduZWRVcmwiLCJzaWduZWRVcmwiLCJvbkVycm9yIiwic3RhdHVzVGV4dCIsIm9uQWJvcnQiLCJmaXhKc29uUmVzcG9uc2UiLCJvbkxvYWQiLCJyZXNwb25zZVRleHQiLCJpc0FzeW5jIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXN5bmNocm9ub3VzIiwid2l0aENyZWRlbnRpYWxzIiwiaGVhZGVyIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJvdmVycmlkZU1pbWVUeXBlIiwiX2RsUHJvZ3Jlc3MiLCJzdHJlYW1PZmZzZXQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiZXhjZXB0aW9uIiwiUmVxdWVzdCIsImFib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsIndyYXBSZXNwb25zZSIsIl9yZXNwb25zZSRoZWFkZXJzIiwiZ2V0IiwiYm9keVVzZWQiLCJ0ZXh0IiwicmVxdWVzdE9wdGlvbnMiLCJib2R5Iiwic2lnbmFsIiwiUmFuZ2UiLCJjcmVkZW50aWFscyIsImZldGNoIiwib2siLCJyZWFkZXIiLCJnZXRSZWFkZXIiLCJhZ2dyZWdhdGVCdWZmZXIiLCJjdXJyZW50VmlldyIsImNvbnRlbnRMZW5ndGgiLCJyZWNlaXZlZExlbmd0aCIsInByb2dyZXNzQ2FsbGJhY2siLCJfcmVmMiIsImRvbmUiLCJ2YWx1ZSIsIm5ld2xlbiIsIm5ld0J1ZmZlciIsInNldCIsImNhbmNlbCIsInJlYWQiLCJkZWZhdWx0RmFpbHVyZUNhbGxiYWNrIiwiaHR0cFN0YXR1cyIsInJhaXNlRXJyb3IiLCJORVRXT1JLX0FDQ0VTU19ERU5JRUQiLCJORVRXT1JLX0ZJTEVfTk9UX0ZPVU5EIiwiTE9BRF9DQU5DRUxFRCIsIk5FVFdPUktfU0VSVkVSX0VSUk9SIiwiTkVUV09SS19GQUlMVVJFIiwiTkVUV09SS19VTkhBTkRMRURfUkVTUE9OU0VfQ09ERSIsImNvcHlPcHRpb25zIiwibG9hZENvbnRleHQiLCJhdXRoIiwiZ2V0SXRlbSIsInN1cHBvcnRzUmFuZ2VSZXF1ZXN0cyIsInJhbmdlUGFyYW0iLCJnZXRNYW5pZmVzdCIsImdldFByb3BlcnRpZXMiLCJxdWVyeSIsInN0cmluZ2lmeSIsImdldFRodW1ibmFpbCIsIm1pc3NpbmdFbGVtZW50cyIsInJvbGUiLCJzeiIsInNpemUiLCJhY21zZXNzaW9uIiwidGh1bWJRdWVyeVBhcmFtcyIsImdldEFDTVNlc3Npb24iLCJhY21Qcm9wZXJ0aWVzIiwiXyIsIl9nZXRBQ01TZXNzaW9uIiwiYWNtSGVhZGVycyIsInRva2VuIiwiYXBwbGljYXRpb24iLCJ4aHIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/net/Xhr.js\n"); /***/ }), /***/ "./src/file-loaders/net/endpoints.js": /*!*******************************************!*\ !*** ./src/file-loaders/net/endpoints.js ***! \*******************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ endpoint: () => (/* binding */ endpoint),\n/* harmony export */ getEnv: () => (/* binding */ getEnv),\n/* harmony export */ getOfflineResourcePrefix: () => (/* binding */ getOfflineResourcePrefix),\n/* harmony export */ initLoadContext: () => (/* binding */ initLoadContext),\n/* harmony export */ isOffline: () => (/* binding */ isOffline),\n/* harmony export */ setEnv: () => (/* binding */ setEnv),\n/* harmony export */ setOffline: () => (/* binding */ setOffline),\n/* harmony export */ setOfflineResourcePrefix: () => (/* binding */ setOfflineResourcePrefix)\n/* harmony export */ });\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../compat */ \"./src/compat.js\");\n/* harmony import */ var _globals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../globals */ \"./src/globals.js\");\n\n\n\n\nconst _window = (0,_compat__WEBPACK_IMPORTED_MODULE_0__.getGlobal)();\n\nvar endp = {};\n\nvar CDN_ROOT = null;\nendp.ENDPOINT_API_DERIVATIVE_SERVICE_V2 = 'derivativeV2';\nendp.ENDPOINT_API_MODEL_DERIVATIVE_V2 = 'modelDerivativeV2'; // Forge\nendp.ENDPOINT_API_FLUENT = 'fluent';\nendp.ENDPOINT_API_D3S = 'D3S';\nendp.ENDPOINT_API_DERIVATIVE_STREAMING = 'streamingV2'; // SVF2\n\nvar _apis_data = {\n derivativeV2: {\n baseURL: '/derivativeservice/v2',\n itemURL: '/derivativeservice/v2/derivatives/:derivativeurn',\n manifestURL: '/derivativeservice/v2/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/thumbnails/:urn',\n propertyQueryURL: '/modelderivative/v2/designdata/:urn/metadata/:guid/properties:query'\n },\n derivativeV2_EU: {\n baseURL: '/derivativeservice/v2/regions/eu',\n itemURL: '/derivativeservice/v2/regions/eu/derivatives/:derivativeurn',\n manifestURL: '/derivativeservice/v2/regions/eu/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/regions/eu/thumbnails/:urn'\n },\n derivativeV2_APAC: {\n baseURL: '/derivativeservice/v2',\n itemURL: '/derivativeservice/v2/derivatives/:derivativeurn',\n manifestURL: '/derivativeservice/v2/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/thumbnails/:urn'\n },\n derivativeV2_Fedramp: {\n baseURL: '/derivativeservice/v2',\n itemURL: '/derivativeservice/v2/derivatives/:derivativeurn',\n manifestURL: '/derivativeservice/v2/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/thumbnails/:urn'\n },\n modelDerivativeV2: {\n baseURL: '/modelderivative/v2/',\n itemURL: '/modelderivative/v2/designdata/:urn/manifest/:derivativeurn',\n manifestURL: '/modelderivative/v2/designdata/:urn/manifest',\n thumbnailsURL: '/modelderivative/v2/designdata/:urn/thumbnail',\n propertyQueryURL: '/modelderivative/v2/designdata/:urn/metadata/:guid/properties:query'\n },\n fluent: {\n baseURL: '/modeldata',\n itemURL: '/modeldata/file/:derivativeurn',\n manifestURL: '/modeldata/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/thumbnails/:urn',\n cdnURL: '/cdn',\n cdnWS: '/cdnws'\n //cdnRedirectURL: '/cdnurl', //There is no separate CDN endpoint currently\n },\n D3S: {\n baseURL: '/modeldata',\n itemURL: '/modeldata/file/:derivativeurn',\n manifestURL: '/modeldata/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/thumbnails/:urn',\n cdnURL: '/cdn',\n cdnWS: '/cdnws'\n },\n D3S_EU: {\n baseURL: '/modeldata',\n itemURL: '/modeldata/file/:derivativeurn',\n manifestURL: '/modeldata/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/regions/eu/thumbnails/:urn',\n cdnURL: '/cdn',\n cdnWS: '/cdnws'\n },\n D3S_APAC: {\n baseURL: '/modeldata',\n itemURL: '/modeldata/file/:derivativeurn',\n manifestURL: '/modeldata/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/regions/APAC/thumbnails/:urn',\n cdnURL: '/cdn',\n cdnWS: '/cdnws'\n },\n streamingV2: {\n /** SVF2 */\n baseURL: '/modeldata',\n itemURL: '/modeldata/file/:derivativeurn',\n manifestURL: '/modeldata/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/thumbnails/:urn',\n cdnURL: '/cdn',\n cdnWS: '/cdnws'\n },\n streamingV2_EU: {\n /** SVF2 */\n baseURL: '/regions/eu/modeldata',\n itemURL: '/regions/eu/modeldata/file/:derivativeurn',\n manifestURL: '/regions/eu/modeldata/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/regions/eu/thumbnails/:urn',\n cdnURL: '/regions/eu/cdn',\n cdnWS: '/regions/eu/cdnws'\n },\n streamingV2_APAC: {\n /** SVF2 */\n baseURL: '/modeldata',\n itemURL: '/modeldata/file/:derivativeurn',\n manifestURL: '/modeldata/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/thumbnails/:urn',\n cdnURL: '/cdn',\n cdnWS: '/cdnws'\n },\n streamingV2_Fedramp: {\n /** SVF2 */\n baseURL: '/modeldata',\n itemURL: '/modeldata/file/:derivativeurn',\n manifestURL: '/modeldata/manifest/:urn',\n thumbnailsURL: '/derivativeservice/v2/thumbnails/:urn',\n cdnURL: '/cdn',\n cdnWS: '/cdnws'\n }\n};\n\nvar _endpoint = '';\nvar _api = endp.ENDPOINT_API_DERIVATIVE_SERVICE_V2;\nvar _useCredentials = false;\nvar _useCookie = false;\nvar _acmSession = '';\nvar _escapeOssObjects = false;\n\nendp.HTTP_REQUEST_HEADERS = {};\nendp.queryParams = {};\n\n/**\r\n * Sets the endpoint and api to be used to create REST API request strings.\r\n * @param {string} endpoint\r\n * @param {string} [api] - Possible values are derivativeV2, modelDerivativeV2\r\n */\nendp.setEndpointAndApi = function (endpoint, api) {\n if (endpoint != undefined) {\n _endpoint = endpoint;\n }\n if (api) {\n _api = api;\n if (api.startsWith('D3S')) {\n console.warn(`api=${api} is deprecated and will be removed in a future release. Use streamingV2 or streamingV2_EU (europe region) instead`);\n }\n }\n};\n\n/**\r\n * Returns the endpoint plus the api used to create REST API request strings.\r\n * Example: \"developer.api.autodesk.com/modelderivative/v2\"\r\n * @returns {string}\r\n */\nendp.getEndpointAndApi = function () {\n return _endpoint + _apis_data[_api].baseURL;\n};\n\n/**\r\n * Returns the endpoint used to create REST API request strings.\r\n * Examples: \"developer.api.autodesk.com\"\r\n * @returns {string}\r\n */\nendp.getApiEndpoint = function () {\n return _endpoint;\n};\n\n/**\r\n * @private\r\n * @returns {string}\r\n */\nendp.getApiFlavor = function () {\n return _api;\n};\n\n/**\r\n * Returns the default shared resource CDN location.\r\n * For best performance (and to not overload our servers), this should\r\n * be replaced by a direct CloudFront url during initialization, by\r\n * calling the cdnRedirectUrl and looking at the result.\r\n */\nendp.getCdnUrl = function () {\n return CDN_ROOT || (_endpoint ? _endpoint + _apis_data[_api].cdnURL : undefined);\n};\n\nendp.getCdnWebSocketEndpoint = function () {\n return _endpoint + (_apis_data[_api].cdnWS || '');\n};\n\nendp.setCdnUrl = function (url) {\n CDN_ROOT = url;\n};\n\nendp.getCdnRedirectUrl = function () {\n var redirect = _apis_data[_api].cdnRedirectURL;\n if (!redirect)\n return null;\n return _endpoint + redirect;\n};\n\nendp.setAcmSession = function (value) {\n _acmSession = value;\n};\n\nendp.getAcmSession = function () {\n return _acmSession;\n};\n\n/**\r\n * Returns a REST API request strings to be used to get the manifest of the provided urn.\r\n * Example: \"developer.api.autodesk.com/modelderivative/v2/designdata/:urn/manifest\"\r\n * @param {string | null} endpoint - When provided is used instead of the globally set endpoint.\r\n * @param {string} urn\r\n * @param {string} api - When provided is used instead of the globally set API flavor\r\n * @returns {string}\r\n */\nendp.getManifestApi = function (endpoint, urn, api) {\n var url = endpoint || _endpoint;\n api = api || _api;\n url += _apis_data[api].manifestURL;\n // If urn is not provided we return same string that before for backward compatibility.\n urn = urn || '';\n url = url.replace(':urn', urn);\n return url;\n};\n\n/**\r\n * Returns a REST API request strings to be used to get a derivative urn.\r\n * Example: \"developer.api.autodesk.com/modelderivative/v2/designdata/:urn/manifest/:derivativeUrn\"\r\n * @param {string | null} endpoint - When provided is used instead of the globally set API endpoint.\r\n * @param {string} derivativeUrn\r\n * @param {string} api - When provided is used instead of the globally set API flavor\r\n * @returns {string}\r\n */\nendp.getItemApi = function (endpoint, derivativeUrn, api) {\n var theApi = api || _api;\n var itemApi = (endpoint || _endpoint) + _apis_data[theApi].itemURL;\n // If urn is not provided we return same string that before for backward compatibility.\n derivativeUrn = derivativeUrn || '';\n var decodedUrn = decodeURIComponent(derivativeUrn);\n\n // Extract svf urn from item urn, needed when using model derivative.\n if (itemApi.indexOf(':urn') !== -1) {\n var parts = decodedUrn.split('/');\n var urn = parts[0] || '';\n urn = urn.split(':');\n urn = urn[urn.length - 1] || '';\n\n itemApi = itemApi.replace(':urn', urn);\n }\n\n if (theApi === endp.ENDPOINT_API_MODEL_DERIVATIVE_V2) {\n derivativeUrn = encodeURIComponent(decodedUrn);\n }\n\n itemApi = itemApi.replace(':derivativeurn', derivativeUrn);\n\n return itemApi;\n};\n\n/**\r\n * Returns a REST API request strings to be used to get the thumbnail for a specific urn.\r\n * Example: \"developer.api.autodesk.com/modelderivative/v2/designdata/:urn/thumbnail\"\r\n * @param {string | null} endpoint - When provided is used instead of the globally set endpoint.\r\n * @param {string} urn\r\n * @param {string} api - When provided is used instead of the globally set API flavor\r\n * @returns {string}\r\n */\nendp.getThumbnailApi = function (endpoint, urn, api) {\n var thumbnailApi = (endpoint || _endpoint) + _apis_data[api || _api].thumbnailsURL;\n return thumbnailApi.replace(':urn', urn || '');\n};\n\nendp.getPropertyQueryApi = function (endpoint, urn, api, guid) {\n let propertyQueryApi = (endpoint || _endpoint) + _apis_data[api || _api].propertyQueryURL;\n propertyQueryApi = propertyQueryApi.replace(':urn', urn || '');\n return propertyQueryApi.replace(':guid', guid || '');\n};\n\nendp.getUseCredentials = function () {\n return _useCredentials;\n};\n\nendp.getDomainParam = function () {\n console.warn(\"getDomainParam is deprecated, switch to getQueryParams instead.\");\n return this.getUseCredentials() && !(0,_compat__WEBPACK_IMPORTED_MODULE_0__.isNodeJS)() ? \"domain=\" + encodeURIComponent(_window.location.origin) : \"\";\n};\n\n/**\r\n * Adds a URL parameter that will be used in all data load requests.\r\n * @param {string} param - The name of the parameter\r\n * @param {string} value - The value of the parameter. It will be URI encoded when constructing the final URL.\r\n */\nendp.addQueryParam = function (param, value) {\n this.queryParams[param] = value;\n};\n\n/**\r\n * Deletes a previously specified URL parameter.\r\n * @param {string} param - The name of the parameter to delete\r\n */\nendp.deleteQueryParam = function (param) {\n delete this.queryParams[param];\n};\n\nendp.getQueryParams = function (inputObj) {\n\n let qParam = this.getUseCredentials() && !(0,_compat__WEBPACK_IMPORTED_MODULE_0__.isNodeJS)() ? \"domain=\" + encodeURIComponent(_window.location.origin) : \"\";\n\n let bypassDs = (0,_globals__WEBPACK_IMPORTED_MODULE_1__.getParameterByName)(\"bypassds\");\n if (bypassDs) {\n qParam = qParam ? qParam + \"&bypassds=1\" : \"bypassds=1\";\n }\n\n let addedParams = [];\n for (let p in this.queryParams) {\n addedParams.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(this.queryParams[p]));\n }\n\n if (addedParams.length) {\n if (qParam)\n qParam += \"&\" + addedParams.join(\"&\");else\n\n qParam = addedParams.join(\"&\");\n }\n\n if (qParam && inputObj) {\n if (inputObj.queryParams) {\n inputObj.queryParams += \"&\" + qParam;\n } else {\n inputObj.queryParams = qParam;\n }\n }\n\n return qParam;\n};\n\nendp.setUseCredentials = function (useCredentials) {\n _useCredentials = useCredentials;\n};\n\nendp.setUseCookie = function (useCookie) {\n _useCookie = useCookie;\n};\n\nendp.getUseCookie = function () {\n return _useCookie;\n};\n\nendp.isOtgBackend = function () {\n return this.getApiFlavor() === this.ENDPOINT_API_FLUENT;\n};\n\nendp.isSVF2Backend = function () {\n let api = this.getApiFlavor();\n return api.startsWith(this.ENDPOINT_API_D3S) || api.startsWith(this.ENDPOINT_API_DERIVATIVE_STREAMING);\n};\n\nendp.setEscapeOssObjects = function (escapeOssObjects) {\n _escapeOssObjects = escapeOssObjects;\n};\n\nendp.getEscapeOssObjects = function () {\n return _escapeOssObjects;\n};\n\nendp.initLoadContext = function (inputObj) {\n\n inputObj = inputObj || {};\n\n inputObj.auth = this.getUseCredentials();\n\n if (!inputObj.endpoint)\n inputObj.endpoint = this.getApiEndpoint();\n\n if (!inputObj.api)\n inputObj.api = this.getApiFlavor();\n\n if (!inputObj.headers)\n inputObj.headers = {};\n\n for (var p in this.HTTP_REQUEST_HEADERS) {\n inputObj.headers[p] = this.HTTP_REQUEST_HEADERS[p];\n }\n\n if (inputObj.api === this.ENDPOINT_API_FLUENT) {\n\n\n\n //Turned off because Nginx on fluent server is refusing to\n //return ranges from the proxy cache -- and it's not clear why.\n //inputObj.supportsRangeRequests = true;\n } //This is done to avoid CORS errors on content served from proxy or browser cache\n //The cache will respond with a previously received response, but the Access-Control-Allow-Origin\n //response header might not match the current Origin header (e.g. localhost vs. developer.api.autodesk.com)\n //which will cause a CORS error on the second request for the same resource.\n this.getQueryParams(inputObj);\n //shared geometry/material storage\n inputObj.otg_cdn = CDN_ROOT || this.getCdnUrl();\n inputObj.otg_ws = this.getCdnWebSocketEndpoint();\n\n inputObj.escapeOssObjects = this.getEscapeOssObjects();\n\n return inputObj;\n};\n\n//TODO: Globals that need a better place\nvar _env; //formerly avp.env\nfunction getEnv() {\n return _env;\n}\nfunction setEnv(env) {\n _env = env;\n if (env.startsWith('MD20')) {\n console.warn(`env=${env} is deprecated and will be removed in a future release. Use Autodesk{env}2 instead, where env=Development, Staging, or Production`);\n }\n}\n\n// Set viewer in offline mode if set to true. In offline mode, viewer would ignore all URNs in bubble JSON\n// and assume the viewables are laid out in local file system path relative to the bubble.json.\nvar _offline = false;\nfunction isOffline() {\n return _offline;\n}\nfunction setOffline(offline) {\n _offline = offline;\n}\n\n// Offline resource prefix specified by viewer consumer (e.g. IOS web view). Used as prefix to concatenate with\n// each resource relative path to form the absolute path of each resource.\nvar _offlineResourcePrefix = \"\";\nfunction setOfflineResourcePrefix(prefix) {\n _offlineResourcePrefix = prefix;\n}\nfunction getOfflineResourcePrefix() {\n return _offlineResourcePrefix;\n}\n\nlet endpoint = endp;\n\n//For backwards compatibility until all code is converted to use\n//the function from the endpoint instance.\nlet initLoadContext = endp.initLoadContext.bind(endp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUc7RUFDVixJQUFJQSxHQUFHLENBQUNwRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDeEJDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFFLE9BQU1rRSxHQUFJLG1JQUFrSSxDQUFDO0VBQy9KO0FBQ0o7O0FBRUE7QUFDQTtBQUNBLElBQUlDLFFBQVEsR0FBRyxLQUFLO0FBQ2IsU0FBU0MsU0FBU0EsQ0FBQSxFQUFHO0VBQ3hCLE9BQU9ELFFBQVE7QUFDbkI7QUFDTyxTQUFTRSxVQUFVQSxDQUFDQyxPQUFPLEVBQUU7RUFDaENILFFBQVEsR0FBR0csT0FBTztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0EsSUFBSUMsc0JBQXNCLEdBQUcsRUFBRTtBQUN4QixTQUFTQyx3QkFBd0JBLENBQUNDLE1BQU0sRUFBRTtFQUM3Q0Ysc0JBQXNCLEdBQUdFLE1BQU07QUFDbkM7QUFDTyxTQUFTQyx3QkFBd0JBLENBQUEsRUFBRztFQUN2QyxPQUFPSCxzQkFBc0I7QUFDakM7O0FBRU8sSUFBSTVFLFFBQVEsR0FBR3JDLElBQUk7O0FBRTFCO0FBQ0E7QUFDTyxJQUFJb0csZUFBZSxHQUFHcEcsSUFBSSxDQUFDb0csZUFBZSxDQUFDaUIsSUFBSSxDQUFDckgsSUFBSSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9uZXQvZW5kcG9pbnRzLmpzP2UxZWEiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IGlzTm9kZUpTLCBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vY29tcGF0XCI7XHJcbmltcG9ydCB7IGdldFBhcmFtZXRlckJ5TmFtZSB9IGZyb20gXCIuLi8uLi9nbG9iYWxzXCI7XHJcblxyXG5jb25zdCBfd2luZG93ID0gZ2V0R2xvYmFsKCk7XHJcblxyXG4gICAgdmFyIGVuZHAgPSB7fTtcclxuXHJcbiAgICB2YXIgQ0ROX1JPT1QgPSBudWxsO1xyXG4gICAgZW5kcC5FTkRQT0lOVF9BUElfREVSSVZBVElWRV9TRVJWSUNFX1YyID0gJ2Rlcml2YXRpdmVWMic7XHJcbiAgICBlbmRwLkVORFBPSU5UX0FQSV9NT0RFTF9ERVJJVkFUSVZFX1YyID0gJ21vZGVsRGVyaXZhdGl2ZVYyJzsgLy8gRm9yZ2VcclxuICAgIGVuZHAuRU5EUE9JTlRfQVBJX0ZMVUVOVCA9ICdmbHVlbnQnO1xyXG4gICAgZW5kcC5FTkRQT0lOVF9BUElfRDNTID0gJ0QzUyc7XHJcbiAgICBlbmRwLkVORFBPSU5UX0FQSV9ERVJJVkFUSVZFX1NUUkVBTUlORyA9ICdzdHJlYW1pbmdWMic7IC8vIFNWRjJcclxuXHJcbiAgICB2YXIgX2FwaXNfZGF0YSA9IHtcclxuICAgICAgICBkZXJpdmF0aXZlVjI6ICB7XHJcbiAgICAgICAgICAgIGJhc2VVUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjInLFxyXG4gICAgICAgICAgICBpdGVtVVJMOiAnL2Rlcml2YXRpdmVzZXJ2aWNlL3YyL2Rlcml2YXRpdmVzLzpkZXJpdmF0aXZldXJuJyxcclxuICAgICAgICAgICAgbWFuaWZlc3RVUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjIvbWFuaWZlc3QvOnVybicsXHJcbiAgICAgICAgICAgIHRodW1ibmFpbHNVUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjIvdGh1bWJuYWlscy86dXJuJyxcclxuICAgICAgICAgICAgcHJvcGVydHlRdWVyeVVSTDogJy9tb2RlbGRlcml2YXRpdmUvdjIvZGVzaWduZGF0YS86dXJuL21ldGFkYXRhLzpndWlkL3Byb3BlcnRpZXM6cXVlcnknXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZXJpdmF0aXZlVjJfRVU6ICB7XHJcbiAgICAgICAgICAgIGJhc2VVUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjIvcmVnaW9ucy9ldScsXHJcbiAgICAgICAgICAgIGl0ZW1VUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjIvcmVnaW9ucy9ldS9kZXJpdmF0aXZlcy86ZGVyaXZhdGl2ZXVybicsXHJcbiAgICAgICAgICAgIG1hbmlmZXN0VVJMOiAnL2Rlcml2YXRpdmVzZXJ2aWNlL3YyL3JlZ2lvbnMvZXUvbWFuaWZlc3QvOnVybicsXHJcbiAgICAgICAgICAgIHRodW1ibmFpbHNVUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjIvcmVnaW9ucy9ldS90aHVtYm5haWxzLzp1cm4nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZXJpdmF0aXZlVjJfQVBBQzogIHtcclxuICAgICAgICAgICAgYmFzZVVSTDogJy9kZXJpdmF0aXZlc2VydmljZS92MicsXHJcbiAgICAgICAgICAgIGl0ZW1VUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjIvZGVyaXZhdGl2ZXMvOmRlcml2YXRpdmV1cm4nLFxyXG4gICAgICAgICAgICBtYW5pZmVzdFVSTDogJy9kZXJpdmF0aXZlc2VydmljZS92Mi9tYW5pZmVzdC86dXJuJyxcclxuICAgICAgICAgICAgdGh1bWJuYWlsc1VSTDogJy9kZXJpdmF0aXZlc2VydmljZS92Mi90aHVtYm5haWxzLzp1cm4nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZXJpdmF0aXZlVjJfRmVkcmFtcDogIHtcclxuICAgICAgICAgICAgYmFzZVVSTDogJy9kZXJpdmF0aXZlc2VydmljZS92MicsXHJcbiAgICAgICAgICAgIGl0ZW1VUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjIvZGVyaXZhdGl2ZXMvOmRlcml2YXRpdmV1cm4nLFxyXG4gICAgICAgICAgICBtYW5pZmVzdFVSTDogJy9kZXJpdmF0aXZlc2VydmljZS92Mi9tYW5pZmVzdC86dXJuJyxcclxuICAgICAgICAgICAgdGh1bWJuYWlsc1VSTDogJy9kZXJpdmF0aXZlc2VydmljZS92Mi90aHVtYm5haWxzLzp1cm4nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb2RlbERlcml2YXRpdmVWMjoge1xyXG4gICAgICAgICAgICBiYXNlVVJMOiAnL21vZGVsZGVyaXZhdGl2ZS92Mi8nLFxyXG4gICAgICAgICAgICBpdGVtVVJMOiAnL21vZGVsZGVyaXZhdGl2ZS92Mi9kZXNpZ25kYXRhLzp1cm4vbWFuaWZlc3QvOmRlcml2YXRpdmV1cm4nLFxyXG4gICAgICAgICAgICBtYW5pZmVzdFVSTDogJy9tb2RlbGRlcml2YXRpdmUvdjIvZGVzaWduZGF0YS86dXJuL21hbmlmZXN0JyxcclxuICAgICAgICAgICAgdGh1bWJuYWlsc1VSTDogJy9tb2RlbGRlcml2YXRpdmUvdjIvZGVzaWduZGF0YS86dXJuL3RodW1ibmFpbCcsXHJcbiAgICAgICAgICAgIHByb3BlcnR5UXVlcnlVUkw6ICcvbW9kZWxkZXJpdmF0aXZlL3YyL2Rlc2lnbmRhdGEvOnVybi9tZXRhZGF0YS86Z3VpZC9wcm9wZXJ0aWVzOnF1ZXJ5J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmx1ZW50OiB7XHJcbiAgICAgICAgICAgIGJhc2VVUkw6ICcvbW9kZWxkYXRhJyxcclxuICAgICAgICAgICAgaXRlbVVSTDogJy9tb2RlbGRhdGEvZmlsZS86ZGVyaXZhdGl2ZXVybicsXHJcbiAgICAgICAgICAgIG1hbmlmZXN0VVJMOiAnL21vZGVsZGF0YS9tYW5pZmVzdC86dXJuJyxcclxuICAgICAgICAgICAgdGh1bWJuYWlsc1VSTDogJy9kZXJpdmF0aXZlc2VydmljZS92Mi90aHVtYm5haWxzLzp1cm4nLFxyXG4gICAgICAgICAgICBjZG5VUkw6ICcvY2RuJyxcclxuICAgICAgICAgICAgY2RuV1M6ICcvY2Rud3MnLFxyXG4gICAgICAgICAgICAvL2NkblJlZGlyZWN0VVJMOiAnL2NkbnVybCcsIC8vVGhlcmUgaXMgbm8gc2VwYXJhdGUgQ0ROIGVuZHBvaW50IGN1cnJlbnRseVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgRDNTOiB7XHJcbiAgICAgICAgICAgIGJhc2VVUkw6ICcvbW9kZWxkYXRhJyxcclxuICAgICAgICAgICAgaXRlbVVSTDogJy9tb2RlbGRhdGEvZmlsZS86ZGVyaXZhdGl2ZXVybicsXHJcbiAgICAgICAgICAgIG1hbmlmZXN0VVJMOiAnL21vZGVsZGF0YS9tYW5pZmVzdC86dXJuJyxcclxuICAgICAgICAgICAgdGh1bWJuYWlsc1VSTDogJy9kZXJpdmF0aXZlc2VydmljZS92Mi90aHVtYm5haWxzLzp1cm4nLFxyXG4gICAgICAgICAgICBjZG5VUkw6ICcvY2RuJyxcclxuICAgICAgICAgICAgY2RuV1M6ICcvY2Rud3MnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBEM1NfRVU6IHtcclxuICAgICAgICAgICAgYmFzZVVSTDogJy9tb2RlbGRhdGEnLFxyXG4gICAgICAgICAgICBpdGVtVVJMOiAnL21vZGVsZGF0YS9maWxlLzpkZXJpdmF0aXZldXJuJyxcclxuICAgICAgICAgICAgbWFuaWZlc3RVUkw6ICcvbW9kZWxkYXRhL21hbmlmZXN0Lzp1cm4nLFxyXG4gICAgICAgICAgICB0aHVtYm5haWxzVVJMOiAnL2Rlcml2YXRpdmVzZXJ2aWNlL3YyL3JlZ2lvbnMvZXUvdGh1bWJuYWlscy86dXJuJyxcclxuICAgICAgICAgICAgY2RuVVJMOiAnL2NkbicsXHJcbiAgICAgICAgICAgIGNkbldTOiAnL2NkbndzJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgRDNTX0FQQUM6IHtcclxuICAgICAgICAgICAgYmFzZVVSTDogJy9tb2RlbGRhdGEnLFxyXG4gICAgICAgICAgICBpdGVtVVJMOiAnL21vZGVsZGF0YS9maWxlLzpkZXJpdmF0aXZldXJuJyxcclxuICAgICAgICAgICAgbWFuaWZlc3RVUkw6ICcvbW9kZWxkYXRhL21hbmlmZXN0Lzp1cm4nLFxyXG4gICAgICAgICAgICB0aHVtYm5haWxzVVJMOiAnL2Rlcml2YXRpdmVzZXJ2aWNlL3YyL3JlZ2lvbnMvQVBBQy90aHVtYm5haWxzLzp1cm4nLFxyXG4gICAgICAgICAgICBjZG5VUkw6ICcvY2RuJyxcclxuICAgICAgICAgICAgY2RuV1M6ICcvY2Rud3MnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHJlYW1pbmdWMjoge1xyXG4gICAgICAgICAgICAvKiogU1ZGMiAqL1xyXG4gICAgICAgICAgICBiYXNlVVJMOiAnL21vZGVsZGF0YScsXHJcbiAgICAgICAgICAgIGl0ZW1VUkw6ICcvbW9kZWxkYXRhL2ZpbGUvOmRlcml2YXRpdmV1cm4nLFxyXG4gICAgICAgICAgICBtYW5pZmVzdFVSTDogJy9tb2RlbGRhdGEvbWFuaWZlc3QvOnVybicsXHJcbiAgICAgICAgICAgIHRodW1ibmFpbHNVUkw6ICcvZGVyaXZhdGl2ZXNlcnZpY2UvdjIvdGh1bWJuYWlscy86dXJuJyxcclxuICAgICAgICAgICAgY2RuVVJMOiAnL2NkbicsXHJcbiAgICAgICAgICAgIGNkbldTOiAnL2NkbndzJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RyZWFtaW5nVjJfRVU6IHtcclxuICAgICAgICAgICAgLyoqIFNWRjIgKi9cclxuICAgICAgICAgICAgYmFzZVVSTDogJy9yZWdpb25zL2V1L21vZGVsZGF0YScsXHJcbiAgICAgICAgICAgIGl0ZW1VUkw6ICcvcmVnaW9ucy9ldS9tb2RlbGRhdGEvZmlsZS86ZGVyaXZhdGl2ZXVybicsXHJcbiAgICAgICAgICAgIG1hbmlmZXN0VVJMOiAnL3JlZ2lvbnMvZXUvbW9kZWxkYXRhL21hbmlmZXN0Lzp1cm4nLFxyXG4gICAgICAgICAgICB0aHVtYm5haWxzVVJMOiAnL2Rlcml2YXRpdmVzZXJ2aWNlL3YyL3JlZ2lvbnMvZXUvdGh1bWJuYWlscy86dXJuJyxcclxuICAgICAgICAgICAgY2RuVVJMOiAnL3JlZ2lvbnMvZXUvY2RuJyxcclxuICAgICAgICAgICAgY2RuV1M6ICcvcmVnaW9ucy9ldS9jZG53cydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0cmVhbWluZ1YyX0FQQUM6IHtcclxuICAgICAgICAgICAgLyoqIFNWRjIgKi9cclxuICAgICAgICAgICAgYmFzZVVSTDogJy9tb2RlbGRhdGEnLFxyXG4gICAgICAgICAgICBpdGVtVVJMOiAnL21vZGVsZGF0YS9maWxlLzpkZXJpdmF0aXZldXJuJyxcclxuICAgICAgICAgICAgbWFuaWZlc3RVUkw6ICcvbW9kZWxkYXRhL21hbmlmZXN0Lzp1cm4nLFxyXG4gICAgICAgICAgICB0aHVtYm5haWxzVVJMOiAnL2Rlcml2YXRpdmVzZXJ2aWNlL3YyL3RodW1ibmFpbHMvOnVybicsXHJcbiAgICAgICAgICAgIGNkblVSTDogJy9jZG4nLFxyXG4gICAgICAgICAgICBjZG5XUzogJy9jZG53cydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0cmVhbWluZ1YyX0ZlZHJhbXA6IHtcclxuICAgICAgICAgICAgLyoqIFNWRjIgKi9cclxuICAgICAgICAgICAgYmFzZVVSTDogJy9tb2RlbGRhdGEnLFxyXG4gICAgICAgICAgICBpdGVtVVJMOiAnL21vZGVsZGF0YS9maWxlLzpkZXJpdmF0aXZldXJuJyxcclxuICAgICAgICAgICAgbWFuaWZlc3RVUkw6ICcvbW9kZWxkYXRhL21hbmlmZXN0Lzp1cm4nLFxyXG4gICAgICAgICAgICB0aHVtYm5haWxzVVJMOiAnL2Rlcml2YXRpdmVzZXJ2aWNlL3YyL3RodW1ibmFpbHMvOnVybicsXHJcbiAgICAgICAgICAgIGNkblVSTDogJy9jZG4nLFxyXG4gICAgICAgICAgICBjZG5XUzogJy9jZG53cydcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBfZW5kcG9pbnQgPSAnJztcclxuICAgIHZhciBfYXBpID0gZW5kcC5FTkRQT0lOVF9BUElfREVSSVZBVElWRV9TRVJWSUNFX1YyO1xyXG4gICAgdmFyIF91c2VDcmVkZW50aWFscyA9IGZhbHNlO1xyXG4gICAgdmFyIF91c2VDb29raWUgPSBmYWxzZTtcclxuICAgIHZhciBfYWNtU2Vzc2lvbiA9ICcnO1xyXG4gICAgdmFyIF9lc2NhcGVPc3NPYmplY3RzID0gZmFsc2U7XHJcblxyXG4gICAgZW5kcC5IVFRQX1JFUVVFU1RfSEVBREVSUyA9IHt9O1xyXG4gICAgZW5kcC5xdWVyeVBhcmFtcyA9IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZW5kcG9pbnQgYW5kIGFwaSB0byBiZSB1c2VkIHRvIGNyZWF0ZSBSRVNUIEFQSSByZXF1ZXN0IHN0cmluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZW5kcG9pbnRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXBpXSAtIFBvc3NpYmxlIHZhbHVlcyBhcmUgZGVyaXZhdGl2ZVYyLCBtb2RlbERlcml2YXRpdmVWMlxyXG4gICAgICovXHJcbiAgICBlbmRwLnNldEVuZHBvaW50QW5kQXBpID0gZnVuY3Rpb24oZW5kcG9pbnQsIGFwaSkge1xyXG4gICAgICAgIGlmIChlbmRwb2ludCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgX2VuZHBvaW50ID0gZW5kcG9pbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcGkpIHtcclxuICAgICAgICAgICAgX2FwaSA9IGFwaTtcclxuICAgICAgICAgICAgaWYgKGFwaS5zdGFydHNXaXRoKCdEM1MnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBhcGk9JHthcGl9IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiBVc2Ugc3RyZWFtaW5nVjIgb3Igc3RyZWFtaW5nVjJfRVUgKGV1cm9wZSByZWdpb24pIGluc3RlYWRgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBlbmRwb2ludCBwbHVzIHRoZSBhcGkgdXNlZCB0byBjcmVhdGUgUkVTVCBBUEkgcmVxdWVzdCBzdHJpbmdzLlxyXG4gICAgICogRXhhbXBsZTogXCJkZXZlbG9wZXIuYXBpLmF1dG9kZXNrLmNvbS9tb2RlbGRlcml2YXRpdmUvdjJcIlxyXG4gICAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZW5kcC5nZXRFbmRwb2ludEFuZEFwaSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfZW5kcG9pbnQgKyBfYXBpc19kYXRhW19hcGldLmJhc2VVUkw7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZW5kcG9pbnQgdXNlZCB0byBjcmVhdGUgUkVTVCBBUEkgcmVxdWVzdCBzdHJpbmdzLlxyXG4gICAgICogRXhhbXBsZXM6IFwiZGV2ZWxvcGVyLmFwaS5hdXRvZGVzay5jb21cIlxyXG4gICAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZW5kcC5nZXRBcGlFbmRwb2ludCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfZW5kcG9pbnQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGVuZHAuZ2V0QXBpRmxhdm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9hcGk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBzaGFyZWQgcmVzb3VyY2UgQ0ROIGxvY2F0aW9uLlxyXG4gICAgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UgKGFuZCB0byBub3Qgb3ZlcmxvYWQgb3VyIHNlcnZlcnMpLCB0aGlzIHNob3VsZFxyXG4gICAgICogYmUgcmVwbGFjZWQgYnkgYSBkaXJlY3QgQ2xvdWRGcm9udCB1cmwgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBieVxyXG4gICAgICogY2FsbGluZyB0aGUgY2RuUmVkaXJlY3RVcmwgYW5kIGxvb2tpbmcgYXQgdGhlIHJlc3VsdC5cclxuICAgICAqL1xyXG4gICAgZW5kcC5nZXRDZG5VcmwgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gQ0ROX1JPT1QgfHwgKF9lbmRwb2ludCA/IF9lbmRwb2ludCArIF9hcGlzX2RhdGFbX2FwaV0uY2RuVVJMIDogdW5kZWZpbmVkKTtcclxuICAgIH07XHJcblxyXG4gICAgZW5kcC5nZXRDZG5XZWJTb2NrZXRFbmRwb2ludCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfZW5kcG9pbnQgKyAoX2FwaXNfZGF0YVtfYXBpXS5jZG5XUyB8fCAnJyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGVuZHAuc2V0Q2RuVXJsID0gZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgQ0ROX1JPT1QgPSB1cmw7XHJcbiAgICB9O1xyXG5cclxuICAgIGVuZHAuZ2V0Q2RuUmVkaXJlY3RVcmwgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcmVkaXJlY3QgPSBfYXBpc19kYXRhW19hcGldLmNkblJlZGlyZWN0VVJMO1xyXG4gICAgICAgIGlmICghcmVkaXJlY3QpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBfZW5kcG9pbnQgKyByZWRpcmVjdDtcclxuICAgIH07XHJcblxyXG4gICAgZW5kcC5zZXRBY21TZXNzaW9uID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBfYWNtU2Vzc2lvbiA9IHZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBlbmRwLmdldEFjbVNlc3Npb24gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gX2FjbVNlc3Npb247XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIFJFU1QgQVBJIHJlcXVlc3Qgc3RyaW5ncyB0byBiZSB1c2VkIHRvIGdldCB0aGUgbWFuaWZlc3Qgb2YgdGhlIHByb3ZpZGVkIHVybi5cclxuICAgICAqIEV4YW1wbGU6IFwiZGV2ZWxvcGVyLmFwaS5hdXRvZGVzay5jb20vbW9kZWxkZXJpdmF0aXZlL3YyL2Rlc2lnbmRhdGEvOnVybi9tYW5pZmVzdFwiXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGVuZHBvaW50IC0gV2hlbiBwcm92aWRlZCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGdsb2JhbGx5IHNldCBlbmRwb2ludC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cm5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBXaGVuIHByb3ZpZGVkIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsbHkgc2V0IEFQSSBmbGF2b3JcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGVuZHAuZ2V0TWFuaWZlc3RBcGkgPSBmdW5jdGlvbihlbmRwb2ludCwgdXJuLCBhcGkpIHtcclxuICAgICAgICB2YXIgdXJsID0gKGVuZHBvaW50IHx8IF9lbmRwb2ludCk7XHJcbiAgICAgICAgYXBpID0gYXBpIHx8IF9hcGk7XHJcbiAgICAgICAgdXJsICs9IF9hcGlzX2RhdGFbYXBpXS5tYW5pZmVzdFVSTDtcclxuICAgICAgICAvLyBJZiB1cm4gaXMgbm90IHByb3ZpZGVkIHdlIHJldHVybiBzYW1lIHN0cmluZyB0aGF0IGJlZm9yZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cclxuICAgICAgICB1cm4gPSB1cm4gfHwgJyc7XHJcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJzp1cm4nLCB1cm4pO1xyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIFJFU1QgQVBJIHJlcXVlc3Qgc3RyaW5ncyB0byBiZSB1c2VkIHRvIGdldCBhIGRlcml2YXRpdmUgdXJuLlxyXG4gICAgICogRXhhbXBsZTogXCJkZXZlbG9wZXIuYXBpLmF1dG9kZXNrLmNvbS9tb2RlbGRlcml2YXRpdmUvdjIvZGVzaWduZGF0YS86dXJuL21hbmlmZXN0LzpkZXJpdmF0aXZlVXJuXCJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gZW5kcG9pbnQgLSBXaGVuIHByb3ZpZGVkIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsbHkgc2V0IEFQSSBlbmRwb2ludC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXJpdmF0aXZlVXJuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpIC0gV2hlbiBwcm92aWRlZCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGdsb2JhbGx5IHNldCBBUEkgZmxhdm9yXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBlbmRwLmdldEl0ZW1BcGkgPSBmdW5jdGlvbihlbmRwb2ludCwgZGVyaXZhdGl2ZVVybiwgYXBpKSB7XHJcbiAgICAgICAgdmFyIHRoZUFwaSA9IGFwaSB8fCBfYXBpO1xyXG4gICAgICAgIHZhciBpdGVtQXBpID0gKGVuZHBvaW50IHx8IF9lbmRwb2ludCkgKyBfYXBpc19kYXRhW3RoZUFwaV0uaXRlbVVSTDtcclxuICAgICAgICAvLyBJZiB1cm4gaXMgbm90IHByb3ZpZGVkIHdlIHJldHVybiBzYW1lIHN0cmluZyB0aGF0IGJlZm9yZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cclxuICAgICAgICBkZXJpdmF0aXZlVXJuID0gZGVyaXZhdGl2ZVVybiB8fCAnJztcclxuICAgICAgICB2YXIgZGVjb2RlZFVybiA9IGRlY29kZVVSSUNvbXBvbmVudChkZXJpdmF0aXZlVXJuKTtcclxuXHJcbiAgICAgICAgLy8gRXh0cmFjdCBzdmYgdXJuIGZyb20gaXRlbSB1cm4sIG5lZWRlZCB3aGVuIHVzaW5nIG1vZGVsIGRlcml2YXRpdmUuXHJcbiAgICAgICAgaWYgKGl0ZW1BcGkuaW5kZXhPZignOnVybicpICE9PSAtMSkge1xyXG4gICAgICAgICAgICB2YXIgcGFydHMgPSBkZWNvZGVkVXJuLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIHZhciB1cm4gPSBwYXJ0c1swXSB8fCAnJztcclxuICAgICAgICAgICAgdXJuID0gdXJuLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIHVybiA9IHVyblt1cm4ubGVuZ3RoLTFdIHx8ICcnO1xyXG5cclxuICAgICAgICAgICAgaXRlbUFwaSA9IGl0ZW1BcGkucmVwbGFjZSgnOnVybicsIHVybik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhlQXBpID09PSBlbmRwLkVORFBPSU5UX0FQSV9NT0RFTF9ERVJJVkFUSVZFX1YyKSB7XHRcclxuICAgICAgICAgICAgZGVyaXZhdGl2ZVVybiA9IGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVkVXJuKTtcdFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpdGVtQXBpID0gaXRlbUFwaS5yZXBsYWNlKCc6ZGVyaXZhdGl2ZXVybicsIGRlcml2YXRpdmVVcm4pO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbUFwaTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgUkVTVCBBUEkgcmVxdWVzdCBzdHJpbmdzIHRvIGJlIHVzZWQgdG8gZ2V0IHRoZSB0aHVtYm5haWwgZm9yIGEgc3BlY2lmaWMgdXJuLlxyXG4gICAgICogRXhhbXBsZTogXCJkZXZlbG9wZXIuYXBpLmF1dG9kZXNrLmNvbS9tb2RlbGRlcml2YXRpdmUvdjIvZGVzaWduZGF0YS86dXJuL3RodW1ibmFpbFwiXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGVuZHBvaW50IC0gV2hlbiBwcm92aWRlZCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGdsb2JhbGx5IHNldCBlbmRwb2ludC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cm5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBXaGVuIHByb3ZpZGVkIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsbHkgc2V0IEFQSSBmbGF2b3JcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGVuZHAuZ2V0VGh1bWJuYWlsQXBpID0gZnVuY3Rpb24oZW5kcG9pbnQsIHVybiwgYXBpKSB7XHJcbiAgICAgICAgdmFyIHRodW1ibmFpbEFwaSA9IChlbmRwb2ludCB8fCBfZW5kcG9pbnQpICsgX2FwaXNfZGF0YVthcGkgfHwgX2FwaV0udGh1bWJuYWlsc1VSTDtcclxuICAgICAgICByZXR1cm4gdGh1bWJuYWlsQXBpLnJlcGxhY2UoJzp1cm4nLCB1cm4gfHwgJycpO1xyXG4gICAgfTtcclxuXHJcbiAgICBlbmRwLmdldFByb3BlcnR5UXVlcnlBcGkgPSBmdW5jdGlvbihlbmRwb2ludCwgdXJuLCBhcGksIGd1aWQpIHtcclxuICAgICAgICBsZXQgcHJvcGVydHlRdWVyeUFwaSA9IChlbmRwb2ludCB8fCBfZW5kcG9pbnQpICsgX2FwaXNfZGF0YVthcGkgfHwgX2FwaV0ucHJvcGVydHlRdWVyeVVSTDtcclxuICAgICAgICBwcm9wZXJ0eVF1ZXJ5QXBpID0gcHJvcGVydHlRdWVyeUFwaS5yZXBsYWNlKCc6dXJuJywgdXJuIHx8ICcnKTtcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlRdWVyeUFwaS5yZXBsYWNlKCc6Z3VpZCcsIGd1aWQgfHwgJycpO1xyXG4gICAgfTtcclxuXHJcbiAgICBlbmRwLmdldFVzZUNyZWRlbnRpYWxzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF91c2VDcmVkZW50aWFscztcclxuICAgIH07XHJcblxyXG4gICAgZW5kcC5nZXREb21haW5QYXJhbSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcImdldERvbWFpblBhcmFtIGlzIGRlcHJlY2F0ZWQsIHN3aXRjaCB0byBnZXRRdWVyeVBhcmFtcyBpbnN0ZWFkLlwiKTtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZ2V0VXNlQ3JlZGVudGlhbHMoKSAmJiAhaXNOb2RlSlMoKSkgPyAoXCJkb21haW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQoX3dpbmRvdy5sb2NhdGlvbi5vcmlnaW4pKSA6IFwiXCI7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIFVSTCBwYXJhbWV0ZXIgdGhhdCB3aWxsIGJlIHVzZWQgaW4gYWxsIGRhdGEgbG9hZCByZXF1ZXN0cy5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbSAtIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLiBJdCB3aWxsIGJlIFVSSSBlbmNvZGVkIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBVUkwuXHJcbiAgICAgKi9cclxuICAgIGVuZHAuYWRkUXVlcnlQYXJhbSA9IGZ1bmN0aW9uKHBhcmFtLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNbcGFyYW1dID0gdmFsdWU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVsZXRlcyBhIHByZXZpb3VzbHkgc3BlY2lmaWVkIFVSTCBwYXJhbWV0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0gLSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIHRvIGRlbGV0ZVxyXG4gICAgICovXHJcbiAgICBlbmRwLmRlbGV0ZVF1ZXJ5UGFyYW0gPSBmdW5jdGlvbihwYXJhbSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnF1ZXJ5UGFyYW1zW3BhcmFtXTtcclxuICAgIH07XHJcblxyXG4gICAgZW5kcC5nZXRRdWVyeVBhcmFtcyA9IGZ1bmN0aW9uKGlucHV0T2JqKSB7XHJcblxyXG4gICAgICAgIGxldCBxUGFyYW0gPSAodGhpcy5nZXRVc2VDcmVkZW50aWFscygpICYmICFpc05vZGVKUygpKSA/IChcImRvbWFpbj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChfd2luZG93LmxvY2F0aW9uLm9yaWdpbikpIDogXCJcIjtcclxuXHJcbiAgICAgICAgbGV0IGJ5cGFzc0RzID0gIGdldFBhcmFtZXRlckJ5TmFtZShcImJ5cGFzc2RzXCIpO1xyXG4gICAgICAgIGlmIChieXBhc3NEcykge1xyXG4gICAgICAgICAgICBxUGFyYW0gPSBxUGFyYW0gPyBxUGFyYW0gKyBcIiZieXBhc3Nkcz0xXCIgOiBcImJ5cGFzc2RzPTFcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhZGRlZFBhcmFtcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHAgaW4gdGhpcy5xdWVyeVBhcmFtcykge1xyXG4gICAgICAgICAgICBhZGRlZFBhcmFtcy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChwKSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMucXVlcnlQYXJhbXNbcF0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhZGRlZFBhcmFtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKHFQYXJhbSlcclxuICAgICAgICAgICAgICAgIHFQYXJhbSArPSBcIiZcIiArIGFkZGVkUGFyYW1zLmpvaW4oXCImXCIpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBxUGFyYW0gPSBhZGRlZFBhcmFtcy5qb2luKFwiJlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChxUGFyYW0gJiYgaW5wdXRPYmopIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0T2JqLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dE9iai5xdWVyeVBhcmFtcyArPSBcIiZcIiArIHFQYXJhbTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlucHV0T2JqLnF1ZXJ5UGFyYW1zID0gcVBhcmFtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcVBhcmFtO1xyXG4gICAgfTtcclxuXHJcbiAgICBlbmRwLnNldFVzZUNyZWRlbnRpYWxzID0gZnVuY3Rpb24odXNlQ3JlZGVudGlhbHMpIHtcclxuICAgICAgICBfdXNlQ3JlZGVudGlhbHMgPSB1c2VDcmVkZW50aWFscztcclxuICAgIH07XHJcblxyXG4gICAgZW5kcC5zZXRVc2VDb29raWUgPSBmdW5jdGlvbih1c2VDb29raWUpIHtcclxuICAgICAgICBfdXNlQ29va2llID0gdXNlQ29va2llO1xyXG4gICAgfTtcclxuXHJcbiAgICBlbmRwLmdldFVzZUNvb2tpZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfdXNlQ29va2llO1xyXG4gICAgfTtcclxuXHJcbiAgICBlbmRwLmlzT3RnQmFja2VuZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwaUZsYXZvcigpID09PSB0aGlzLkVORFBPSU5UX0FQSV9GTFVFTlQ7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBlbmRwLmlzU1ZGMkJhY2tlbmQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBsZXQgYXBpID0gdGhpcy5nZXRBcGlGbGF2b3IoKTtcclxuICAgICAgICByZXR1cm4gYXBpLnN0YXJ0c1dpdGgodGhpcy5FTkRQT0lOVF9BUElfRDNTKSB8fCBhcGkuc3RhcnRzV2l0aCh0aGlzLkVORFBPSU5UX0FQSV9ERVJJVkFUSVZFX1NUUkVBTUlORyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGVuZHAuc2V0RXNjYXBlT3NzT2JqZWN0cyA9IGZ1bmN0aW9uKGVzY2FwZU9zc09iamVjdHMpIHtcclxuICAgICAgICBfZXNjYXBlT3NzT2JqZWN0cyA9IGVzY2FwZU9zc09iamVjdHM7XHJcbiAgICB9O1xyXG5cclxuICAgIGVuZHAuZ2V0RXNjYXBlT3NzT2JqZWN0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfZXNjYXBlT3NzT2JqZWN0cztcclxuICAgIH07XHJcblxyXG4gICAgZW5kcC5pbml0TG9hZENvbnRleHQgPSBmdW5jdGlvbihpbnB1dE9iaikge1xyXG5cclxuICAgICAgICBpbnB1dE9iaiA9IGlucHV0T2JqIHx8IHt9O1xyXG5cclxuICAgICAgICBpbnB1dE9iai5hdXRoID0gdGhpcy5nZXRVc2VDcmVkZW50aWFscygpO1xyXG5cclxuICAgICAgICBpZiAoIWlucHV0T2JqLmVuZHBvaW50KVxyXG4gICAgICAgICAgICBpbnB1dE9iai5lbmRwb2ludCA9ICB0aGlzLmdldEFwaUVuZHBvaW50KCk7XHJcblxyXG4gICAgICAgIGlmICghaW5wdXRPYmouYXBpKVxyXG4gICAgICAgICAgICBpbnB1dE9iai5hcGkgPSB0aGlzLmdldEFwaUZsYXZvcigpO1xyXG5cclxuICAgICAgICBpZiAoIWlucHV0T2JqLmhlYWRlcnMpXHJcbiAgICAgICAgICAgIGlucHV0T2JqLmhlYWRlcnMgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiB0aGlzLkhUVFBfUkVRVUVTVF9IRUFERVJTKSB7XHJcbiAgICAgICAgICAgIGlucHV0T2JqLmhlYWRlcnNbcF0gPSB0aGlzLkhUVFBfUkVRVUVTVF9IRUFERVJTW3BdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlucHV0T2JqLmFwaSA9PT0gdGhpcy5FTkRQT0lOVF9BUElfRkxVRU5UKSB7XHJcbiAgICAgICAgICAgIC8vVHVybmVkIG9mZiBiZWNhdXNlIE5naW54IG9uIGZsdWVudCBzZXJ2ZXIgaXMgcmVmdXNpbmcgdG9cclxuICAgICAgICAgICAgLy9yZXR1cm4gcmFuZ2VzIGZyb20gdGhlIHByb3h5IGNhY2hlIC0tIGFuZCBpdCdzIG5vdCBjbGVhciB3aHkuXHJcbiAgICAgICAgICAgIC8vaW5wdXRPYmouc3VwcG9ydHNSYW5nZVJlcXVlc3RzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vVGhpcyBpcyBkb25lIHRvIGF2b2lkIENPUlMgZXJyb3JzIG9uIGNvbnRlbnQgc2VydmVkIGZyb20gcHJveHkgb3IgYnJvd3NlciBjYWNoZVxyXG4gICAgICAgIC8vVGhlIGNhY2hlIHdpbGwgcmVzcG9uZCB3aXRoIGEgcHJldmlvdXNseSByZWNlaXZlZCByZXNwb25zZSwgYnV0IHRoZSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cclxuICAgICAgICAvL3Jlc3BvbnNlIGhlYWRlciBtaWdodCBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgT3JpZ2luIGhlYWRlciAoZS5nLiBsb2NhbGhvc3QgdnMuIGRldmVsb3Blci5hcGkuYXV0b2Rlc2suY29tKVxyXG4gICAgICAgIC8vd2hpY2ggd2lsbCBjYXVzZSBhIENPUlMgZXJyb3Igb24gdGhlIHNlY29uZCByZXF1ZXN0IGZvciB0aGUgc2FtZSByZXNvdXJjZS5cclxuICAgICAgICB0aGlzLmdldFF1ZXJ5UGFyYW1zKGlucHV0T2JqKTtcclxuXHJcbiAgICAgICAgLy9zaGFyZWQgZ2VvbWV0cnkvbWF0ZXJpYWwgc3RvcmFnZVxyXG4gICAgICAgIGlucHV0T2JqLm90Z19jZG4gPSBDRE5fUk9PVCB8fCB0aGlzLmdldENkblVybCgpO1xyXG4gICAgICAgIGlucHV0T2JqLm90Z193cyA9IHRoaXMuZ2V0Q2RuV2ViU29ja2V0RW5kcG9pbnQoKTtcclxuXHJcbiAgICAgICAgaW5wdXRPYmouZXNjYXBlT3NzT2JqZWN0cyA9IHRoaXMuZ2V0RXNjYXBlT3NzT2JqZWN0cygpO1xyXG5cclxuICAgICAgICByZXR1cm4gaW5wdXRPYmo7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vVE9ETzogR2xvYmFscyB0aGF0IG5lZWQgYSBiZXR0ZXIgcGxhY2VcclxuICAgIHZhciBfZW52OyAvL2Zvcm1lcmx5IGF2cC5lbnZcclxuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9lbnY7XHJcbiAgICB9XHJcbiAgICBleHBvcnQgZnVuY3Rpb24gc2V0RW52KGVudikge1xyXG4gICAgICAgIF9lbnYgPSBlbnY7XHJcbiAgICAgICAgaWYgKGVudi5zdGFydHNXaXRoKCdNRDIwJykpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBlbnY9JHtlbnZ9IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiBVc2UgQXV0b2Rlc2t7ZW52fTIgaW5zdGVhZCwgd2hlcmUgZW52PURldmVsb3BtZW50LCBTdGFnaW5nLCBvciBQcm9kdWN0aW9uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCB2aWV3ZXIgaW4gb2ZmbGluZSBtb2RlIGlmIHNldCB0byB0cnVlLiBJbiBvZmZsaW5lIG1vZGUsIHZpZXdlciB3b3VsZCBpZ25vcmUgYWxsIFVSTnMgaW4gYnViYmxlIEpTT05cclxuICAgIC8vIGFuZCBhc3N1bWUgdGhlIHZpZXdhYmxlcyBhcmUgbGFpZCBvdXQgaW4gbG9jYWwgZmlsZSBzeXN0ZW0gcGF0aCByZWxhdGl2ZSB0byB0aGUgYnViYmxlLmpzb24uXHJcbiAgICB2YXIgX29mZmxpbmUgPSBmYWxzZTtcclxuICAgIGV4cG9ydCBmdW5jdGlvbiBpc09mZmxpbmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9vZmZsaW5lO1xyXG4gICAgfVxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHNldE9mZmxpbmUob2ZmbGluZSkge1xyXG4gICAgICAgIF9vZmZsaW5lID0gb2ZmbGluZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBPZmZsaW5lIHJlc291cmNlIHByZWZpeCBzcGVjaWZpZWQgYnkgdmlld2VyIGNvbnN1bWVyIChlLmcuIElPUyB3ZWIgdmlldykuIFVzZWQgYXMgcHJlZml4IHRvIGNvbmNhdGVuYXRlIHdpdGhcclxuICAgIC8vIGVhY2ggcmVzb3VyY2UgcmVsYXRpdmUgcGF0aCB0byBmb3JtIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGVhY2ggcmVzb3VyY2UuXHJcbiAgICB2YXIgX29mZmxpbmVSZXNvdXJjZVByZWZpeCA9IFwiXCI7XHJcbiAgICBleHBvcnQgZnVuY3Rpb24gc2V0T2ZmbGluZVJlc291cmNlUHJlZml4KHByZWZpeCkge1xyXG4gICAgICAgIF9vZmZsaW5lUmVzb3VyY2VQcmVmaXggPSBwcmVmaXg7XHJcbiAgICB9XHJcbiAgICBleHBvcnQgZnVuY3Rpb24gZ2V0T2ZmbGluZVJlc291cmNlUHJlZml4KCkge1xyXG4gICAgICAgIHJldHVybiBfb2ZmbGluZVJlc291cmNlUHJlZml4O1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBsZXQgZW5kcG9pbnQgPSBlbmRwO1xyXG5cclxuICAgIC8vRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHVudGlsIGFsbCBjb2RlIGlzIGNvbnZlcnRlZCB0byB1c2VcclxuICAgIC8vdGhlIGZ1bmN0aW9uIGZyb20gdGhlIGVuZHBvaW50IGluc3RhbmNlLlxyXG4gICAgZXhwb3J0IGxldCBpbml0TG9hZENvbnRleHQgPSBlbmRwLmluaXRMb2FkQ29udGV4dC5iaW5kKGVuZHApOyJdLCJuYW1lcyI6WyJpc05vZGVKUyIsImdldEdsb2JhbCIsImdldFBhcmFtZXRlckJ5TmFtZSIsIl93aW5kb3ciLCJlbmRwIiwiQ0ROX1JPT1QiLCJFTkRQT0lOVF9BUElfREVSSVZBVElWRV9TRVJWSUNFX1YyIiwiRU5EUE9JTlRfQVBJX01PREVMX0RFUklWQVRJVkVfVjIiLCJFTkRQT0lOVF9BUElfRkxVRU5UIiwiRU5EUE9JTlRfQVBJX0QzUyIsIkVORFBPSU5UX0FQSV9ERVJJVkFUSVZFX1NUUkVBTUlORyIsIl9hcGlzX2RhdGEiLCJkZXJpdmF0aXZlVjIiLCJiYXNlVVJMIiwiaXRlbVVSTCIsIm1hbmlmZXN0VVJMIiwidGh1bWJuYWlsc1VSTCIsInByb3BlcnR5UXVlcnlVUkwiLCJkZXJpdmF0aXZlVjJfRVUiLCJkZXJpdmF0aXZlVjJfQVBBQyIsImRlcml2YXRpdmVWMl9GZWRyYW1wIiwibW9kZWxEZXJpdmF0aXZlVjIiLCJmbHVlbnQiLCJjZG5VUkwiLCJjZG5XUyIsIkQzUyIsIkQzU19FVSIsIkQzU19BUEFDIiwic3RyZWFtaW5nVjIiLCJzdHJlYW1pbmdWMl9FVSIsInN0cmVhbWluZ1YyX0FQQUMiLCJzdHJlYW1pbmdWMl9GZWRyYW1wIiwiX2VuZHBvaW50IiwiX2FwaSIsIl91c2VDcmVkZW50aWFscyIsIl91c2VDb29raWUiLCJfYWNtU2Vzc2lvbiIsIl9lc2NhcGVPc3NPYmplY3RzIiwiSFRUUF9SRVFVRVNUX0hFQURFUlMiLCJxdWVyeVBhcmFtcyIsInNldEVuZHBvaW50QW5kQXBpIiwiZW5kcG9pbnQiLCJhcGkiLCJ1bmRlZmluZWQiLCJzdGFydHNXaXRoIiwiY29uc29sZSIsIndhcm4iLCJnZXRFbmRwb2ludEFuZEFwaSIsImdldEFwaUVuZHBvaW50IiwiZ2V0QXBpRmxhdm9yIiwiZ2V0Q2RuVXJsIiwiZ2V0Q2RuV2ViU29ja2V0RW5kcG9pbnQiLCJzZXRDZG5VcmwiLCJ1cmwiLCJnZXRDZG5SZWRpcmVjdFVybCIsInJlZGlyZWN0IiwiY2RuUmVkaXJlY3RVUkwiLCJzZXRBY21TZXNzaW9uIiwidmFsdWUiLCJnZXRBY21TZXNzaW9uIiwiZ2V0TWFuaWZlc3RBcGkiLCJ1cm4iLCJyZXBsYWNlIiwiZ2V0SXRlbUFwaSIsImRlcml2YXRpdmVVcm4iLCJ0aGVBcGkiLCJpdGVtQXBpIiwiZGVjb2RlZFVybiIsImRlY29kZVVSSUNvbXBvbmVudCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZ2V0VGh1bWJuYWlsQXBpIiwidGh1bWJuYWlsQXBpIiwiZ2V0UHJvcGVydHlRdWVyeUFwaSIsImd1aWQiLCJwcm9wZXJ0eVF1ZXJ5QXBpIiwiZ2V0VXNlQ3JlZGVudGlhbHMiLCJnZXREb21haW5QYXJhbSIsImxvY2F0aW9uIiwib3JpZ2luIiwiYWRkUXVlcnlQYXJhbSIsInBhcmFtIiwiZGVsZXRlUXVlcnlQYXJhbSIsImdldFF1ZXJ5UGFyYW1zIiwiaW5wdXRPYmoiLCJxUGFyYW0iLCJieXBhc3NEcyIsImFkZGVkUGFyYW1zIiwicCIsInB1c2giLCJqb2luIiwic2V0VXNlQ3JlZGVudGlhbHMiLCJ1c2VDcmVkZW50aWFscyIsInNldFVzZUNvb2tpZSIsInVzZUNvb2tpZSIsImdldFVzZUNvb2tpZSIsImlzT3RnQmFja2VuZCIsImlzU1ZGMkJhY2tlbmQiLCJzZXRFc2NhcGVPc3NPYmplY3RzIiwiZXNjYXBlT3NzT2JqZWN0cyIsImdldEVzY2FwZU9zc09iamVjdHMiLCJpbml0TG9hZENvbnRleHQiLCJhdXRoIiwiaGVhZGVycyIsIm90Z19jZG4iLCJvdGdfd3MiLCJfZW52IiwiZ2V0RW52Iiwic2V0RW52IiwiZW52IiwiX29mZmxpbmUiLCJpc09mZmxpbmUiLCJzZXRPZmZsaW5lIiwib2ZmbGluZSIsIl9vZmZsaW5lUmVzb3VyY2VQcmVmaXgiLCJzZXRPZmZsaW5lUmVzb3VyY2VQcmVmaXgiLCJwcmVmaXgiLCJnZXRPZmZsaW5lUmVzb3VyY2VQcmVmaXgiLCJiaW5kIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/net/endpoints.js\n"); /***/ }), /***/ "./src/file-loaders/workers/BvhWorker.js": /*!***********************************************!*\ !*** ./src/file-loaders/workers/BvhWorker.js ***! \***********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _wgs_scene_BVHBuilder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../wgs/scene/BVHBuilder */ \"./src/wgs/scene/BVHBuilder.js\");\n\n\nfunction doComputeBvh(loadContext) {\n\n var tmpbvh = new _wgs_scene_BVHBuilder__WEBPACK_IMPORTED_MODULE_0__.BVHBuilder(loadContext.fragments);\n tmpbvh.finfo.wantSort = loadContext.fragments.wantSort;\n tmpbvh.build(loadContext.bvhOptions);\n\n var bvh = {\n nodes: tmpbvh.nodes.getRawData(),\n primitives: tmpbvh.primitives\n };\n\n loadContext.worker.postMessage({ bvh: bvh, modelId: loadContext.modelId },\n [bvh.nodes, bvh.primitives.buffer]);\n}\n\nfunction register(workerMain) {\n workerMain.register(\"COMPUTE_BVH\", { doOperation: doComputeBvh });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvQnZoV29ya2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXNFOztBQUV0RSxTQUFTQyxZQUFZQSxDQUFDQyxXQUFXLEVBQUU7O0VBRS9CLElBQUlDLE1BQU0sR0FBRyxJQUFJSCw2REFBVSxDQUFDRSxXQUFXLENBQUNFLFNBQVMsQ0FBQztFQUNsREQsTUFBTSxDQUFDRSxLQUFLLENBQUNDLFFBQVEsR0FBR0osV0FBVyxDQUFDRSxTQUFTLENBQUNFLFFBQVE7RUFDdERILE1BQU0sQ0FBQ0ksS0FBSyxDQUFDTCxXQUFXLENBQUNNLFVBQVUsQ0FBQzs7RUFFcEMsSUFBSUMsR0FBRyxHQUFHO0lBQ05DLEtBQUssRUFBRVAsTUFBTSxDQUFDTyxLQUFLLENBQUNDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDQyxVQUFVLEVBQUVULE1BQU0sQ0FBQ1M7RUFDdkIsQ0FBQzs7RUFFRFYsV0FBVyxDQUFDVyxNQUFNLENBQUNDLFdBQVcsQ0FBQyxFQUFDTCxHQUFHLEVBQUNBLEdBQUcsRUFBRU0sT0FBTyxFQUFFYixXQUFXLENBQUNhLE9BQU8sRUFBQztFQUN0QyxDQUFDTixHQUFHLENBQUNDLEtBQUssRUFBRUQsR0FBRyxDQUFDRyxVQUFVLENBQUNJLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFOztBQUVPLFNBQVNDLFFBQVFBLENBQUNDLFVBQVUsRUFBRTtFQUNwQ0EsVUFBVSxDQUFDRCxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUVFLFdBQVcsRUFBRWxCLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDbEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvQnZoV29ya2VyLmpzPzI0ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQlZIQnVpbGRlciBhcyBCVkhCdWlsZGVyIH0gZnJvbSBcIi4uLy4uL3dncy9zY2VuZS9CVkhCdWlsZGVyXCI7XG5cbmZ1bmN0aW9uIGRvQ29tcHV0ZUJ2aChsb2FkQ29udGV4dCkgeyAgIFxuXG4gICAgdmFyIHRtcGJ2aCA9IG5ldyBCVkhCdWlsZGVyKGxvYWRDb250ZXh0LmZyYWdtZW50cyk7XG4gICAgdG1wYnZoLmZpbmZvLndhbnRTb3J0ID0gbG9hZENvbnRleHQuZnJhZ21lbnRzLndhbnRTb3J0O1xuICAgIHRtcGJ2aC5idWlsZChsb2FkQ29udGV4dC5idmhPcHRpb25zKTtcblxuICAgIHZhciBidmggPSB7XG4gICAgICAgIG5vZGVzOiB0bXBidmgubm9kZXMuZ2V0UmF3RGF0YSgpLFxuICAgICAgICBwcmltaXRpdmVzOiB0bXBidmgucHJpbWl0aXZlc1xuICAgIH07XG5cbiAgICBsb2FkQ29udGV4dC53b3JrZXIucG9zdE1lc3NhZ2Uoe2J2aDpidmgsIG1vZGVsSWQ6IGxvYWRDb250ZXh0Lm1vZGVsSWR9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J2aC5ub2RlcywgYnZoLnByaW1pdGl2ZXMuYnVmZmVyXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcih3b3JrZXJNYWluKSB7XG5cdHdvcmtlck1haW4ucmVnaXN0ZXIoXCJDT01QVVRFX0JWSFwiLCB7IGRvT3BlcmF0aW9uOiBkb0NvbXB1dGVCdmggfSk7XG59XG4iXSwibmFtZXMiOlsiQlZIQnVpbGRlciIsImRvQ29tcHV0ZUJ2aCIsImxvYWRDb250ZXh0IiwidG1wYnZoIiwiZnJhZ21lbnRzIiwiZmluZm8iLCJ3YW50U29ydCIsImJ1aWxkIiwiYnZoT3B0aW9ucyIsImJ2aCIsIm5vZGVzIiwiZ2V0UmF3RGF0YSIsInByaW1pdGl2ZXMiLCJ3b3JrZXIiLCJwb3N0TWVzc2FnZSIsIm1vZGVsSWQiLCJidWZmZXIiLCJyZWdpc3RlciIsIndvcmtlck1haW4iLCJkb09wZXJhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/BvhWorker.js\n"); /***/ }), /***/ "./src/file-loaders/workers/ConsolidationWorker.js": /*!*********************************************************!*\ !*** ./src/file-loaders/workers/ConsolidationWorker.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ doGeomMerge: () => (/* binding */ doGeomMerge),\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../wgs/scene/LmvMatrix4 */ \"./src/wgs/scene/LmvMatrix4.js\");\n/* harmony import */ var _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../wgs/scene/LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n/* harmony import */ var _wgs_scene_consolidation_GeomMergeTask__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../wgs/scene/consolidation/GeomMergeTask */ \"./src/wgs/scene/consolidation/GeomMergeTask.js\");\n\n\n\n\n/**\n * Main function of ConsolidationWorker. The purpose of this function is to overtake some time-consuming\n * work from mergeGeometries (see Consolidation.js), e.g., baking transforms into vertex-positions and normals.\n * @param {Object} context\n * @param {MergeTask[]} context.tasks - Each MergeTask provides the input data to process a single consolidated mesh.\n * See ParallelGeomMerge.js for details.\n */\nfunction doGeomMerge(context) {\n\n // Since we are running in the worker script, use LmvVector/LmvMatrix to run the MergeTask\n var matrix = new _wgs_scene_LmvMatrix4__WEBPACK_IMPORTED_MODULE_0__.LmvMatrix4();\n var vec = new _wgs_scene_LmvVector3__WEBPACK_IMPORTED_MODULE_1__.LmvVector3();\n\n var results = [];\n for (let i = 0; i < context.tasks.length; i++) {\n var task=c ontext.tasks[i];\n\n var result=_ wgs_scene_consolidation_GeomMergeTask__WEBPACK_IMPORTED_MODULE_2__.GeomMergeTask.prototype.run.call(task, matrix, vec);\n\n results.push(result);\n }\n\n // add result array buffers to transferlist to avoid copying\n var transferList=[ ];\n for (let i=0 ; i < results.length; i++) {\n transferList.push(results[i].vb.buffer);\n transferList.push(results[i].vertexIds.buffer);\n }\n\n // send back result\n context.worker.postMessage(results, transferList);\n}\n\nfunction register(workerMain) {\n workerMain.register(\ "MERGE_GEOMETRY\", { doOperation: doGeomMerge });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvQ29uc29saWRhdGlvbldvcmtlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF1RDtBQUNBO0FBQ3FCOztBQUU1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNHLFdBQVdBLENBQUNDLE9BQU8sRUFBRTs7RUFFakM7RUFDQSxJQUFJQyxNQUFNLEdBQUcsSUFBSUwsNkRBQVUsQ0FBQyxDQUFDO0VBQzdCLElBQUlNLEdBQUcsR0FBTSxJQUFJTCw2REFBVSxDQUFDLENBQUM7O0VBRTdCLElBQUlNLE9BQU8sR0FBRyxFQUFFO0VBQ2hCLEtBQUssSUFBSUMsQ0FBQyxHQUFDLENBQUMsRUFBRUEsQ0FBQyxHQUFDSixPQUFPLENBQUNLLEtBQUssQ0FBQ0MsTUFBTSxFQUFFRixDQUFDLEVBQUUsRUFBRTtJQUN2QyxJQUFJRyxJQUFJLEdBQUdQLE9BQU8sQ0FBQ0ssS0FBSyxDQUFDRCxDQUFDLENBQUM7O0lBRTNCLElBQUlJLE1BQU0sR0FBR1YsaUZBQWEsQ0FBQ1csU0FBUyxDQUFDQyxHQUFHLENBQUNDLElBQUksQ0FBQ0osSUFBSSxFQUFFTixNQUFNLEVBQUVDLEdBQUcsQ0FBQzs7SUFFaEVDLE9BQU8sQ0FBQ1MsSUFBSSxDQUFDSixNQUFNLENBQUM7RUFDeEI7O0VBRUE7RUFDQSxJQUFJSyxZQUFZLEdBQUcsRUFBRTtFQUNyQixLQUFLLElBQUlULENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ0QsT0FBTyxDQUFDRyxNQUFNLEVBQUVGLENBQUMsRUFBRSxFQUFFO0lBQ2pDUyxZQUFZLENBQUNELElBQUksQ0FBQ1QsT0FBTyxDQUFDQyxDQUFDLENBQUMsQ0FBQ1UsRUFBRSxDQUFDQyxNQUFNLENBQUM7SUFDdkNGLFlBQVksQ0FBQ0QsSUFBSSxDQUFDVCxPQUFPLENBQUNDLENBQUMsQ0FBQyxDQUFDWSxTQUFTLENBQUNELE1BQU0sQ0FBQztFQUNsRDs7RUFFQTtFQUNBZixPQUFPLENBQUNpQixNQUFNLENBQUNDLFdBQVcsQ0FBQ2YsT0FBTyxFQUFFVSxZQUFZLENBQUM7QUFDckQ7O0FBRU8sU0FBU00sUUFBUUEsQ0FBQ0MsVUFBVSxFQUFFO0VBQ2pDQSxVQUFVLENBQUNELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFRSxXQUFXLEVBQUV0QixXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy93b3JrZXJzL0NvbnNvbGlkYXRpb25Xb3JrZXIuanM/ZDE5OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMbXZNYXRyaXg0fSBmcm9tIFwiLi4vLi4vd2dzL3NjZW5lL0xtdk1hdHJpeDRcIjtcbmltcG9ydCB7IExtdlZlY3RvcjN9IGZyb20gXCIuLi8uLi93Z3Mvc2NlbmUvTG12VmVjdG9yM1wiO1xuaW1wb3J0IHsgR2VvbU1lcmdlVGFzayB9IGZyb20gXCIuLi8uLi93Z3Mvc2NlbmUvY29uc29saWRhdGlvbi9HZW9tTWVyZ2VUYXNrXCI7XG5cbi8qKlxuICogTWFpbiBmdW5jdGlvbiBvZiBDb25zb2xpZGF0aW9uV29ya2VyLiBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIG92ZXJ0YWtlIHNvbWUgdGltZS1jb25zdW1pbmdcbiAqIHdvcmsgZnJvbSBtZXJnZUdlb21ldHJpZXMgKHNlZSBDb25zb2xpZGF0aW9uLmpzKSwgZS5nLiwgYmFraW5nIHRyYW5zZm9ybXMgaW50byB2ZXJ0ZXgtcG9zaXRpb25zIGFuZCBub3JtYWxzLlxuICogIEBwYXJhbSB7T2JqZWN0fSAgICAgIGNvbnRleHRcbiAqICBAcGFyYW0ge01lcmdlVGFza1tdfSBjb250ZXh0LnRhc2tzIC0gRWFjaCBNZXJnZVRhc2sgcHJvdmlkZXMgdGhlIGlucHV0IGRhdGEgdG8gcHJvY2VzcyBhIHNpbmdsZSBjb25zb2xpZGF0ZWQgbWVzaC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIFBhcmFsbGVsR2VvbU1lcmdlLmpzIGZvciBkZXRhaWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9HZW9tTWVyZ2UoY29udGV4dCkge1xuXG4gICAgLy8gU2luY2Ugd2UgYXJlIHJ1bm5pbmcgaW4gdGhlIHdvcmtlciBzY3JpcHQsIHVzZSBMbXZWZWN0b3IvTG12TWF0cml4IHRvIHJ1biB0aGUgTWVyZ2VUYXNrXG4gICAgdmFyIG1hdHJpeCA9IG5ldyBMbXZNYXRyaXg0KCk7XG4gICAgdmFyIHZlYyAgICA9IG5ldyBMbXZWZWN0b3IzKCk7XG5cbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIGZvciAobGV0IGk9MDsgaTxjb250ZXh0LnRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0YXNrID0gY29udGV4dC50YXNrc1tpXTtcblxuICAgICAgICB2YXIgcmVzdWx0ID0gR2VvbU1lcmdlVGFzay5wcm90b3R5cGUucnVuLmNhbGwodGFzaywgbWF0cml4LCB2ZWMpO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgIH1cblxuICAgIC8vIGFkZCByZXN1bHQgYXJyYXkgYnVmZmVycyB0byB0cmFuc2Zlcmxpc3QgdG8gYXZvaWQgY29weWluZ1xuICAgIHZhciB0cmFuc2Zlckxpc3QgPSBbXTtcbiAgICBmb3IgKGxldCBpPTA7IGk8cmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0cmFuc2Zlckxpc3QucHVzaChyZXN1bHRzW2ldLnZiLmJ1ZmZlcik7XG4gICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKHJlc3VsdHNbaV0udmVydGV4SWRzLmJ1ZmZlcik7XG4gICAgfVxuXG4gICAgLy8gc2VuZCBiYWNrIHJlc3VsdFxuICAgIGNvbnRleHQud29ya2VyLnBvc3RNZXNzYWdlKHJlc3VsdHMsIHRyYW5zZmVyTGlzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcih3b3JrZXJNYWluKSB7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIk1FUkdFX0dFT01FVFJZXCIsIHsgZG9PcGVyYXRpb246IGRvR2VvbU1lcmdlIH0pO1xufVxuXG4iXSwibmFtZXMiOlsiTG12TWF0cml4NCIsIkxtdlZlY3RvcjMiLCJHZW9tTWVyZ2VUYXNrIiwiZG9HZW9tTWVyZ2UiLCJjb250ZXh0IiwibWF0cml4IiwidmVjIiwicmVzdWx0cyIsImkiLCJ0YXNrcyIsImxlbmd0aCIsInRhc2siLCJyZXN1bHQiLCJwcm90b3R5cGUiLCJydW4iLCJjYWxsIiwicHVzaCIsInRyYW5zZmVyTGlzdCIsInZiIiwiYnVmZmVyIiwidmVydGV4SWRzIiwid29ya2VyIiwicG9zdE1lc3NhZ2UiLCJyZWdpc3RlciIsIndvcmtlck1haW4iLCJkb09wZXJhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/ConsolidationWorker.js\n "); /***/ }), /***/ "./src/file-loaders/workers/F2dParseWorker.js ": /*!****************************************************!*\ !*** ./src/file-loaders/workers/F2dParseWorker.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: ()=> (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _lmvtk_f2d_F2d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lmvtk/f2d/F2d */ \"./src/file-loaders/lmvtk/f2d/F2d.js\");\n/* harmony import */ var _lmvtk_f2d_F2dGeometry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lmvtk/f2d/F2dGeometry */ \"./src/file-loaders/lmvtk/f2d/F2dGeometry.js\");\n/* harmony import */ var _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../net/ErrorCodes */ \"./src/file-loaders/net/ErrorCodes.js\");\n\n\n\n\n\nfunction tryCatch(_this, f) {\n try {\n f();\n }\n catch (exc) {\n _this.raiseError(\n _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__.ErrorCodes.BAD_DATA, \"\",\n { \"exception\": exc.toString(), \"stack\": exc.stack });\n _this.postMessage(null);\n }\n}\n\nfunction getF2DParser(loadContext) {\n if (loadContext.f2dLoadOptions.outputType === \"geometry\") {\n return new _lmvtk_f2d_F2dGeometry__WEBPACK_IMPORTED_MODULE_1__.F2DGeometry(loadContext.metadata, loadContext.f2dLoadOptions);\n }\n return new _lmvtk_f2d_F2d__WEBPACK_IMPORTED_MODULE_0__.F2D(loadContext.metadata, loadContext.manifest, loadContext.basePath, loadContext.f2dLoadOptions);\n}\n\nfunction doParseF2D(loadContext) {\n var _this = loadContext.worker;\n\n _this.postMessage({ progress: 0.01 }); //Tell the main thread we are alive\n\n if (loadContext.data) {\n\n _this.postMessage({ progress: 0.5 }); //rough progress reporting -- can do better\n var f2d = getF2DParser(loadContext);\n loadContext.loadDoneCB = function (success) {\n\n if (success) {\n var msg = { \"f2d\": f2d };\n _this.postMessage(msg);\n } else\n {\n _this.raiseError(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__.ErrorCodes.BAD_DATA, \"\", {});\n _this.postMessage(null);\n }\n };\n\n tryCatch(_this, function () {\n f2d.load(loadContext, loadContext.data);\n });\n } else\n {\n _this.postMessage(null);\n }\n}\n\nfunction doParseF2DFrame(loadContext) {\n var _this = loadContext.worker;\n\n var f2d = _this.f2d;\n\n if (!f2d) {\n _this.postMessage({ progress: 0.5 }); //rough progress reporting -- can do better\n f2d = _this.f2d = getF2DParser(loadContext);\n f2d.F2D_MESH_COUNT_OLD = 0;\n\n // First post needs to post entire F2D so we can set up bounding boxes, etc.\n var msg = { \"f2dframe\": f2d };\n _this.postMessage(msg);\n }\n\n function loadDoneCallback(success, finalFlush) {\n if (success) {\n\n if (!f2d.meshes.length && !finalFlush) {\n // No new data coming in.\n // debug(\"F2D streaming : no new data coming in.\");\n return;\n } else {\n\n var msg = { \"f2dframe\": true,\n \"meshes\": f2d.meshes,\n \"baseIndex\": f2d.F2D_MESH_COUNT_OLD,\n \"bbox\": f2d.bbox\n };\n\n if (loadContext.finalFrame) {var _loadContext$f2dLoadO;\n\n //Add f2d properties which are cumulative and their\n //final values are not known until the end\n msg.cumulativeProps = {\n maxObjectNumber: f2d.maxObjectNumber,\n viewports: f2d.viewports,\n clips: f2d.clips,\n strings: f2d.strings,\n stringDbIds: f2d.stringDbIds,\n stringBoxes: f2d.stringBoxes,\n linkBoxes: f2d.linkBoxes,\n hasPageShadow: f2d.hasPageShadow,\n minLineWidth: f2d.currentVbb.minLineWidth\n };\n\n if ((_loadContext$f2dLoadO = loadContext.f2dLoadOptions) !== null && _loadContext$f2dLoadO !== void 0 && _loadContext$f2dLoadO.extendStringsFetching) {\n msg.cumulativeProps.stringCharWidths = f2d.stringCharWidths; // contains width of every character in a string\n msg.cumulativeProps.stringAngles = f2d.stringAngles; // rotation of a string box\n msg.cumulativeProps.stringPositions = f2d.stringPositions; // starting point of string box. this values are not equal to min.x and min.y of stringBoxes\n msg.cumulativeProps.stringHeights = f2d.stringHeights; // height of a string box\n }\n\n msg.finalFrame = finalFlush;\n }\n\n // User transferable objects to pass the array buffers used by mesh without deep copying.\n var transferList = [];\n for (var i = 0, e = f2d.meshes.length; i < e; ++i) {\n transferList.push(f2d.meshes[i].vb.buffer);\n transferList.push(f2d.meshes[i].indices.buffer);\n }\n _this.postMessage(msg, transferList);\n\n f2d.F2D_MESH_COUNT_OLD +=f 2d.meshes.length;\n f2d.meshes=[ ];\n }\n } else\n {\n _this.raiseError(\n _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__.ErrorCodes.BAD_DATA, \ "\",\n {});\n _this.postMessage(null);\n }\n }\n\n loadContext.loadDoneCB=l oadDoneCallback;\n\n tryCatch(_this, function () {\n f2d.loadFrames(loadContext);\n });\n}\n\n\nfunction register(workerMain) {\n workerMain.register(\ "PARSE_F2D\", { doOperation: doParseF2D });\n workerMain.register(\ "PARSE_F2D_FRAME\", { doOperation: doParseF2DFrame });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvRjJkUGFyc2VXb3JrZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDdUM7QUFDZ0I7QUFDUjs7QUFFL0MsU0FBU0csUUFBUUEsQ0FBQ0MsS0FBSyxFQUFFQyxDQUFDLEVBQUU7RUFDeEIsSUFBSTtJQUNBQSxDQUFDLENBQUMsQ0FBQztFQUNQO0VBQ0EsT0FBT0MsR0FBRyxFQUFFO0lBQ1JGLEtBQUssQ0FBQ0csVUFBVTtNQUNaTCx1REFBVSxDQUFDTSxRQUFRLEVBQUUsRUFBRTtNQUN2QixFQUFFLFdBQVcsRUFBRUYsR0FBRyxDQUFDRyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRUgsR0FBRyxDQUFDSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hETixLQUFLLENBQUNPLFdBQVcsQ0FBQyxJQUFJLENBQUM7RUFDM0I7QUFDSjs7QUFFQSxTQUFTQyxZQUFZQSxDQUFDQyxXQUFXLEVBQUU7RUFDL0IsSUFBSUEsV0FBVyxDQUFDQyxjQUFjLENBQUNDLFVBQVUsS0FBSyxVQUFVLEVBQUU7SUFDdEQsT0FBTyxJQUFJZCwrREFBVyxDQUFDWSxXQUFXLENBQUNHLFFBQVEsRUFBRUgsV0FBVyxDQUFDQyxjQUFjLENBQUM7RUFDNUU7RUFDQSxPQUFPLElBQUlkLCtDQUFHLENBQUNhLFdBQVcsQ0FBQ0csUUFBUSxFQUFFSCxXQUFXLENBQUNJLFFBQVEsRUFBRUosV0FBVyxDQUFDSyxRQUFRLEVBQUVMLFdBQVcsQ0FBQ0MsY0FBYyxDQUFDO0FBQ2hIOztBQUVBLFNBQVNLLFVBQVVBLENBQUNOLFdBQVcsRUFBRTtFQUM3QixJQUFJVCxLQUFLLEdBQUdTLFdBQVcsQ0FBQ08sTUFBTTs7RUFFOUJoQixLQUFLLENBQUNPLFdBQVcsQ0FBQyxFQUFDVSxRQUFRLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVwQyxJQUFJUixXQUFXLENBQUNTLElBQUksRUFBRTs7SUFFbEJsQixLQUFLLENBQUNPLFdBQVcsQ0FB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QixDQUFDLENBQUMsQ0FBQztNQUNQSixLQUFLLENBQUNPLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDM0I7RUFDSjs7RUFFQUUsV0FBVyxDQUFDVyxVQUFVLEdBQUdNLGdCQUFnQjs7RUFFekMzQixRQUFRLENBQUNDLEtBQUssRUFBRSxZQUFXO0lBQ3ZCbUIsR0FBRyxDQUFDcUMsVUFBVSxDQUFDL0MsV0FBVyxDQUFDO0VBQy9CLENBQUMsQ0FBQztBQUNOOzs7QUFHTyxTQUFTZ0QsUUFBUUEsQ0FBQ0MsVUFBVSxFQUFFO0VBQ2pDQSxVQUFVLENBQUNELFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRUUsV0FBVyxFQUFFNUMsVUFBVSxDQUFDLENBQUMsQ0FBQztFQUM3RDJDLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEVBQUVFLFdBQVcsRUFBRW5DLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDNUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvRjJkUGFyc2VXb3JrZXIuanM/ZTc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEYyRCB9IGZyb20gXCIuLi9sbXZ0ay9mMmQvRjJkXCI7XG5pbXBvcnQgeyBGMkRHZW9tZXRyeSB9IGZyb20gXCIuLi9sbXZ0ay9mMmQvRjJkR2VvbWV0cnlcIjtcbmltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tIFwiLi4vbmV0L0Vycm9yQ29kZXNcIjtcblxuZnVuY3Rpb24gdHJ5Q2F0Y2goX3RoaXMsIGYpIHtcbiAgICB0cnkge1xuICAgICAgICBmKCk7XG4gICAgfVxuICAgIGNhdGNoIChleGMpIHtcbiAgICAgICAgX3RoaXMucmFpc2VFcnJvcihcbiAgICAgICAgICAgIEVycm9yQ29kZXMuQkFEX0RBVEEsIFwiXCIsXG4gICAgICAgICAgICB7IFwiZXhjZXB0aW9uXCI6IGV4Yy50b1N0cmluZygpLCBcInN0YWNrXCI6IGV4Yy5zdGFjayB9KTtcbiAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRGMkRQYXJzZXIobG9hZENvbnRleHQpIHtcbiAgICBpZiAobG9hZENvbnRleHQuZjJkTG9hZE9wdGlvbnMub3V0cHV0VHlwZSA9PT0gXCJnZW9tZXRyeVwiKSB7XG4gICAgICAgIHJldHVybiBuZXcgRjJER2VvbWV0cnkobG9hZENvbnRleHQubWV0YWRhdGEsIGxvYWRDb250ZXh0LmYyZExvYWRPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBGMkQobG9hZENvbnRleHQubWV0YWRhdGEsIGxvYWRDb250ZXh0Lm1hbmlmZXN0LCBsb2FkQ29udGV4dC5iYXNlUGF0aCwgbG9hZENvbnRleHQuZjJkTG9hZE9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBkb1BhcnNlRjJEKGxvYWRDb250ZXh0KSB7XG4gICAgdmFyIF90aGlzID0gbG9hZENvbnRleHQud29ya2VyO1xuICAgIFxuICAgIF90aGlzLnBvc3RNZXNzYWdlKHtwcm9ncmVzczowLjAxfSk7IC8vVGVsbCB0aGUgbWFpbiB0aHJlYWQgd2UgYXJlIGFsaXZlXG5cbiAgICBpZiAobG9hZENvbnRleHQuZGF0YSkge1xuXG4gICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKHtwcm9ncmVzczowLjV9KTsgLy9yb3VnaCBwcm9ncmVzcyByZXBvcnRpbmcgLS0gY2FuIGRvIGJldHRlclxuICAgICAgICB2YXIgZjJkID0gZ2V0RjJEUGFyc2VyKGxvYWRDb250ZXh0KTtcbiAgICAgICAgbG9hZENvbnRleHQubG9hZERvbmVDQiA9IGZ1bmN0aW9uKHN1Y2Nlc3MpIHtcblxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgbXNnID0geyBcImYyZFwiIDogZjJkIH07XG4gICAgICAgICAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UobXNnICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5yYWlzZUVycm9yKEVycm9yQ29kZXMuQkFEX0RBVEEsIFwiXCIsIHt9KTtcbiAgICAgICAgICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0cnlDYXRjaChfdGhpcywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmMmQubG9hZChsb2FkQ29udGV4dCwgbG9hZENvbnRleHQuZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb1BhcnNlRjJERnJhbWUobG9hZENvbnRleHQpIHtcbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICB2YXIgZjJkID0gX3RoaXMuZjJkO1xuXG4gICAgaWYgKCFmMmQpIHtcbiAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2Uoe3Byb2dyZXNzOjAuNX0pOyAvL3JvdWdoIHByb2dyZXNzIHJlcG9ydGluZyAtLSBjYW4gZG8gYmV0dGVyXG4gICAgICAgIGYyZCA9IF90aGlzLmYyZCA9IGdldEYyRFBhcnNlcihsb2FkQ29udGV4dCk7XG4gICAgICAgIGYyZC5GMkRfTUVTSF9DT1VOVF9PTEQgPSAwO1xuXG4gICAgICAgIC8vIEZpcnN0IHBvc3QgbmVlZHMgdG8gcG9zdCBlbnRpcmUgRjJEIHNvIHdlIGNhbiBzZXQgdXAgYm91bmRpbmcgYm94ZXMsIGV0Yy5cbiAgICAgICAgdmFyIG1zZyA9IHsgXCJmMmRmcmFtZVwiIDogZjJkIH07XG4gICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKG1zZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZERvbmVDYWxsYmFjayhzdWNjZXNzLCBmaW5hbEZsdXNoKSB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG5cbiAgICAgICAgICAgIGlmICghZjJkLm1lc2hlcy5sZW5ndGggJiYgIWZpbmFsRmx1c2gpIHtcbiAgICAgICAgICAgICAgICAvLyBObyBuZXcgZGF0YSBjb21pbmcgaW4uXG4gICAgICAgICAgICAgICAgLy8gZGVidWcoXCJGMkQgc3RyZWFtaW5nIDogbm8gbmV3IGRhdGEgY29taW5nIGluLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgdmFyIG1zZyA9IHsgXCJmMmRmcmFtZVwiIDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJtZXNoZXNcIiA6IGYyZC5tZXNoZXMsXG4gICAgICAgICAgICAgICAgICAgIFwiYmFzZUluZGV4XCIgOiBmMmQuRjJEX01FU0hfQ09VTlRfT0xELFxuICAgICAgICAgICAgICAgICAgICBcImJib3hcIiA6IGYyZC5iYm94XG4gICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAobG9hZENvbnRleHQuZmluYWxGcmFtZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vQWRkIGYyZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjdW11bGF0aXZlIGFuZCB0aGVpclxuICAgICAgICAgICAgICAgICAgICAvL2ZpbmFsIHZhbHVlcyBhcmUgbm90IGtub3duIHVudGlsIHRoZSBlbmRcbiAgICAgICAgICAgICAgICAgICAgbXNnLmN1bXVsYXRpdmVQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heE9iamVjdE51bWJlciA6IGYyZC5tYXhPYmplY3ROdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydHMgOiBmMmQudmlld3BvcnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHMgOiBmMmQuY2xpcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzOiBmMmQuc3RyaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0RiSWRzOiBmMmQuc3RyaW5nRGJJZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCb3hlczogZjJkLnN0cmluZ0JveGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlua0JveGVzOiBmMmQubGlua0JveGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGFnZVNoYWRvdzogZjJkLmhhc1BhZ2VTaGFkb3csXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5MaW5lV2lkdGg6IGYyZC5jdXJyZW50VmJiLm1pbkxpbmVXaWR0aFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkQ29udGV4dC5mMmRMb2FkT3B0aW9ucz8uZXh0ZW5kU3RyaW5nc0ZldGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cuY3VtdWxhdGl2ZVByb3BzLnN0cmluZ0NoYXJXaWR0aHMgPSBmMmQuc3RyaW5nQ2hhcldpZHRoczsgLy8gY29udGFpbnMgd2lkdGggb2YgZXZlcnkgY2hhcmFjdGVyIGluIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cuY3VtdWxhdGl2ZVByb3BzLnN0cmluZ0FuZ2xlcyA9IGYyZC5zdHJpbmdBbmdsZXM7IC8vIHJvdGF0aW9uIG9mIGEgc3RyaW5nIGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmN1bXVsYXRpdmVQcm9wcy5zdHJpbmdQb3NpdGlvbnMgPSBmMmQuc3RyaW5nUG9zaXRpb25zOyAvLyBzdGFydGluZyBwb2ludCBvZiBzdHJpbmcgYm94LiB0aGlzIHZhbHVlcyBhcmUgbm90IGVxdWFsIHRvIG1pbi54IGFuZCBtaW4ueSBvZiBzdHJpbmdCb3hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmN1bXVsYXRpdmVQcm9wcy5zdHJpbmdIZWlnaHRzID0gZjJkLnN0cmluZ0hlaWdodHM7IC8vIGhlaWdodCBvZiBhIHN0cmluZyBib3hcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG1zZy5maW5hbEZyYW1lID0gZmluYWxGbHVzaDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBVc2VyIHRyYW5zZmVyYWJsZSBvYmplY3RzIHRvIHBhc3MgdGhlIGFycmF5IGJ1ZmZlcnMgdXNlZCBieSBtZXNoIHdpdGhvdXQgZGVlcCBjb3B5aW5nLlxuICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zlckxpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGYyZC5tZXNoZXMubGVuZ3RoOyBpIDwgZTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKGYyZC5tZXNoZXNbaV0udmIuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJMaXN0LnB1c2goZjJkLm1lc2hlc1tpXS5pbmRpY2VzLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKG1zZywgdHJhbnNmZXJMaXN0KTtcblxuICAgICAgICAgICAgICAgIGYyZC5GMkRfTUVTSF9DT1VOVF9PTEQgKz0gZjJkLm1lc2hlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZjJkLm1lc2hlcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMucmFpc2VFcnJvcihcbiAgICAgICAgICAgICAgICBFcnJvckNvZGVzLkJBRF9EQVRBLCBcIlwiLFxuICAgICAgICAgICAgICAgIHt9KTtcbiAgICAgICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZENvbnRleHQubG9hZERvbmVDQiA9IGxvYWREb25lQ2FsbGJhY2s7XG5cbiAgICB0cnlDYXRjaChfdGhpcywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGYyZC5sb2FkRnJhbWVzKGxvYWRDb250ZXh0KTtcbiAgICB9KTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXIod29ya2VyTWFpbikge1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJQQVJTRV9GMkRcIiwgeyBkb09wZXJhdGlvbjogZG9QYXJzZUYyRCB9KTtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiUEFSU0VfRjJEX0ZSQU1FXCIsIHsgZG9PcGVyYXRpb246IGRvUGFyc2VGMkRGcmFtZSB9KTtcbn1cbiJdLCJuYW1lcyI6WyJGMkQiLCJGMkRHZW9tZXRyeSIsIkVycm9yQ29kZXMiLCJ0cnlDYXRjaCIsIl90aGlzIiwiZiIsImV4YyIsInJhaXNlRXJyb3IiLCJCQURfREFUQSIsInRvU3RyaW5nIiwic3RhY2siLCJwb3N0TWVzc2FnZSIsImdldEYyRFBhcnNlciIsImxvYWRDb250ZXh0IiwiZjJkTG9hZE9wdGlvbnMiLCJvdXRwdXRUeXBlIiwibWV0YWRhdGEiLCJtYW5pZmVzdCIsImJhc2VQYXRoIiwiZG9QYXJzZUYyRCIsIndvcmtlciIsInByb2dyZXNzIiwiZGF0YSIsImYyZCIsImxvYWREb25lQ0IiLCJzdWNjZXNzIiwibXNnIiwibG9hZCIsImRvUGFyc2VGMkRGcmFtZSIsIkYyRF9NRVNIX0NPVU5UX09MRCIsImxvYWREb25lQ2FsbGJhY2siLCJmaW5hbEZsdXNoIiwibWVzaGVzIiwibGVuZ3RoIiwiYmJveCIsImZpbmFsRnJhbWUiLCJfbG9hZENvbnRleHQkZjJkTG9hZE8iLCJjdW11bGF0aXZlUHJvcHMiLCJtYXhPYmplY3ROdW1iZXIiLCJ2aWV3cG9ydHMiLCJjbGlwcyIsInN0cmluZ3MiLCJzdHJpbmdEYklkcyIsInN0cmluZ0JveGVzIiwibGlua0JveGVzIiwiaGFzUGFnZVNoYWRvdyIsIm1pbkxpbmVXaWR0aCIsImN1cnJlbnRWYmIiLCJleHRlbmRTdHJpbmdzRmV0Y2hpbmciLCJzdHJpbmdDaGFyV2lkdGhzIiwic3RyaW5nQW5nbGVzIiwic3RyaW5nUG9zaXRpb25zIiwic3RyaW5nSGVpZ2h0cyIsInRyYW5zZmVyTGlzdCIsImkiLCJlIiwicHVzaCIsInZiIiwiYnVmZmVyIiwiaW5kaWNlcyIsImxvYWRGcmFtZXMiLCJyZWdpc3RlciIsIndvcmtlck1haW4iLCJkb09wZXJhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/F2dParseWorker.js\n "); /***/ }), /***/ "./src/file-loaders/workers/F2dStreamWorker.js ": /*!*****************************************************!*\ !*** ./src/file-loaders/workers/F2dStreamWorker.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: ()=> (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _net_Xhr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../net/Xhr */ \"./src/file-loaders/net/Xhr.js\");\n/* harmony import */ var _lmvtk_f2d_F2dProbe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lmvtk/f2d/F2dProbe */ \"./src/file-loaders/lmvtk/f2d/F2dProbe.js\");\n/* harmony import */ var _logger_Logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../logger/Logger */ \"./src/logger/Logger.js\");\n/* harmony import */ var _lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lmvtk/common/StringUtils */ \"./src/file-loaders/lmvtk/common/StringUtils.js\");\n/* harmony import */ var _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../net/ErrorCodes */ \"./src/file-loaders/net/ErrorCodes.js\");\n/* harmony import */ var fflate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! fflate */ \"./node_modules/fflate/esm/browser.js\");\n\n\n\n\n\n\n\n\n\n\nvar ENABLE_F2D_STREAMING_MODE = true;\n\nfunction requestFileF2D(loadContext, filename, onSuccess) {\n var url = loadContext.basePath + filename;\n _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.getItem(loadContext, url, onSuccess, null);\n}\n\n// Stream loading f2d data and prepare parseable data frames.\nfunction doStreamF2D(loadContext) {\n\n var _this = loadContext.worker;\n\n _this.postMessage({ progress: 0.01 }); //Tell the main thread we are alive\n\n //Get the metadata and manifest first.\n var metadata;\n var manifest;\n var doneFiles = 0;\n\n var accumulatedStream = new Uint8Array(65536);\n var accumulatedBytes = 0;\n var responseData = null;\n\n function accumulateData(partial) {\n //Add the new bytes to the accumulation buffer\n if (accumulatedStream.length < partial.length + accumulatedBytes) {\n var newlen=M ath.max(accumulatedStream.length * 2, partial.length + accumulatedBytes);\n var ns=n ew Uint8Array(newlen);\n ns.set(accumulatedStream);\n accumulatedStream=n s;\n }\n accumulatedStream.set(partial, accumulatedBytes);\n accumulatedBytes +=p artial.length;\n }\n\n function markSucceeded(response) {\n responseData=r esponse;\n }\n\n var dataReceived=a ccumulateData;\n var requestSucceeded=m arkSucceeded;\n\n // Start the request for the primary graphics\n // Just accumulate data as it comes in, and remember response\n // when it succeeds. The dataReceived and requestSucceeded\n // variables are changed to other functions once the manifest\n // and metadata are read.\n _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.getItem(loadContext, loadContext.url, function (responseData) {\n requestSucceeded(responseData);\n }, loadContext.onFailureCallback, {\n ondata: function (partial) {\n dataReceived(partial);\n },\n responseType: \ "\"\n }\n );\n\n requestFileF2D(loadContext, \ "metadata.json.gz\", function (data) {\n try {\n metadata=J SON.parse((0,_lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_3__.utf8ArrayToString)(data));\n doneFiles++;\n } catch (e) {\n self.raiseError(\n _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_4__.ErrorCodes.BAD_DATA,\n \ "\" /* does not matter what strings we put here since the final user facing error message is solely decided\n by ErrorCodes. Invent another code if we want a specific error message for this error. */\n );\n }\n\n if (doneFiles===2 )\n doStreamF2D_Continued(loadContext, manifest, metadata);\n });\n requestFileF2D(loadContext, \ "manifest.json.gz\", function (data) {\n try {\n if (data)\n manifest=J SON.parse((0,_lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_3__.utf8ArrayToString)(data));\n //The F2D does not necessarily need a manifest file to load (some old F2Ds don 't have that)\n doneFiles++;\n } catch (e) {}\n\n if (doneFiles === 2)\n doStreamF2D_Continued(loadContext, manifest, metadata);\n });\n\n //Loads the F2D stream once the metadata and manifest files are fetched\n function doStreamF2D_Continued(loadContext, manifest, metadata) {\n\n var _this = loadContext.worker;\n\n var url = loadContext.url;\n\n // Collect asset urls that to be send to main thread for mobile usage.\n var assets = [];\n\n var f2dSize = 0;\n var altSize = 0;\n if (manifest && manifest.assets) {\n var a = manifest.assets;\n for (var i = 0; i < a.length; i++) {\n if (url.indexOf(a[i].URI) != -1) {\n f2dSize = a[i].usize || 0;\n break;\n } else if (a[i].type == \"Autodesk.CloudPlatform.F2D\")\n altSize = a[i].usize || 0;\n }\n }\n if (f2dSize == 0 && altSize > 0)\n f2dSize = altSize;\n\n var probe = new _lmvtk_f2d_F2dProbe__WEBPACK_IMPORTED_MODULE_1__.F2DProbe();\n\n var first = true;\n var streamOffset = 0;\n var sentMetadata = false;\n\n function onSuccess(responseData) {\n // Send collected f2d resource urls to main thread.\n _this.postMessage({ \"type\": \"F2DAssetURL\", \"urls\": assets });\n assets = null;\n\n if (ENABLE_F2D_STREAMING_MODE) {\n\n let msg = {\n \"type\": \"F2DSTREAM\",\n \"finalFrame\": true,\n \"finished\": true,\n \"progress\": 1\n };\n\n if (!sentMetadata) {\n msg.manifest = manifest;\n msg.metadata = metadata;\n msg.basePath = loadContext.basePath;\n msg.f2dSize = f2dSize;\n sentMetadata = true;\n }\n\n _this.debug(\"Total text bytes count : \" + responseData.length);\n\n _this.postMessage(msg);\n\n //Streaming code path ends here -- we have already sent\n //the data back from the progress callback\n return;\n }\n\n //Non-streaming code path here\n if (accumulatedStream.length > accumulatedBytes)\n accumulatedStream = new Uint8Array(accumulatedStream.buffer.slice(0, accumulatedBytes));\n\n var view;\n if (accumulatedStream[0] == 31 && accumulatedStream[1] == 139) {\n try {\n view = new Uint8Array(accumulatedStream.buffer, 0, accumulatedBytes);\n view = (0,fflate__WEBPACK_IMPORTED_MODULE_5__.gunzipSync)(view);\n } catch (e) {\n console.error(e);\n }\n }\n\n var msg = { \"type\": \"F2DBLOB\",\n \"metadata\": metadata,\n \"manifest\": manifest,\n \"f2dSize\": f2dSize,\n \"basePath\": loadContext.basePath, // TODO: we might be able to infer this elsewhere.\n \"progress\": 1,\n \"buffer\": view.buffer };\n var transferList = [];\n transferList.push(view.buffer);\n _this.postMessage(msg, transferList);\n }\n\n function processData() {\n\n if (!ENABLE_F2D_STREAMING_MODE)\n return;\n\n if (first) {\n first = false;\n\n // If the very first two bytes of the entire stream is GZIP magic number,\n // then we fall back on none streaming mode, because streaming mode only\n // work with browser decompression, and the presence of such magic number\n // implies browser decompression fails, for whatever reasons.\n if (accumulatedStream[0] == 31 && accumulatedStream[1] == 139) {\n _logger_Logger__WEBPACK_IMPORTED_MODULE_2__.logger.error(\"F2D streaming broken by non-streaming unzip!\", (0,_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_4__.errorCodeString)(_net_ErrorCodes__WEBPACK_IMPORTED_MODULE_4__.ErrorCodes.BAD_DATA));\n ENABLE_F2D_STREAMING_MODE = false;\n return;\n }\n }\n\n var view = new Uint8Array(accumulatedStream.buffer, streamOffset, accumulatedBytes - streamOffset);\n\n try {\n var marker = probe.load(view);\n\n if (marker.frameEnd > marker.frameStart) {\n var frames = accumulatedStream.buffer.slice(streamOffset + marker.frameStart, streamOffset + marker.frameEnd);\n streamOffset += marker.frameEnd;\n\n var transferList = [];\n transferList.push(frames);\n\n let msg = { \"type\": \"F2DSTREAM\",\n \"frames\": frames,\n \"finalFrame\": false\n };\n\n if (f2dSize)\n msg.progress = streamOffset / f2dSize;\n\n if (!sentMetadata) {\n msg.manifest = manifest;\n msg.metadata = metadata;\n msg.f2dSize = f2dSize;\n msg.basePath = loadContext.basePath;\n sentMetadata = true;\n }\n\n _this.postMessage(msg, transferList);\n\n }\n } catch (e) {\n _this.debug(e);\n }\n }\n\n function onData(partial) {\n accumulateData(partial);\n processData();\n }\n\n requestSucceeded = onSuccess;\n dataReceived = onData;\n // check to see if the primary graphics request has received any data\n if (accumulatedBytes > 0)\n processData();\n // check to see if primary graphics request succeeded\n if (responseData != null)\n onSuccess(responseData);\n }\n}\n\nfunction register(workerMain) {\n workerMain.register(\"STREAM_F2D\", { doOperation: doStreamF2D });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvRjJkU3RyZWFtV29ya2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBYTs7QUFFK0I7QUFDSztBQUNKO0FBQ21CO0FBQ0E7QUFDNUI7OztBQUdwQyxJQUFJTyx5QkFBeUIsR0FBRyxJQUFJOztBQUVwQyxTQUFTQyxjQUFjQSxDQUFDQyxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUFFO0VBQ3RELElBQUlDLEdBQUcsR0FBR0gsV0FBVyxDQUFDSSxRQUFRLEdBQUdILFFBQVE7RUFDekNWLG9EQUFjLENBQUNjLE9BQU8sQ0FBQ0wsV0FBVyxFQUFFRyxHQUFHLEVBQUVELFNBQVMsRUFBRSxJQUFJLENBQUM7QUFDN0Q7O0FBRUE7QUFDQSxTQUFTSSxXQUFXQSxDQUFDTixXQUFXLEVBQUU7O0VBRTlCLElBQUlPLEtBQUssR0FBR1AsV0FBVyxDQUFDUSxNQUFNOztFQUU5QkQsS0FBSyxDQUFDRSxXQUFXLENBQUMsRUFBQ0MsUUFBUSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQzs7RUFFcEM7RUFDQSxJQUFJQyxRQUFRO0VBQ1osSUFBSUMsUUFBUTtFQUNaLElBQUlDLFNBQVMsR0FBRyxDQUFDOztFQUVqQixJQUFJQyxpQkFBaUIsR0FBRyxJQUFJQyxVQUFVLENBQUMsS0FBSyxDQUFDO0VBQzdDLElBQUlDLGdCQUFnQixHQUFHLENBQUM7RUFDeEIsSUFBSUMsWUFBWSxHQUFHLElBQUk7O0VBRXZCLFNBQVNDLGNBQWNBLENBQUNDLE9BQU8sRUFBRTtJQUM3QjtJQUNBLElBQUlMLGlCQUFpQixDQUFDTSxNQUFNLEdBQUdELE9BQU8sQ0FBQ0MsTUFBTSxHQUFHSixnQkFBZ0IsRUFBRTtNQUM5RCxJQUFJSyxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDVCxpQkFBaUIsQ0FBQ00sTUFBTSxHQUFHLENBQUMsRUFBRUQsT0FBTyxDQUFDQyxNQUFNLEdBQUdKLGdCQUFnQixDQUFDO01BQ3RGLElBQUlR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VUFDbkIsQ0FBQzs7VUFFRCxJQUFJMUIsT0FBTztVQUNQWSxHQUFHLENBQUM1QyxRQUFRLEdBQUcwQyxZQUFZLEdBQUdWLE9BQU87O1VBRXpDLElBQUksQ0FBQ1csWUFBWSxFQUFFO1lBQ2ZDLEdBQUcsQ0FBQzFDLFFBQVEsR0FBR0EsUUFBUTtZQUN2QjBDLEdBQUcsQ0FBQzNDLFFBQVEsR0FBR0EsUUFBUTtZQUN2QjJDLEdBQUcsQ0FBQ1osT0FBTyxHQUFHQSxPQUFPO1lBQ3JCWSxHQUFHLENBQUNsRCxRQUFRLEdBQUdKLFdBQVcsQ0FBQ0ksUUFBUTtZQUNuQ2lELFlBQVksR0FBRyxJQUFJO1VBQ3ZCOztVQUVBOUMsS0FBSyxDQUFDRSxXQUFXLENBQUM2QyxHQUFHLEVBQUVPLFlBQVksQ0FBQzs7UUFFeEM7TUFDSixDQUFDLENBQUMsT0FBT3pCLENBQUMsRUFBRTtRQUNSN0IsS0FBSyxDQUFDZ0QsS0FBSyxDQUFDbkIsQ0FBQyxDQUFDO01BQ2xCO0lBQ0o7O0lBRUEsU0FBU2lDLE1BQU1BLENBQUNsRCxPQUFPLEVBQUU7TUFDckJELGNBQWMsQ0FBQ0MsT0FBTyxDQUFDO01BQ3ZCNEMsV0FBVyxDQUFDLENBQUM7SUFDakI7O0lBRUFsQyxnQkFBZ0IsR0FBRzNCLFNBQVM7SUFDNUIwQixZQUFZLEdBQUd5QyxNQUFNO0lBQ3JCO0lBQ0EsSUFBSXJELGdCQUFnQixHQUFHLENBQUM7SUFDcEIrQyxXQUFXLENBQUMsQ0FBQztJQUNqQjtJQUNBLElBQUk5QyxZQUFZLElBQUksSUFBSTtJQUNwQmYsU0FBUyxDQUFDZSxZQUFZLENBQUM7RUFDL0I7QUFDSjs7QUFFTyxTQUFTcUQsUUFBUUEsQ0FBQ0MsVUFBVSxFQUFFO0VBQ2pDQSxVQUFVLENBQUNELFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRUUsV0FBVyxFQUFFbEUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNuRSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvd29ya2Vycy9GMmRTdHJlYW1Xb3JrZXIuanM/OTNhOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgVmlld2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vbmV0L1hoclwiO1xuaW1wb3J0IHsgRjJEUHJvYmUgfSBmcm9tIFwiLi4vbG12dGsvZjJkL0YyZFByb2JlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vbG9nZ2VyL0xvZ2dlclwiO1xuaW1wb3J0IHsgdXRmOEFycmF5VG9TdHJpbmcgfSBmcm9tIFwiLi4vbG12dGsvY29tbW9uL1N0cmluZ1V0aWxzXCI7XG5pbXBvcnQgeyBlcnJvckNvZGVTdHJpbmcsIEVycm9yQ29kZXMgfSBmcm9tIFwiLi4vbmV0L0Vycm9yQ29kZXNcIjtcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICdmZmxhdGUnO1xuXG5cbnZhciBFTkFCTEVfRjJEX1NUUkVBTUlOR19NT0RFID0gdHJ1ZTtcblxuZnVuY3Rpb24gcmVxdWVzdEZpbGVGMkQobG9hZENvbnRleHQsIGZpbGVuYW1lLCBvblN1Y2Nlc3MpIHtcbiAgICB2YXIgdXJsID0gbG9hZENvbnRleHQuYmFzZVBhdGggKyBmaWxlbmFtZTtcbiAgICBWaWV3aW5nU2VydmljZS5nZXRJdGVtKGxvYWRDb250ZXh0LCB1cmwsIG9uU3VjY2VzcywgbnVsbCk7XG59XG5cbi8vIFN0cmVhbSBsb2FkaW5nIGYyZCBkYXRhIGFuZCBwcmVwYXJlIHBhcnNlYWJsZSBkYXRhIGZyYW1lcy5cbmZ1bmN0aW9uIGRvU3RyZWFtRjJEKGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICBfdGhpcy5wb3N0TWVzc2FnZSh7cHJvZ3Jlc3M6MC4wMX0pOyAvL1RlbGwgdGhlIG1haW4gdGhyZWFkIHdlIGFyZSBhbGl2ZVxuXG4gICAgLy9HZXQgdGhlIG1ldGFkYXRhIGFuZCBtYW5pZmVzdCBmaXJzdC5cbiAgICB2YXIgbWV0YWRhdGE7XG4gICAgdmFyIG1hbmlmZXN0O1xuICAgIHZhciBkb25lRmlsZXMgPSAwO1xuXG4gICAgdmFyIGFjY3VtdWxhdGVkU3RyZWFtID0gbmV3IFVpbnQ4QXJyYXkoNjU1MzYpO1xuICAgIHZhciBhY2N1bXVsYXRlZEJ5dGVzID0gMDtcbiAgICB2YXIgcmVzcG9uc2VEYXRhID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVEYXRhKHBhcnRpYWwpIHtcbiAgICAgICAgLy9BZGQgdGhlIG5ldyBieXRlcyB0byB0aGUgYWNjdW11bGF0aW9uIGJ1ZmZlclxuICAgICAgICBpZiAoYWNjdW11bGF0ZWRTdHJlYW0ubGVuZ3RoIDwgcGFydGlhbC5sZW5ndGggKyBhY2N1bXVsYXRlZEJ5dGVzKSB7XG4gICAgICAgICAgICB2YXIgbmV3bGVuID0gTWF0aC5tYXgoYWNjdW11bGF0ZWRTdHJlYW0ubGVuZ3RoICogMiwgcGFydGlhbC5sZW5ndGggKyBhY2N1bXVsYXRlZEJ5dGVzKTtcbiAgICAgICAgICAgIHZhciBucyA9IG5ldyBVaW50OEFycmF5KG5ld2xlbik7XG4gICAgICAgICAgICBucy5zZXQoYWNjdW11bGF0ZWRTdHJlYW0pO1xuICAgICAgICAgICAgYWNjdW11bGF0ZWRTdHJlYW0gPSBucztcbiAgICAgICAgfVxuICAgICAgICBhY2N1bXVsYXRlZFN0cmVhbS5zZXQocGFydGlhbCwgYWNjdW11bGF0ZWRCeXRlcyk7XG4gICAgICAgIGFjY3VtdWxhdGVkQnl0ZXMgKz0gcGFydGlhbC5sZW5ndGg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFya1N1Y2NlZWRlZChyZXNwb25zZSkge1xuICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YVJlY2VpdmVkID0gYWNjdW11bGF0ZURhdGE7XG4gICAgdmFyIHJlcXVlc3RTdWNjZWVkZWQgPSBtYXJrU3VjY2VlZGVkO1xuXG4gICAgLy8gU3RhcnQgdGhlIHJlcXVlc3QgZm9yIHRoZSBwcmltYXJ5IGdyYXBoaWNzXG4gICAgLy8gSnVzdCBhY2N1bXVsYXRlIGRhdGEgYXMgaXQgY29tZXMgaW4sIGFuZCByZW1lbWJlciByZXNwb25zZVxuICAgIC8vIHdoZW4gaXQgc3VjY2VlZHMuIFRoZSBkYXRhUmVjZWl2ZWQgYW5kIHJlcXVlc3RTdWNjZWVkZWRcbiAgICAvLyB2YXJpYWJsZXMgYXJlIGNoYW5nZWQgdG8gb3RoZXIgZnVuY3Rpb25zIG9uY2UgdGhlIG1hbmlmZXN0XG4gICAgLy8gYW5kIG1ldGFkYXRhIGFyZSByZWFkLlxuICAgIFZpZXdpbmdTZXJ2aWNlLmdldEl0ZW0obG9hZENvbnRleHQsIGxvYWRDb250ZXh0LnVybCwgZnVuY3Rpb24ocmVzcG9uc2VEYXRhKSB7XG4gICAgICAgICAgICByZXF1ZXN0U3VjY2VlZGVkKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgIH0sIGxvYWRDb250ZXh0Lm9uRmFpbHVyZUNhbGxiYWNrLCB7XG4gICAgICAgICAgICBvbmRhdGE6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICAgICAgICAgICAgICBkYXRhUmVjZWl2ZWQocGFydGlhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcIlwiXG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgcmVxdWVzdEZpbGVGMkQobG9hZENvbnRleHQsIFwibWV0YWRhdGEuanNvbi5nelwiLCBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtZXRhZGF0YSA9IEpTT04ucGFyc2UodXRmOEFycmF5VG9TdHJpbmcoZGF0YSkpO1xuICAgICAgICAgICAgZG9uZUZpbGVzKys7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHNlbGYucmFpc2VFcnJvcihcbiAgICAgICAgICAgICAgICBFcnJvckNvZGVzLkJBRF9EQVRBLFxuICAgICAgICAgICAgICAgIFwiXCIgLyogZG9lcyBub3QgbWF0dGVyIHdoYXQgc3RyaW5ncyB3ZSBwdXQgaGVyZSBzaW5jZSB0aGUgZmluYWwgdXNlciBmYWNpbmcgZXJyb3IgbWVzc2FnZSBpcyBzb2xlbHkgZGVjaWRlZFxuICAgICAgICAgICAgICAgIGJ5IEVycm9yQ29kZXMuIEludmVudCBhbm90aGVyIGNvZGUgaWYgd2Ugd2FudCBhIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgZXJyb3IuICovXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvbmVGaWxlcyA9PT0gMilcbiAgICAgICAgICAgIGRvU3RyZWFtRjJEX0NvbnRpbnVlZChsb2FkQ29udGV4dCwgbWFuaWZlc3QsIG1ldGFkYXRhKTtcbiAgICB9KTtcbiAgICByZXF1ZXN0RmlsZUYyRChsb2FkQ29udGV4dCwgXCJtYW5pZmVzdC5qc29uLmd6XCIsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChkYXRhKVxuICAgICAgICAgICAgICAgIG1hbmlmZXN0ID0gSlNPTi5wYXJzZSh1dGY4QXJyYXlUb1N0cmluZyhkYXRhKSk7XG4gICAgICAgICAgICAvL1RoZSBGMkQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbmVlZCBhIG1hbmlmZXN0IGZpbGUgdG8gbG9hZCAoc29tZSBvbGQgRjJEcyBkb24ndCBoYXZlIHRoYXQpXG4gICAgICAgICAgICBkb25lRmlsZXMrKztcbiAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICBpZiAoZG9uZUZpbGVzID09PSAyKVxuICAgICAgICAgICAgZG9TdHJlYW1GMkRfQ29udGludWVkKGxvYWRDb250ZXh0LCBtYW5pZmVzdCwgbWV0YWRhdGEpO1xuICAgIH0pO1xuXG4gICAgLy9Mb2FkcyB0aGUgRjJEIHN0cmVhbSBvbmNlIHRoZSBtZXRhZGF0YSBhbmQgbWFuaWZlc3QgZmlsZXMgYXJlIGZldGNoZWRcbiAgICBmdW5jdGlvbiBkb1N0cmVhbUYyRF9Db250aW51ZWQobG9hZENvbnRleHQsIG1hbmlmZXN0LCBtZXRhZGF0YSkge1xuXG4gICAgICAgIHZhciBfdGhpcyA9IGxvYWRDb250ZXh0LndvcmtlcjtcblxuICAgICAgICB2YXIgdXJsID0gbG9hZENvbnRleHQudXJsO1xuXG4gICAgICAgIC8vIENvbGxlY3QgYXNzZXQgdXJscyB0aGF0IHRvIGJlIHNlbmQgdG8gbWFpbiB0aHJlYWQgZm9yIG1vYmlsZSB1c2FnZS5cbiAgICAgICAgdmFyIGFzc2V0cyA9IFtdO1xuXG4gICAgICAgIHZhciBmMmRTaXplID0gMDtcbiAgICAgICAgdmFyIGFsdFNpemUgPSAwO1xuICAgICAgICBpZiAobWFuaWZlc3QgJiYgbWFuaWZlc3QuYXNzZXRzKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG1hbmlmZXN0LmFzc2V0cztcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKGFbaV0uVVJJKSAhPSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBmMmRTaXplID0gYVtpXS51c2l6ZSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbaV0udHlwZSA9PSBcIkF1dG9kZXNrLkNsb3VkUGxhdGZvcm0uRjJEXCIpXG4gICAgICAgICAgICAgICAgICAgIGFsdFNpemUgPSBhW2ldLnVzaXplIHx8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYyZFNpemUgPT0gMCAmJiBhbHRTaXplID4gMClcbiAgICAgICAgICAgIGYyZFNpemUgPSBhbHRTaXplO1xuXG4gICAgICAgIHZhciBwcm9iZSA9IG5ldyBGMkRQcm9iZSgpO1xuXG4gICAgICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgICAgIHZhciBzdHJlYW1PZmZzZXQgPSAwO1xuICAgICAgICB2YXIgc2VudE1ldGFkYXRhID0gZmFsc2U7XG5cbiAgICAgICAgZnVuY3Rpb24gb25TdWNjZXNzKHJlc3BvbnNlRGF0YSkge1xuICAgICAgICAgICAgLy8gU2VuZCBjb2xsZWN0ZWQgZjJkIHJlc291cmNlIHVybHMgdG8gbWFpbiB0aHJlYWQuXG4gICAgICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7XCJ0eXBlXCIgOiBcIkYyREFzc2V0VVJMXCIsIFwidXJsc1wiIDogYXNzZXRzfSk7XG4gICAgICAgICAgICBhc3NldHMgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoRU5BQkxFX0YyRF9TVFJFQU1JTkdfTU9ERSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1zZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCIgOiBcIkYyRFNUUkVBTVwiLFxuICAgICAgICAgICAgICAgICAgICBcImZpbmFsRnJhbWVcIiA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwiZmluaXNoZWRcIiA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwicHJvZ3Jlc3NcIiA6IDFcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzZW50TWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLm1hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICAgICAgICAgICAgICBtc2cuYmFzZVBhdGggPSBsb2FkQ29udGV4dC5iYXNlUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgbXNnLmYyZFNpemUgPSBmMmRTaXplO1xuICAgICAgICAgICAgICAgICAgICBzZW50TWV0YWRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIF90aGlzLmRlYnVnKFwiVG90YWwgdGV4dCBieXRlcyBjb3VudCA6IFwiICsgcmVzcG9uc2VEYXRhLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZShtc2cpO1xuXG4gICAgICAgICAgICAgICAgLy9TdHJlYW1pbmcgY29kZSBwYXRoIGVuZHMgaGVyZSAtLSB3ZSBoYXZlIGFscmVhZHkgc2VudFxuICAgICAgICAgICAgICAgIC8vdGhlIGRhdGEgYmFjayBmcm9tIHRoZSBwcm9ncmVzcyBjYWxsYmFja1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9Ob24tc3RyZWFtaW5nIGNvZGUgcGF0aCBoZXJlXG4gICAgICAgICAgICBpZiAoYWNjdW11bGF0ZWRTdHJlYW0ubGVuZ3RoID4gYWNjdW11bGF0ZWRCeXRlcylcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZFN0cmVhbSA9IG5ldyBVaW50OEFycmF5KGFjY3VtdWxhdGVkU3RyZWFtLmJ1ZmZlci5zbGljZSgwLCBhY2N1bXVsYXRlZEJ5dGVzKSk7XG5cbiAgICAgICAgICAgIHZhciB2aWV3O1xuICAgICAgICAgICAgaWYgKGFjY3VtdWxhdGVkU3RyZWFtWzBdID09IDMxICYmIGFjY3VtdWxhdGVkU3RyZWFtWzFdID09IDEzOSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShhY2N1bXVsYXRlZFN0cmVhbS5idWZmZXIsIDAsIGFjY3VtdWxhdGVkQnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB2aWV3ID0gZ3VuemlwU3luYyh2aWV3KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbXNnID0geyBcInR5cGVcIiA6IFwiRjJEQkxPQlwiLFxuICAgICAgICAgICAgICAgIFwibWV0YWRhdGFcIiA6IG1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIFwibWFuaWZlc3RcIiA6IG1hbmlmZXN0LFxuICAgICAgICAgICAgICAgIFwiZjJkU2l6ZVwiIDogZjJkU2l6ZSxcbiAgICAgICAgICAgICAgICBcImJhc2VQYXRoXCIgOiBsb2FkQ29udGV4dC5iYXNlUGF0aCwgLy8gVE9ETzogd2UgbWlnaHQgYmUgYWJsZSB0byBpbmZlciB0aGlzIGVsc2V3aGVyZS5cbiAgICAgICAgICAgICAgICBcInByb2dyZXNzXCIgOiAxLFxuICAgICAgICAgICAgICAgIFwiYnVmZmVyXCIgOiB2aWV3LmJ1ZmZlcn07XG4gICAgICAgICAgICB2YXIgdHJhbnNmZXJMaXN0ID0gW107XG4gICAgICAgICAgICB0cmFuc2Zlckxpc3QucHVzaCh2aWV3LmJ1ZmZlcik7XG4gICAgICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZShtc2csIHRyYW5zZmVyTGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzRGF0YSgpIHtcblxuICAgICAgICAgICAgaWYgKCFFTkFCTEVfRjJEX1NUUkVBTUlOR19NT0RFKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2ZXJ5IGZpcnN0IHR3byBieXRlcyBvZiB0aGUgZW50aXJlIHN0cmVhbSBpcyBHWklQIG1hZ2ljIG51bWJlcixcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGZhbGwgYmFjayBvbiBub25lIHN0cmVhbWluZyBtb2RlLCBiZWNhdXNlIHN0cmVhbWluZyBtb2RlIG9ubHlcbiAgICAgICAgICAgICAgICAvLyB3b3JrIHdpdGggYnJvd3NlciBkZWNvbXByZXNzaW9uLCBhbmQgdGhlIHByZXNlbmNlIG9mIHN1Y2ggbWFnaWMgbnVtYmVyXG4gICAgICAgICAgICAgICAgLy8gaW1wbGllcyBicm93c2VyIGRlY29tcHJlc3Npb24gZmFpbHMsIGZvciB3aGF0ZXZlciByZWFzb25zLlxuICAgICAgICAgICAgICAgIGlmIChhY2N1bXVsYXRlZFN0cmVhbVswXSA9PSAzMSAmJiBhY2N1bXVsYXRlZFN0cmVhbVsxXSA9PSAxMzkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRjJEIHN0cmVhbWluZyBicm9rZW4gYnkgbm9uLXN0cmVhbWluZyB1bnppcCFcIiwgZXJyb3JDb2RlU3RyaW5nKEVycm9yQ29kZXMuQkFEX0RBVEEpKTtcbiAgICAgICAgICAgICAgICAgICAgRU5BQkxFX0YyRF9TVFJFQU1JTkdfTU9ERSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGFjY3VtdWxhdGVkU3RyZWFtLmJ1ZmZlciwgc3RyZWFtT2Zmc2V0LCBhY2N1bXVsYXRlZEJ5dGVzIC0gc3RyZWFtT2Zmc2V0KTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgbWFya2VyID0gcHJvYmUubG9hZCh2aWV3KTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXJrZXIuZnJhbWVFbmQgPiBtYXJrZXIuZnJhbWVTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVzID0gYWNjdW11bGF0ZWRTdHJlYW0uYnVmZmVyLnNsaWNlKHN0cmVhbU9mZnNldCArIG1hcmtlci5mcmFtZVN0YXJ0LCBzdHJlYW1PZmZzZXQgKyBtYXJrZXIuZnJhbWVFbmQpO1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgKz0gbWFya2VyLmZyYW1lRW5kO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zlckxpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJMaXN0LnB1c2goZnJhbWVzKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgbXNnID0geyBcInR5cGVcIiA6IFwiRjJEU1RSRUFNXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZyYW1lc1wiIDogZnJhbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmaW5hbEZyYW1lXCIgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmMmRTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgbXNnLnByb2dyZXNzID0gc3RyZWFtT2Zmc2V0IC8gZjJkU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbnRNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXNnLm1hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5mMmRTaXplID0gZjJkU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5iYXNlUGF0aCA9IGxvYWRDb250ZXh0LmJhc2VQYXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VudE1ldGFkYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKG1zZywgdHJhbnNmZXJMaXN0KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5kZWJ1ZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9uRGF0YShwYXJ0aWFsKSB7XG4gICAgICAgICAgICBhY2N1bXVsYXRlRGF0YShwYXJ0aWFsKTtcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJlcXVlc3RTdWNjZWVkZWQgPSBvblN1Y2Nlc3M7XG4gICAgICAgIGRhdGFSZWNlaXZlZCA9IG9uRGF0YTtcbiAgICAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSBwcmltYXJ5IGdyYXBoaWNzIHJlcXVlc3QgaGFzIHJlY2VpdmVkIGFueSBkYXRhXG4gICAgICAgIGlmIChhY2N1bXVsYXRlZEJ5dGVzID4gMClcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhKCk7XG4gICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiBwcmltYXJ5IGdyYXBoaWNzIHJlcXVlc3Qgc3VjY2VlZGVkXG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgIT0gbnVsbClcbiAgICAgICAgICAgIG9uU3VjY2VzcyhyZXNwb25zZURhdGEpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHdvcmtlck1haW4pIHtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiU1RSRUFNX0YyRFwiLCB7IGRvT3BlcmF0aW9uOiBkb1N0cmVhbUYyRCB9KTtcbn1cblxuIl0sIm5hbWVzIjpbIlZpZXdpbmdTZXJ2aWNlIiwiRjJEUHJvYmUiLCJsb2dnZXIiLCJ1dGY4QXJyYXlUb1N0cmluZyIsImVycm9yQ29kZVN0cmluZyIsIkVycm9yQ29kZXMiLCJndW56aXBTeW5jIiwiRU5BQkxFX0YyRF9TVFJFQU1JTkdfTU9ERSIsInJlcXVlc3RGaWxlRjJEIiwibG9hZENvbnRleHQiLCJmaWxlbmFtZSIsIm9uU3VjY2VzcyIsInVybCIsImJhc2VQYXRoIiwiZ2V0SXRlbSIsImRvU3RyZWFtRjJEIiwiX3RoaXMiLCJ3b3JrZXIiLCJwb3N0TWVzc2FnZSIsInByb2dyZXNzIiwibWV0YWRhdGEiLCJtYW5pZmVzdCIsImRvbmVGaWxlcyIsImFjY3VtdWxhdGVkU3RyZWFtIiwiVWludDhBcnJheSIsImFjY3VtdWxhdGVkQnl0ZXMiLCJyZXNwb25zZURhdGEiLCJhY2N1bXVsYXRlRGF0YSIsInBhcnRpYWwiLCJsZW5ndGgiLCJuZXdsZW4iLCJNYXRoIiwibWF4IiwibnMiLCJzZXQiLCJtYXJrU3VjY2VlZGVkIiwicmVzcG9uc2UiLCJkYXRhUmVjZWl2ZWQiLCJyZXF1ZXN0U3VjY2VlZGVkIiwib25GYWlsdXJlQ2FsbGJhY2siLCJvbmRhdGEiLCJyZXNwb25zZVR5cGUiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwiZSIsInNlbGYiLCJyYWlzZUVycm9yIiwiQkFEX0RBVEEiLCJkb1N0cmVhbUYyRF9Db250aW51ZWQiLCJhc3NldHMiLCJmMmRTaXplIiwiYWx0U2l6ZSIsImEiLCJpIiwiaW5kZXhPZiIsIlVSSSIsInVzaXplIiwidHlwZSIsInByb2JlIiwiZmlyc3QiLCJzdHJlYW1PZmZzZXQiLCJzZW50TWV0YWRhdGEiLCJtc2ciLCJkZWJ1ZyIsImJ1ZmZlciIsInNsaWNlIiwidmlldyIsImNvbnNvbGUiLCJlcnJvciIsInRyYW5zZmVyTGlzdCIsInB1c2giLCJwcm9jZXNzRGF0YSIsIm1hcmtlciIsImxvYWQiLCJmcmFtZUVuZCIsImZyYW1lU3RhcnQiLCJmcmFtZXMiLCJvbkRhdGEiLCJyZWdpc3RlciIsIndvcmtlck1haW4iLCJkb09wZXJhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/F2dStreamWorker.js\n"); /***/ }), /***/ "./src/file-loaders/workers/GeomWorker.js": /*!************************************************!*\ !*** ./src/file-loaders/workers/GeomWorker.js ***! \************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _lmvtk_common_PackReader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lmvtk/common/PackReader */ \"./src/file-loaders/lmvtk/common/PackReader.js\");\n/* harmony import */ var _lmvtk_svf_Geoms__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lmvtk/svf/Geoms */ \"./src/file-loaders/lmvtk/svf/Geoms.js\");\n/* harmony import */ var _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../net/ErrorCodes */ \"./src/file-loaders/net/ErrorCodes.js\");\n/* harmony import */ var _net_Xhr__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../net/Xhr */ \"./src/file-loaders/net/Xhr.js\");\n/* harmony import */ var _wgs_scene_DeriveTopology__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../wgs/scene/DeriveTopology */ \"./src/wgs/scene/DeriveTopology.js\");\n\n\n\n\n\n\nfunction guardFunction(loadContext, f) {\n try {\n f();\n }\n catch (exc) {\n loadContext.raiseError(\n _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__.ErrorCodes.BAD_DATA, \"Unhandled exception while reading pack file\",\n { \"url\": loadContext.url, \"exception\": exc.toString(), \"stack\": exc.stack });\n }\n}\n\nfunction doGeomLoad(loadContext) {\n\n var _this = loadContext.worker;\n\n //Make a blocking request -- it's ok, because\n //we are in a worker thread.\n\n function onSuccess(arrayBuffer) {\n _this.postMessage({\n url: loadContext.url,\n workerId: loadContext.workerId,\n progress: 0.5\n }); //rough progress reporting -- can do better\n\n guardFunction(loadContext, function () {\n\n var pfr=n ew _lmvtk_common_PackReader__WEBPACK_IMPORTED_MODULE_0__.PackFileReader(arrayBuffer);\n\n var raisedError=f alse;\n\n var options={ \n estimateSizeOnly: true,\n packNormals: typeof loadContext.packNormals !==\ "undefined\" ? loadContext.packNormals : true\n };\n\n var i,iEnd=p fr.getEntryCounts(),mesh;\n var skip=l oadContext.inMemory || [];\n var estLength=0 ;\n var shouldReadNext=f unction (i) {\n var v=s kip[i>> 5];\n return !v || !(v & 1 << (i & 31));\n };\n\n for (i=0 ; i < iEnd; i++)\n {\n if (shouldReadNext(i)) {\n mesh=( 0,_lmvtk_svf_Geoms__WEBPACK_IMPORTED_MODULE_1__.readGeometry)(pfr, i, options);\n estLength +=m esh && mesh.sharedBufferBytes || 0;\n }\n }\n\n var sharedBuffer=e stLength ? new ArrayBuffer(estLength) : null;\n var currentOffset=0 ;\n\n var msg={ \ "packId\": loadContext.packId,\n \ "workerId\": loadContext.workerId,\n \ "progress\": 1,\n \ "meshes\": [],\n \ "sharedBuffer\": sharedBuffer\n };\n\n var transferList=s haredBuffer ? [sharedBuffer] : [];\n\n options={ \n dstBuffer: sharedBuffer,\n startOffset: 0,\n estimateSizeOnly: false,\n packNormals: typeof loadContext.packNormals !==\ "undefined\" ? loadContext.packNormals : true\n };\n\n for (i=0 ; i < iEnd; i++)\n {\n options.startOffset=c urrentOffset;\n\n if (shouldReadNext(i)) {\n mesh=( 0,_lmvtk_svf_Geoms__WEBPACK_IMPORTED_MODULE_1__.readGeometry)(pfr, i, options);\n\n if (mesh) {\n currentOffset +=m esh.sharedBufferBytes || 0;\n msg.meshes[i]=m esh;\n\n if (loadContext.createWireframe) {\n (0,_wgs_scene_DeriveTopology__WEBPACK_IMPORTED_MODULE_4__.createWireframe)(mesh);\n\n //TODO: optimize the storage of the lines index buffer to use\n //a single shared buffer for all meshes in the pack\n if (mesh.iblines)\n transferList.push(mesh.iblines.buffer);\n }\n } else {\n // it doesn 't make much sense to raise an error for each entry that can't\n // be read, because chances are they will all be unreadable after the\n // first bad one.\n if (!raisedError) {\n _this.raiseError(\n _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_2__.ErrorCodes.BAD_DATA, \ "Unable to load geometry\",\n { \ "url\": loadContext.url });\n raisedError=t rue;\n }\n\n // in this case, we still post the full message instead of just null;\n // the mesh itself will be null, of course.\n _this.postMessage(msg);\n }\n }\n }\n\n _this.postMessage(msg, transferList);\n });\n\n }\n\n // With this option to control whether want to record assets request.\n var options={ \n skipAssetCallback: loadContext.skipAssetCallback\n };\n _net_Xhr__WEBPACK_IMPORTED_MODULE_3__.ViewingService.getItem(loadContext, loadContext.url, onSuccess, loadContext.onFailureCallback, options);\n\n}\n\nfunction register(workerMain) {\n workerMain.register(\ "LOAD_GEOMETRY\", { doOperation: doGeomLoad });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WUFDQVIsS0FBSyxDQUFDSSxXQUFXLENBQUNxQixHQUFHLENBQUM7VUFDMUI7UUFDSjtNQUNKOztNQUVBekIsS0FBSyxDQUFDSSxXQUFXLENBQUNxQixHQUFHLEVBQUVFLFlBQVksQ0FBQztJQUN4QyxDQUFDLENBQUM7O0VBRU47O0VBRUE7RUFDQSxJQUFJbEIsT0FBTyxHQUFHO0lBQ1Z5QixpQkFBaUIsRUFBRTNDLFdBQVcsQ0FBQzJDO0VBQ25DLENBQUM7RUFDRDlDLG9EQUFjLENBQUMrQyxPQUFPLENBQUM1QyxXQUFXLEVBQUVBLFdBQVcsQ0FBQ0ssR0FBRyxFQUFFTSxTQUFTLEVBQUVYLFdBQVcsQ0FBQzZDLGlCQUFpQixFQUFFM0IsT0FBTyxDQUFDOztBQUUzRzs7QUFFTyxTQUFTNEIsUUFBUUEsQ0FBQ0MsVUFBVSxFQUFFO0VBQ2pDQSxVQUFVLENBQUNELFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRUUsV0FBVyxFQUFFeEMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNyRSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvd29ya2Vycy9HZW9tV29ya2VyLmpzPzNiZDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFja0ZpbGVSZWFkZXIgfSBmcm9tICcuLi9sbXZ0ay9jb21tb24vUGFja1JlYWRlcic7XG5pbXBvcnQgeyByZWFkR2VvbWV0cnkgfSBmcm9tICcuLi9sbXZ0ay9zdmYvR2VvbXMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL25ldC9FcnJvckNvZGVzJztcbmltcG9ydCB7IFZpZXdpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vbmV0L1hocic7XG5pbXBvcnQgeyBjcmVhdGVXaXJlZnJhbWUgfSBmcm9tIFwiLi4vLi4vd2dzL3NjZW5lL0Rlcml2ZVRvcG9sb2d5XCI7XG5cbmZ1bmN0aW9uIGd1YXJkRnVuY3Rpb24obG9hZENvbnRleHQsIGYpIHtcbiAgICB0cnkge1xuICAgICAgICBmKCk7XG4gICAgfVxuICAgIGNhdGNoIChleGMpIHtcbiAgICAgICAgbG9hZENvbnRleHQucmFpc2VFcnJvcihcbiAgICAgICAgICAgIEVycm9yQ29kZXMuQkFEX0RBVEEsIFwiVW5oYW5kbGVkIGV4Y2VwdGlvbiB3aGlsZSByZWFkaW5nIHBhY2sgZmlsZVwiLFxuICAgICAgICAgICAgeyBcInVybFwiOiBsb2FkQ29udGV4dC51cmwsIFwiZXhjZXB0aW9uXCI6IGV4Yy50b1N0cmluZygpLCBcInN0YWNrXCI6IGV4Yy5zdGFjayB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRvR2VvbUxvYWQobG9hZENvbnRleHQpIHtcblxuICAgIHZhciBfdGhpcyA9IGxvYWRDb250ZXh0LndvcmtlcjtcblxuICAgIC8vTWFrZSBhIGJsb2NraW5nIHJlcXVlc3QgLS0gaXQncyBvaywgYmVjYXVzZVxuICAgIC8vd2UgYXJlIGluIGEgd29ya2VyIHRocmVhZC5cblxuICAgIGZ1bmN0aW9uIG9uU3VjY2VzcyhhcnJheUJ1ZmZlcikge1xuICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICB1cmw6IGxvYWRDb250ZXh0LnVybCxcbiAgICAgICAgICAgIHdvcmtlcklkOiBsb2FkQ29udGV4dC53b3JrZXJJZCxcbiAgICAgICAgICAgIHByb2dyZXNzOiAwLjVcbiAgICAgICAgfSk7IC8vcm91Z2ggcHJvZ3Jlc3MgcmVwb3J0aW5nIC0tIGNhbiBkbyBiZXR0ZXJcblxuICAgICAgICBndWFyZEZ1bmN0aW9uKGxvYWRDb250ZXh0LCBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgdmFyIHBmciA9IG5ldyBQYWNrRmlsZVJlYWRlcihhcnJheUJ1ZmZlcik7XG5cbiAgICAgICAgICAgIHZhciByYWlzZWRFcnJvciA9IGZhbHNlO1xuXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBlc3RpbWF0ZVNpemVPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHBhY2tOb3JtYWxzOiAodHlwZW9mIGxvYWRDb250ZXh0LnBhY2tOb3JtYWxzICE9PSBcInVuZGVmaW5lZFwiKSA/IGxvYWRDb250ZXh0LnBhY2tOb3JtYWxzIDogdHJ1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIGksIGlFbmQgPSBwZnIuZ2V0RW50cnlDb3VudHMoKSwgbWVzaDtcbiAgICAgICAgICAgIHZhciBza2lwID0gbG9hZENvbnRleHQuaW5NZW1vcnkgfHwgW107XG4gICAgICAgICAgICB2YXIgZXN0TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIHZhciBzaG91bGRSZWFkTmV4dCA9IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHNraXBbaSA+PiA1XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXYgfHwgISh2ICYgKDEgPDwgKGkgJiAzMSkpKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGk8aUVuZDsgaSsrKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZWFkTmV4dChpKSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNoID0gcmVhZEdlb21ldHJ5KHBmciwgaSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGVzdExlbmd0aCArPSAoKG1lc2ggJiYgbWVzaC5zaGFyZWRCdWZmZXJCeXRlcykgfHwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc2hhcmVkQnVmZmVyID0gZXN0TGVuZ3RoPyBuZXcgQXJyYXlCdWZmZXIoZXN0TGVuZ3RoKSA6IG51bGw7XG4gICAgICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IDA7XG5cbiAgICAgICAgICAgIHZhciBtc2cgPSB7IFwicGFja0lkXCI6IGxvYWRDb250ZXh0LnBhY2tJZCxcbiAgICAgICAgICAgICAgICBcIndvcmtlcklkXCIgOiBsb2FkQ29udGV4dC53b3JrZXJJZCxcbiAgICAgICAgICAgICAgICBcInByb2dyZXNzXCI6IDEsXG4gICAgICAgICAgICAgICAgXCJtZXNoZXNcIiA6IFtdLFxuICAgICAgICAgICAgICAgIFwic2hhcmVkQnVmZmVyXCI6IHNoYXJlZEJ1ZmZlclxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHRyYW5zZmVyTGlzdCA9IHNoYXJlZEJ1ZmZlciA/IFtzaGFyZWRCdWZmZXJdIDogW107XG5cbiAgICAgICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgZHN0QnVmZmVyOiBzaGFyZWRCdWZmZXIsXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgZXN0aW1hdGVTaXplT25seTogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGFja05vcm1hbHM6ICh0eXBlb2YgbG9hZENvbnRleHQucGFja05vcm1hbHMgIT09IFwidW5kZWZpbmVkXCIpID8gbG9hZENvbnRleHQucGFja05vcm1hbHMgOiB0cnVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpPGlFbmQ7IGkrKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXJ0T2Zmc2V0ID0gY3VycmVudE9mZnNldDtcblxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZWFkTmV4dChpKSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNoID0gcmVhZEdlb21ldHJ5KHBmciwgaSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gKG1lc2guc2hhcmVkQnVmZmVyQnl0ZXMgfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtc2cubWVzaGVzW2ldID0gbWVzaDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRDb250ZXh0LmNyZWF0ZVdpcmVmcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVdpcmVmcmFtZShtZXNoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogb3B0aW1pemUgdGhlIHN0b3JhZ2Ugb2YgdGhlIGxpbmVzIGluZGV4IGJ1ZmZlciB0byB1c2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Egc2luZ2xlIHNoYXJlZCBidWZmZXIgZm9yIGFsbCBtZXNoZXMgaW4gdGhlIHBhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzaC5pYmxpbmVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zlckxpc3QucHVzaChtZXNoLmlibGluZXMuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIHJhaXNlIGFuIGVycm9yIGZvciBlYWNoIGVudHJ5IHRoYXQgY2FuJ3RcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHJlYWQsIGJlY2F1c2UgY2hhbmNlcyBhcmUgdGhleSB3aWxsIGFsbCBiZSB1bnJlYWRhYmxlIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgYmFkIG9uZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmFpc2VkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yYWlzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGVzLkJBRF9EQVRBLCBcIlVuYWJsZSB0byBsb2FkIGdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJ1cmxcIjogbG9hZENvbnRleHQudXJsIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSwgd2Ugc3RpbGwgcG9zdCB0aGUgZnVsbCBtZXNzYWdlIGluc3RlYWQgb2YganVzdCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1lc2ggaXRzZWxmIHdpbGwgYmUgbnVsbCwgb2YgY291cnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UobXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UobXNnLCB0cmFuc2Zlckxpc3QpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8vIFdpdGggdGhpcyBvcHRpb24gdG8gY29udHJvbCB3aGV0aGVyIHdhbnQgdG8gcmVjb3JkIGFzc2V0cyByZXF1ZXN0LlxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBza2lwQXNzZXRDYWxsYmFjazogbG9hZENvbnRleHQuc2tpcEFzc2V0Q2FsbGJhY2tcbiAgICB9O1xuICAgIFZpZXdpbmdTZXJ2aWNlLmdldEl0ZW0obG9hZENvbnRleHQsIGxvYWRDb250ZXh0LnVybCwgb25TdWNjZXNzLCBsb2FkQ29udGV4dC5vbkZhaWx1cmVDYWxsYmFjaywgb3B0aW9ucyk7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHdvcmtlck1haW4pIHtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiTE9BRF9HRU9NRVRSWVwiLCB7IGRvT3BlcmF0aW9uOiBkb0dlb21Mb2FkIH0pO1xufVxuIl0sIm5hbWVzIjpbIlBhY2tGaWxlUmVhZGVyIiwicmVhZEdlb21ldHJ5IiwiRXJyb3JDb2RlcyIsIlZpZXdpbmdTZXJ2aWNlIiwiY3JlYXRlV2lyZWZyYW1lIiwiZ3VhcmRGdW5jdGlvbiIsImxvYWRDb250ZXh0IiwiZiIsImV4YyIsInJhaXNlRXJyb3IiLCJCQURfREFUQSIsInVybCIsInRvU3RyaW5nIiwic3RhY2siLCJkb0dlb21Mb2FkIiwiX3RoaXMiLCJ3b3JrZXIiLCJvblN1Y2Nlc3MiLCJhcnJheUJ1ZmZlciIsInBvc3RNZXNzYWdlIiwid29ya2VySWQiLCJwcm9ncmVzcyIsInBmciIsInJhaXNlZEVycm9yIiwib3B0aW9ucyIsImVzdGltYXRlU2l6ZU9ubHkiLCJwYWNrTm9ybWFscyIsImkiLCJpRW5kIiwiZ2V0RW50cnlDb3VudHMiLCJtZXNoIiwic2tpcCIsImluTWVtb3J5IiwiZXN0TGVuZ3RoIiwic2hvdWxkUmVhZE5leHQiLCJ2Iiwic2hhcmVkQnVmZmVyQnl0ZXMiLCJzaGFyZWRCdWZmZXIiLCJBcnJheUJ1ZmZlciIsImN1cnJlbnRPZmZzZXQiLCJtc2ciLCJwYWNrSWQiLCJ0cmFuc2Zlckxpc3QiLCJkc3RCdWZmZXIiLCJzdGFydE9mZnNldCIsIm1lc2hlcyIsImlibGluZXMiLCJwdXNoIiwiYnVmZmVyIiwic2tpcEFzc2V0Q2FsbGJhY2siLCJnZXRJdGVtIiwib25GYWlsdXJlQ2FsbGJhY2siLCJyZWdpc3RlciIsIndvcmtlck1haW4iLCJkb09wZXJhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/GeomWorker.js\n "); /***/ }), /***/ "./src/file-loaders/workers/MainWorker-web.js ": /*!****************************************************!*\ !*** ./src/file-loaders/workers/MainWorker-web.js ***! \****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _MainWorker__WEBPACK_IMPORTED_MODULE_0__=_ _webpack_require__(/*! ./MainWorker */ \ "./src/file-loaders/workers/MainWorker.js\");\n\n\n//Web worker dispatcher function -- received a message\n//from the main thread and calls the appropriate handler\nself.addEventListener( 'message', function (e) {\n\n var loadContext=e .data;\n loadContext.worker=s elf;\n\n _MainWorker__WEBPACK_IMPORTED_MODULE_0__.workerMain.dispatch(loadContext);\n\n}, false);\n\n\nself.raiseError=f unction (code, msg, args) {\n self.postMessage({ \ "error\": { \ "code\": code, \ "msg\": msg, \ "args\": args } });\n};\n\n// Shared by all workers to output debug message on console of main thread.\nfunction debug(msg) {\n self.postMessage({ debug: 1, message: msg });\n}\n\nself.debug=d ebug;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvTWFpbldvcmtlci13ZWIuanMiLCJtYXBwaW5ncyI6Ijs7QUFBMEM7O0FBRTFDO0FBQ0E7QUFDQUMsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBU0MsQ0FBQyxFQUFFOztFQUV6QyxJQUFJQyxXQUFXLEdBQUdELENBQUMsQ0FBQ0UsSUFBSTtFQUN4QkQsV0FBVyxDQUFDRSxNQUFNLEdBQUdMLElBQUk7O0VBRXpCRCxtREFBVSxDQUFDTyxRQUFRLENBQUNILFdBQVcsQ0FBQzs7QUFFcEMsQ0FBQyxFQUFFLEtBQUssQ0FBQzs7O0FBR1RILElBQUksQ0FBQ08sVUFBVSxHQUFHLFVBQVNDLElBQUksRUFBRUMsR0FBRyxFQUFFQyxJQUFJLEVBQUU7RUFDeENWLElBQUksQ0FBQ1csV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFSCxJQUFJLEVBQUUsS0FBSyxFQUFFQyxHQUFHLEVBQUUsTUFBTSxFQUFFQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUM7QUFDNUUsQ0FBQzs7QUFFRDtBQUNBLFNBQVNFLEtBQUtBLENBQUNILEdBQUcsRUFBRTtFQUNoQlQsSUFBSSxDQUFDVyxXQUFXLENBQUMsRUFBQ0MsS0FBSyxFQUFHLENBQUMsRUFBRUMsT0FBTyxFQUFHSixHQUFHLEVBQUMsQ0FBQztBQUNoRDs7QUFFQVQsSUFBSSxDQUFDWSxLQUFLLEdBQUdBLEtBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvTWFpbldvcmtlci13ZWIuanM/ZmE3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3b3JrZXJNYWluIH0gZnJvbSBcIi4vTWFpbldvcmtlclwiO1xuXG4vL1dlYiB3b3JrZXIgZGlzcGF0Y2hlciBmdW5jdGlvbiAtLSByZWNlaXZlZCBhIG1lc3NhZ2Vcbi8vZnJvbSB0aGUgbWFpbiB0aHJlYWQgYW5kIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyXG5zZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihlKSB7XG5cbiAgICB2YXIgbG9hZENvbnRleHQgPSBlLmRhdGE7XG4gICAgbG9hZENvbnRleHQud29ya2VyID0gc2VsZjtcblxuICAgIHdvcmtlck1haW4uZGlzcGF0Y2gobG9hZENvbnRleHQpO1xuXG59LCBmYWxzZSk7XG5cblxuc2VsZi5yYWlzZUVycm9yID0gZnVuY3Rpb24oY29kZSwgbXNnLCBhcmdzKSB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7IFwiZXJyb3JcIjogeyBcImNvZGVcIjogY29kZSwgXCJtc2dcIjogbXNnLCBcImFyZ3NcIjogYXJncyB9fSk7XG59O1xuXG4vLyBTaGFyZWQgYnkgYWxsIHdvcmtlcnMgdG8gb3V0cHV0IGRlYnVnIG1lc3NhZ2Ugb24gY29uc29sZSBvZiBtYWluIHRocmVhZC5cbmZ1bmN0aW9uIGRlYnVnKG1zZykge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe2RlYnVnIDogMSwgbWVzc2FnZSA6IG1zZ30pO1xufVxuXG5zZWxmLmRlYnVnID0gZGVidWc7XG4iXSwibmFtZXMiOlsid29ya2VyTWFpbiIsInNlbGYiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsImxvYWRDb250ZXh0IiwiZGF0YSIsIndvcmtlciIsImRpc3BhdGNoIiwicmFpc2VFcnJvciIsImNvZGUiLCJtc2ciLCJhcmdzIiwicG9zdE1lc3NhZ2UiLCJkZWJ1ZyIsIm1lc3NhZ2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/MainWorker-web.js\n "); /***/ }), /***/ "./src/file-loaders/workers/MainWorker.js ": /*!************************************************!*\ !*** ./src/file-loaders/workers/MainWorker.js ***! \************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ WorkerMain: ()=> (/* binding */ WorkerMain),\n/* harmony export */ workerMain: () => (/* binding */ workerMain)\n/* harmony export */ });\n/* harmony import */ var _net_Xhr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../net/Xhr */ \"./src/file-loaders/net/Xhr.js\");\n/* harmony import */ var _net_endpoints__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../net/endpoints */ \"./src/file-loaders/net/endpoints.js\");\n\n\n\nclass WorkerMain {\n\n constructor() {\n this._workers = {};\n }\n dispatch(loadContext) {\n\n if (!Object.prototype.hasOwnProperty.call(loadContext, 'operation')) {\n return;\n }\n\n //TODO TS:\n if (loadContext.endpoint)\n _net_endpoints__WEBPACK_IMPORTED_MODULE_1__.endpoint.setEndpointAndApi(loadContext.endpoint, loadContext.api);\n\n\n var target = this._workers[loadContext.operation];\n if (!target)\n return;\n\n //Initialize the path that contains the requested\n //file. It's the root for other relative paths referenced\n //by the base file.\n loadContext.basePath = \"\";\n if (loadContext.url) {\n var lastSlash = loadContext.url.lastIndexOf(\"/\");\n if (lastSlash != -1)\n loadContext.basePath = loadContext.url.substr(0, lastSlash + 1);\n }\n\n // Create the default failure callback.\n //\n loadContext.raiseError = function () {\n loadContext.worker.raiseError.apply(loadContext.worker, arguments);\n };\n loadContext.onFailureCallback = _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.defaultFailureCallback.bind(loadContext);\n\n target.doOperation(loadContext);\n }\n\n register(operation, worker) {\n this._workers[operation] = worker;\n }\n\n unregister(operation) {\n delete this._workers[operation];\n }\n}\n\nlet workerMain = new WorkerMain();\n\n//Add all the worker entry points.\n//Those need to execute in order to register themselves\n//with the web worker operation dispatcher\n(__webpack_require__(/*! ./SvfWorker */ \"./src/file-loaders/workers/SvfWorker.js\").register)(workerMain);\n(__webpack_require__(/*! ./GeomWorker */ \"./src/file-loaders/workers/GeomWorker.js\").register)(workerMain);\n(__webpack_require__(/*! ./F2dParseWorker */ \"./src/file-loaders/workers/F2dParseWorker.js\").register)(workerMain);\n(__webpack_require__(/*! ./F2dStreamWorker */ \"./src/file-loaders/workers/F2dStreamWorker.js\").register)(workerMain);\n(__webpack_require__(/*! ./OtgBvhWorker */ \"./src/file-loaders/workers/OtgBvhWorker.js\").register)(workerMain);\n(__webpack_require__(/*! ./OtgLoadWorker */ \"./src/file-loaders/workers/OtgLoadWorker.js\").register)(workerMain);\n(__webpack_require__(/*! ./OtgDecodeWorker.ts */ \"./src/file-loaders/workers/OtgDecodeWorker.ts\").register)(workerMain);\n(__webpack_require__(/*! ./PropWorker */ \"./src/file-loaders/workers/PropWorker.js\").register)(workerMain);\n(__webpack_require__(/*! ./ConsolidationWorker */ \"./src/file-loaders/workers/ConsolidationWorker.js\").register)(workerMain);\n(__webpack_require__(/*! ./BvhWorker */ \"./src/file-loaders/workers/BvhWorker.js\").register)(workerMain);\n\n// when we request some resource from some kinds of URL\n// This method will give the worker ability to support EMSCRIPTEN File Sytstem\n// Or indexedDB in future\nfunction registerFilePort(event) {\n if (event && event.protocolPortMap) {\n for (var p in event.protocolPortMap) {\n _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.registerProtocolPort(p, event.protocolPortMap[p]);\n }\n }\n}\n\nworkerMain.register(\"REGISTER_FILE_PORT\", { doOperation: registerFilePort });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQyxDQUFDLENBQUMsQ0FBQztJQUNyRTtFQUNKO0FBQ0o7O0FBRUFMLFVBQVUsQ0FBQ0YsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEVBQUNELFdBQVcsRUFBRUssZ0JBQWdCLEVBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvd29ya2Vycy9NYWluV29ya2VyLmpzP2JjOTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vbmV0L1hoclwiO1xuaW1wb3J0IHsgZW5kcG9pbnQgfSBmcm9tIFwiLi4vbmV0L2VuZHBvaW50c1wiO1xuXG5leHBvcnQgY2xhc3MgV29ya2VyTWFpbiB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fd29ya2VycyAgPSB7fTtcbiAgICB9XG4gICAgZGlzcGF0Y2gobG9hZENvbnRleHQpIHtcblxuICAgICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvYWRDb250ZXh0LCAnb3BlcmF0aW9uJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vVE9ETyBUUzpcbiAgICAgICAgaWYgKGxvYWRDb250ZXh0LmVuZHBvaW50KVxuICAgICAgICAgICAgZW5kcG9pbnQuc2V0RW5kcG9pbnRBbmRBcGkobG9hZENvbnRleHQuZW5kcG9pbnQsIGxvYWRDb250ZXh0LmFwaSk7XG5cblxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5fd29ya2Vyc1tsb2FkQ29udGV4dC5vcGVyYXRpb25dO1xuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAvL0luaXRpYWxpemUgdGhlIHBhdGggdGhhdCBjb250YWlucyB0aGUgcmVxdWVzdGVkXG4gICAgICAgIC8vZmlsZS4gSXQncyB0aGUgcm9vdCBmb3Igb3RoZXIgcmVsYXRpdmUgcGF0aHMgcmVmZXJlbmNlZFxuICAgICAgICAvL2J5IHRoZSBiYXNlIGZpbGUuXG4gICAgICAgIGxvYWRDb250ZXh0LmJhc2VQYXRoID0gXCJcIjtcbiAgICAgICAgaWYgKGxvYWRDb250ZXh0LnVybCkge1xuICAgICAgICAgICAgdmFyIGxhc3RTbGFzaCA9IGxvYWRDb250ZXh0LnVybC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICBpZiAobGFzdFNsYXNoICE9IC0xKVxuICAgICAgICAgICAgICAgIGxvYWRDb250ZXh0LmJhc2VQYXRoID0gbG9hZENvbnRleHQudXJsLnN1YnN0cigwLCBsYXN0U2xhc2grMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGRlZmF1bHQgZmFpbHVyZSBjYWxsYmFjay5cbiAgICAgICAgLy9cbiAgICAgICAgbG9hZENvbnRleHQucmFpc2VFcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbG9hZENvbnRleHQud29ya2VyLnJhaXNlRXJyb3IuYXBwbHkobG9hZENvbnRleHQud29ya2VyLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgICBsb2FkQ29udGV4dC5vbkZhaWx1cmVDYWxsYmFjayA9IFZpZXdpbmdTZXJ2aWNlLmRlZmF1bHRGYWlsdXJlQ2FsbGJhY2suYmluZChsb2FkQ29udGV4dCk7XG5cbiAgICAgICAgdGFyZ2V0LmRvT3BlcmF0aW9uKGxvYWRDb250ZXh0KTtcbiAgICB9XG5cbiAgICByZWdpc3RlcihvcGVyYXRpb24sIHdvcmtlcikge1xuICAgICAgICB0aGlzLl93b3JrZXJzW29wZXJhdGlvbl0gPSB3b3JrZXI7XG4gICAgfVxuXG4gICAgdW5yZWdpc3RlcihvcGVyYXRpb24pIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3dvcmtlcnNbb3BlcmF0aW9uXTtcbiAgICB9XG59XG5cbmV4cG9ydCBsZXQgd29ya2VyTWFpbiA9IG5ldyBXb3JrZXJNYWluKCk7XG5cbi8vQWRkIGFsbCB0aGUgd29ya2VyIGVudHJ5IHBvaW50cy5cbi8vVGhvc2UgbmVlZCB0byBleGVjdXRlIGluIG9yZGVyIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXNcbi8vd2l0aCB0aGUgd2ViIHdvcmtlciBvcGVyYXRpb24gZGlzcGF0Y2hlclxucmVxdWlyZShcIi4vU3ZmV29ya2VyXCIpLnJlZ2lzdGVyKHdvcmtlck1haW4pO1xucmVxdWlyZShcIi4vR2VvbVdvcmtlclwiKS5yZWdpc3Rlcih3b3JrZXJNYWluKTtcbnJlcXVpcmUoXCIuL0YyZFBhcnNlV29ya2VyXCIpLnJlZ2lzdGVyKHdvcmtlck1haW4pO1xucmVxdWlyZShcIi4vRjJkU3RyZWFtV29ya2VyXCIpLnJlZ2lzdGVyKHdvcmtlck1haW4pO1xucmVxdWlyZShcIi4vT3RnQnZoV29ya2VyXCIpLnJlZ2lzdGVyKHdvcmtlck1haW4pO1xucmVxdWlyZShcIi4vT3RnTG9hZFdvcmtlclwiKS5yZWdpc3Rlcih3b3JrZXJNYWluKTtcbnJlcXVpcmUoXCIuL090Z0RlY29kZVdvcmtlci50c1wiKS5yZWdpc3Rlcih3b3JrZXJNYWluKTtcbnJlcXVpcmUoXCIuL1Byb3BXb3JrZXJcIikucmVnaXN0ZXIod29ya2VyTWFpbik7XG5yZXF1aXJlKFwiLi9Db25zb2xpZGF0aW9uV29ya2VyXCIpLnJlZ2lzdGVyKHdvcmtlck1haW4pO1xucmVxdWlyZShcIi4vQnZoV29ya2VyXCIpLnJlZ2lzdGVyKHdvcmtlck1haW4pO1xuXG4vLyB3aGVuIHdlIHJlcXVlc3Qgc29tZSByZXNvdXJjZSBmcm9tIHNvbWUga2luZHMgb2YgVVJMXG4vLyBUaGlzIG1ldGhvZCB3aWxsIGdpdmUgdGhlIHdvcmtlciBhYmlsaXR5IHRvIHN1cHBvcnQgRU1TQ1JJUFRFTiBGaWxlIFN5dHN0ZW1cbi8vIE9yIGluZGV4ZWREQiBpbiBmdXR1cmVcbmZ1bmN0aW9uIHJlZ2lzdGVyRmlsZVBvcnQoZXZlbnQpIHtcbiAgICBpZihldmVudCAmJiBldmVudC5wcm90b2NvbFBvcnRNYXApIHtcbiAgICAgICAgZm9yKHZhciBwIGluIGV2ZW50LnByb3RvY29sUG9ydE1hcCkge1xuICAgICAgICAgICAgVmlld2luZ1NlcnZpY2UucmVnaXN0ZXJQcm90b2NvbFBvcnQocCwgIGV2ZW50LnByb3RvY29sUG9ydE1hcFtwXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbndvcmtlck1haW4ucmVnaXN0ZXIoXCJSRUdJU1RFUl9GSUxFX1BPUlRcIiwge2RvT3BlcmF0aW9uOiByZWdpc3RlckZpbGVQb3J0fSk7XG4iXSwibmFtZXMiOlsiVmlld2luZ1NlcnZpY2UiLCJlbmRwb2ludCIsIldvcmtlck1haW4iLCJjb25zdHJ1Y3RvciIsIl93b3JrZXJzIiwiZGlzcGF0Y2giLCJsb2FkQ29udGV4dCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNldEVuZHBvaW50QW5kQXBpIiwiYXBpIiwidGFyZ2V0Iiwib3BlcmF0aW9uIiwiYmFzZVBhdGgiLCJ1cmwiLCJsYXN0U2xhc2giLCJsYXN0SW5kZXhPZiIsInN1YnN0ciIsInJhaXNlRXJyb3IiLCJ3b3JrZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsIm9uRmFpbHVyZUNhbGxiYWNrIiwiZGVmYXVsdEZhaWx1cmVDYWxsYmFjayIsImJpbmQiLCJkb09wZXJhdGlvbiIsInJlZ2lzdGVyIiwidW5yZWdpc3RlciIsIndvcmtlck1haW4iLCJyZXF1aXJlIiwicmVnaXN0ZXJGaWxlUG9ydCIsImV2ZW50IiwicHJvdG9jb2xQb3J0TWFwIiwicCIsInJlZ2lzdGVyUHJvdG9jb2xQb3J0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/MainWorker.js\n"); /***/ }), /***/ "./src/file-loaders/workers/OtgBvhWorker.js": /*!**************************************************!*\ !*** ./src/file-loaders/workers/OtgBvhWorker.js ***! \**************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _net_Xhr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../net/Xhr */ \"./src/file-loaders/net/Xhr.js\");\n/* harmony import */ var _wgs_scene_BVHBuilder__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../wgs/scene/BVHBuilder */ \"./src/wgs/scene/BVHBuilder.js\");\n/* harmony import */ var _lmvtk_otg_OtgFragInfo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lmvtk/otg/OtgFragInfo */ \"./src/file-loaders/lmvtk/otg/OtgFragInfo.js\");\n\n\n\n\nfunction loadAsyncResource(loadContext, resourcePath, responseType, callback) {\n\n _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.getItem(loadContext, resourcePath,\n callback,\n loadContext.onFailureCallback,\n {\n responseType: responseType || \"arraybuffer\"\n }\n );\n\n}\n\nfunction doLoadOtgBvh(loadContext) {\n\n //TODO: We could process bboxes progressively (in the OtgFragInfo constructions) instead of doing it once the whole file is in\n //although it's probably not worth it, given we are reunning in a worker thread\n if (loadContext.fragments_extra) {\n loadAsyncResource(loadContext, loadContext.fragments_extra, \"\", function (data) {\n\n if (!data || !data.length) {\n return;\n }\n\n //Build the R-Tree\n //var t0 = performance.now();\n\n var finfo = new _lmvtk_otg_OtgFragInfo__WEBPACK_IMPORTED_MODULE_2__.OtgFragInfo(data, loadContext);\n\n if (finfo.count) {\n var tmpbvh = new _wgs_scene_BVHBuilder__WEBPACK_IMPORTED_MODULE_1__.BVHBuilder(null, null, finfo);\n tmpbvh.build(loadContext.bvhOptions);\n\n var bvh = {\n nodes: tmpbvh.nodes.getRawData(),\n primitives: tmpbvh.primitives\n };\n\n //var t1 = performance.now();\n //console.log(\"BVH build time:\" + (t1 - t0));\n\n loadContext.worker.postMessage({ bvh: bvh, boxes: finfo.boxes, boxStride: finfo.boxStride },\n [bvh.nodes, bvh.primitives.buffer, finfo.boxes.buffer]);\n }\n\n });\n }\n\n\n}\n\nfunction register(workerMain) {\n workerMain.register(\"LOAD_OTG_BVH\", { doOperation: doLoadOtgBvh });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvT3RnQnZoV29ya2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBOEQ7QUFDUTtBQUNmOztBQUV2RCxTQUFTRyxpQkFBaUJBLENBQUNDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxZQUFZLEVBQUVDLFFBQVEsRUFBRTs7RUFFN0VQLG9EQUFjLENBQUNRLE9BQU8sQ0FBQ0osV0FBVyxFQUFFQyxZQUFZO0VBQzFDRSxRQUFRO0VBQ1JILFdBQVcsQ0FBQ0ssaUJBQWlCO0VBQzVCO0lBQ0NILFlBQVksRUFBQ0EsWUFBWSxJQUFJO0VBQzlCO0VBQ0QsQ0FBQzs7QUFFUjs7QUFFQSxTQUFTSSxZQUFZQSxDQUFDTixXQUFXLEVBQUU7O0VBRWxDO0VBQ0E7RUFDQSxJQUFJQSxXQUFXLENBQUNPLGVBQWUsRUFBRTtJQUNoQ1IsaUJBQWlCLENBQUNDLFdBQVcsRUFBRUEsV0FBVyxDQUFDTyxlQUFlLEVBQUUsRUFBRSxFQUFFLFVBQVNDLElBQUksRUFBRTs7TUFFOUUsSUFBSSxDQUFDQSxJQUFJLElBQUksQ0FBQ0EsSUFBSSxDQUFDQyxNQUFNLEVBQUU7UUFDMUI7TUFDRDs7TUFFQTtNQUNBOztNQUVBLElBQUlDLEtBQUssR0FBRyxJQUFJWiwrREFBVyxDQUFDVSxJQUFJLEVBQUVSLFdBQVcsQ0FBQzs7TUFFOUMsSUFBSVUsS0FBSyxDQUFDQyxLQUFLLEVBQUU7UUFDaEIsSUFBSUMsTUFBTSxHQUFHLElBQUlmLDZEQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRWEsS0FBSyxDQUFDO1FBQzlDRSxNQUFNLENBQUNDLEtBQUssQ0FBQ2IsV0FBVyxDQUFDYyxVQUFVLENBQUM7O1FBRXBDLElBQUlDLEdBQUcsR0FBRztVQUNUQyxLQUFLLEVBQUVKLE1BQU0sQ0FBQ0ksS0FBSyxDQUFDQyxVQUFVLENBQUMsQ0FBQztVQUNoQ0MsVUFBVSxFQUFFTixNQUFNLENBQUNNO1FBQ3BCLENBQUM7O1FBRUQ7UUFDQTs7UUFFQWxCLFdBQVcsQ0FBQ21CLE1BQU0sQ0FBQ0MsV0FBVyxDQUFDLEVBQUNMLEdBQUcsRUFBQ0EsR0FBRyxFQUFFTSxLQUFLLEVBQUNYLEtBQUssQ0FBQ1csS0FBSyxFQUFFQyxTQUFTLEVBQUNaLEtBQUssQ0FBQ1ksU0FBUyxFQUFDO1FBQ3ZELENBQUNQLEdBQUcsQ0FBQ0MsS0FBSyxFQUFFRCxHQUFHLENBQUNHLFVBQVUsQ0FBQ0ssTUFBTSxFQUFFYixLQUFLLENBQUNXLEtBQUssQ0FBQ0UsTUFBTSxDQUFDLENBQUM7TUFDdkY7O0lBRUQsQ0FBQyxDQUFDO0VBQ0g7OztBQUdEOztBQUVPLFNBQVNDLFFBQVFBLENBQUNDLFVBQVUsRUFBRTtFQUNwQ0EsVUFBVSxDQUFDRCxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUVFLFdBQVcsRUFBRXBCLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDbkUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvT3RnQnZoV29ya2VyLmpzPzhmMjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld2luZ1NlcnZpY2UgYXMgVmlld2luZ1NlcnZpY2UgfSBmcm9tIFwiLi4vbmV0L1hoclwiO1xyXG5pbXBvcnQgeyBCVkhCdWlsZGVyIGFzIEJWSEJ1aWxkZXIgfSBmcm9tIFwiLi4vLi4vd2dzL3NjZW5lL0JWSEJ1aWxkZXJcIjtcclxuaW1wb3J0IHsgT3RnRnJhZ0luZm8gfSBmcm9tIFwiLi4vbG12dGsvb3RnL090Z0ZyYWdJbmZvXCI7XHJcblxyXG5mdW5jdGlvbiBsb2FkQXN5bmNSZXNvdXJjZShsb2FkQ29udGV4dCwgcmVzb3VyY2VQYXRoLCByZXNwb25zZVR5cGUsIGNhbGxiYWNrKSB7XHJcblxyXG5cdFZpZXdpbmdTZXJ2aWNlLmdldEl0ZW0obG9hZENvbnRleHQsIHJlc291cmNlUGF0aCxcclxuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayxcclxuXHRcdFx0XHRcdFx0XHRsb2FkQ29udGV4dC5vbkZhaWx1cmVDYWxsYmFjayxcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VUeXBlOnJlc3BvbnNlVHlwZSB8fCBcImFycmF5YnVmZmVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gZG9Mb2FkT3RnQnZoKGxvYWRDb250ZXh0KSB7XHJcblxyXG5cdC8vVE9ETzogV2UgY291bGQgcHJvY2VzcyBiYm94ZXMgcHJvZ3Jlc3NpdmVseSAoaW4gdGhlIE90Z0ZyYWdJbmZvIGNvbnN0cnVjdGlvbnMpIGluc3RlYWQgb2YgZG9pbmcgaXQgb25jZSB0aGUgd2hvbGUgZmlsZSBpcyBpblxyXG5cdC8vYWx0aG91Z2ggaXQncyBwcm9iYWJseSBub3Qgd29ydGggaXQsIGdpdmVuIHdlIGFyZSByZXVubmluZyBpbiBhIHdvcmtlciB0aHJlYWRcclxuXHRpZiAobG9hZENvbnRleHQuZnJhZ21lbnRzX2V4dHJhKSB7XHJcblx0XHRsb2FkQXN5bmNSZXNvdXJjZShsb2FkQ29udGV4dCwgbG9hZENvbnRleHQuZnJhZ21lbnRzX2V4dHJhLCBcIlwiLCBmdW5jdGlvbihkYXRhKSB7XHJcblxyXG5cdFx0XHRpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvL0J1aWxkIHRoZSBSLVRyZWVcclxuXHRcdFx0Ly92YXIgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcblx0XHRcdHZhciBmaW5mbyA9IG5ldyBPdGdGcmFnSW5mbyhkYXRhLCBsb2FkQ29udGV4dCk7XHJcblxyXG5cdFx0XHRpZiAoZmluZm8uY291bnQpIHtcclxuXHRcdFx0XHR2YXIgdG1wYnZoID0gbmV3IEJWSEJ1aWxkZXIobnVsbCwgbnVsbCwgZmluZm8pO1xyXG5cdFx0XHRcdHRtcGJ2aC5idWlsZChsb2FkQ29udGV4dC5idmhPcHRpb25zKTtcclxuXHJcblx0XHRcdFx0dmFyIGJ2aCA9IHtcclxuXHRcdFx0XHRcdG5vZGVzOiB0bXBidmgubm9kZXMuZ2V0UmF3RGF0YSgpLFxyXG5cdFx0XHRcdFx0cHJpbWl0aXZlczogdG1wYnZoLnByaW1pdGl2ZXNcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHQvL3ZhciB0MSA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cdFx0XHRcdC8vY29uc29sZS5sb2coXCJCVkggYnVpbGQgdGltZTpcIiArICh0MSAtIHQwKSk7XHJcblxyXG5cdFx0XHRcdGxvYWRDb250ZXh0Lndvcmtlci5wb3N0TWVzc2FnZSh7YnZoOmJ2aCwgYm94ZXM6ZmluZm8uYm94ZXMsIGJveFN0cmlkZTpmaW5mby5ib3hTdHJpZGV9LFxyXG5cdFx0XHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnZoLm5vZGVzLCBidmgucHJpbWl0aXZlcy5idWZmZXIsIGZpbmZvLmJveGVzLmJ1ZmZlcl0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcih3b3JrZXJNYWluKSB7XHJcblx0d29ya2VyTWFpbi5yZWdpc3RlcihcIkxPQURfT1RHX0JWSFwiLCB7IGRvT3BlcmF0aW9uOiBkb0xvYWRPdGdCdmggfSk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIlZpZXdpbmdTZXJ2aWNlIiwiQlZIQnVpbGRlciIsIk90Z0ZyYWdJbmZvIiwibG9hZEFzeW5jUmVzb3VyY2UiLCJsb2FkQ29udGV4dCIsInJlc291cmNlUGF0aCIsInJlc3BvbnNlVHlwZSIsImNhbGxiYWNrIiwiZ2V0SXRlbSIsIm9uRmFpbHVyZUNhbGxiYWNrIiwiZG9Mb2FkT3RnQnZoIiwiZnJhZ21lbnRzX2V4dHJhIiwiZGF0YSIsImxlbmd0aCIsImZpbmZvIiwiY291bnQiLCJ0bXBidmgiLCJidWlsZCIsImJ2aE9wdGlvbnMiLCJidmgiLCJub2RlcyIsImdldFJhd0RhdGEiLCJwcmltaXRpdmVzIiwid29ya2VyIiwicG9zdE1lc3NhZ2UiLCJib3hlcyIsImJveFN0cmlkZSIsImJ1ZmZlciIsInJlZ2lzdGVyIiwid29ya2VyTWFpbiIsImRvT3BlcmF0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/OtgBvhWorker.js\n"); /***/ }), /***/ "./src/file-loaders/workers/OtgLoadWorker.js": /*!***************************************************!*\ !*** ./src/file-loaders/workers/OtgLoadWorker.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _net_Xhr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../net/Xhr */ \"./src/file-loaders/net/Xhr.js\");\n/* harmony import */ var _lmvtk_otg_LocalDbCache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lmvtk/otg/LocalDbCache */ \"./src/file-loaders/lmvtk/otg/LocalDbCache.js\");\n/* harmony import */ var _lmvtk_otg_OPFSCache_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lmvtk/otg/OPFSCache.ts */ \"./src/file-loaders/lmvtk/otg/OPFSCache.ts\");\n/* harmony import */ var fflate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! fflate */ \"./node_modules/fflate/esm/browser.js\");\n/* harmony import */ var _lmvtk_otg_OtgWebSocket__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lmvtk/otg/OtgWebSocket */ \"./src/file-loaders/lmvtk/otg/OtgWebSocket.js\");\n/* harmony import */ var _lmvtk_otg_WebSocketBase__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lmvtk/otg/WebSocketBase */ \"./src/file-loaders/lmvtk/otg/WebSocketBase.js\");\n\n\n\n\n\n\n\n\n// OtgLoadWorker implements the \"LOAD_CDN_RESOURCE_OTG\" operation.\n\nconst NUM_WEBSOCKETS = 2;\n// Avoid batch requests with below this size. Should be some small percentage of OtgResourceCache._maxRequestsInFlight.\n// This made no observable perf difference, but the derivative service team likes larger batches.\nconst SMALL_MESSAGE_THRESHOLD = 20;\n// When the number of in flight requests falls below this, send small messages again,\n// to avoid not sending the last SMALL_MESSAGE_THRESHOLD-1 messages for too long.\n// Should be some moderate percentage of OtgResourceCache._maxRequestsInFlight.\nconst IN_FLIGHT_THRESHOLD_FOR_SMALL_MESSAGES = 400;\n\n//Do not store state data directly in \"self\" because in the node.js code path\n//there are no separate worker contexts\nfunction getWorkerContext(loadContext) {\n\n //Initialize the worker context -- we cannot use module/global vars here,\n //because in node.js the module variables are shared for all instances of the worker.\n if (!loadContext.worker.ctx) {\n\n loadContext.worker.ctx = {\n\n otgws: [],\n localDbCache: null,\n opfsCache: null,\n\n numRequests: 0,\n\n pendingForNetwork: [],\n\n // Keeps batches of geoms to be sent to decoder threads\n _pendingGeomHashes: [],\n _pendingGeoms: [],\n _pendingFromCache: [],\n _pendingTransferList: [],\n\n // Track total counts to simplify debugging\n _requestsSent: 0,\n _requestsReceived: 0,\n\n decoderPorts: [],\n nextPortIndex: 0,\n\n analyticsForHttpFallbackSent: false\n };\n }\n\n return loadContext.worker.ctx;\n}\n\nfunction doInitGeomWorker(loadContext) {\n var ctx = getWorkerContext(loadContext);\n\n if (!loadContext.disableWebSocket) {\n const onResourcesReceived = (hashes, lineageUrns, arrays, resourceType) => onCdnResourcesReceived(loadContext, hashes, lineageUrns, arrays, false, resourceType);\n const onResourceFailed = (hash, resourceType, errorMessage) => onCdnResourceFailed(loadContext, hash, resourceType, errorMessage);\n const onConnectionFailed = (inprogress) => retryPending(loadContext, inprogress);\n for (let i = 0; i < NUM_WEBSOCKETS; i++) {\n ctx.otgws.push(new _lmvtk_otg_OtgWebSocket__WEBPACK_IMPORTED_MODULE_3__.OtgWs(loadContext.otg_ws, loadContext.queryParams, loadContext.headers, onResourcesReceived, onResourceFailed, onConnectionFailed));\n }\n }\n\n if (loadContext.useOpfs) {\n const analyticsCallback=( event, properties)=> {\n loadContext.worker.postMessage({ event, properties });\n };\n ctx.opfsCache = new _lmvtk_otg_OPFSCache_ts__WEBPACK_IMPORTED_MODULE_2__.OPFSCache(analyticsCallback);\n if (loadContext.clearIndexedDbIfItsLarge) {\n (0,_lmvtk_otg_LocalDbCache__WEBPACK_IMPORTED_MODULE_1__.clearIndexedDbIfItsLarge)();\n }\n } else {\n ctx.localDbCache = new _lmvtk_otg_LocalDbCache__WEBPACK_IMPORTED_MODULE_1__.LocalDbCache(loadContext.disableIndexedDb);\n ctx.localDbCache.open(null);\n }\n\n ctx.decoderPorts = loadContext.ports;\n}\n\nfunction doAddModel(loadContext) {\n var ctx = getWorkerContext(loadContext);\n for (const ws of ctx.otgws) {\n ws.addAuthorizeUrn(loadContext.modelUrn);\n }\n if (loadContext.useOpfs) {\n ctx.opfsCache.open(loadContext.lineageUrn);\n }\n\n if (!ctx.flushMessages) {\n ctx.flushMessages = setInterval(() => {\n _loadCdnResourceFromNetworkBatch(loadContext);\n flushMessagesToDecoderThread(loadContext);\n }, 25);\n }\n}\n\n// Use custom error handler: It forwards to the default one, but...\n// 1. adds the geometry hash to the error message. This is needed by the geometry cache.\n// We use it to determine for which geometry the problem occurred, so that the affected\n// loaders can be informed (see OtgResourceCache.js).\n// 2. If any other requests were blocked before to limit the number of parallel\n// requests, we must make sure that these enqueued requests are processed too.\nfunction getHttpErrorHandler(loadContext, hash, resourceType) {\n\n // add error handler to override raiseError function\n var errorHandler = {\n // add hash and pass on to loadContext.raiseError.\n raiseError: function (code, msg, args) {\n args.hash = hash;\n args.resourceType = resourceType;\n loadContext.raiseError(code, msg, args);\n }\n };\n\n return function () {\n // forward to default error handler\n _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.defaultFailureCallback.apply(errorHandler, arguments);\n\n onCdnResourceProcessed(loadContext);\n };\n}\n\nfunction onCdnResourceFailed(loadContext, hash, resourceType, errorMessage) {\n loadContext.raiseError(null, errorMessage, { hash: hash, resourceType: resourceType });\n onCdnResourceProcessed(loadContext);\n}\n\nfunction retryPending(loadContext, inprogress) {\n for (const [hash, value] of inprogress) {\n loadContext.queryParams = value.queryParams;\n loadCdnResources(loadContext, [hash], [value.url], [value.lineageUrn], value.type);\n }\n}\n\nfunction isGzip(data) {\n return data[0] === 31 && data[1] === 139;\n}\n\nfunction onCdnResourcesReceived(loadContext, hashes, lineageUrns, arrays, skipCache, resourceType) {\n const ctx = getWorkerContext(loadContext);\n\n if (!skipCache) {\n if (ctx.opfsCache) {\n ctx.opfsCache.store(hashes, lineageUrns, arrays);\n } else {\n for (let i = 0; i < hashes.length; i++) {var _ctx$localDbCache;\n const hash=h ashes[i];\n let data=a rrays[i];\n // If the HTTP fallback was used, the browser already did the decompression\n // Also, we did encounter uncompressed blobs in production.\n if (!isGzip(data)) {\n data=( 0,fflate__WEBPACK_IMPORTED_MODULE_5__.gzipSync)(data);\n }\n (_ctx$localDbCache=c tx.localDbCache)===n ull || _ctx$localDbCache===v oid 0 || _ctx$localDbCache.store(hash, data);\n // ctx.opfsCache?.store(hash, lineageUrns[i], data);\n }\n }\n }\n\n if (resourceType===\ "m\") {\n //Post materials as soon as possible without batching -- those are fewer\n //and more critical as they are shared across multiple meshes.\n const port=c tx.decoderPorts[ctx.nextPortIndex];\n ctx.nextPortIndex=+ +ctx.nextPortIndex % ctx.decoderPorts.length;\n port.postMessage({\n operation: \ "DECODE_MATERIALS\",\n hashes: hashes,\n arrays: arrays\n }, [arrays[0].buffer]);\n } else {\n // Each message has a bit of overhead, both when sending and receiving,\n // and both in the decoder thread and the main thread afterwards.\n // Therefore we batch here, even though it introduces a bit of latency.\n // Ideally, cache and websockets would always return batches, then we could remove this.\n for (let i=0 ; i < hashes.length; i++) {\n const hash=h ashes[i];\n const data=a rrays[i];\n ctx._pendingGeomHashes.push(hash);\n ctx._pendingGeoms.push(data);\n ctx._pendingFromCache.push(skipCache);\n if (i===0 || data.buffer !==a rrays[0].buffer) {\n ctx._pendingTransferList.push(data.buffer);\n }\n }\n // Since the OPFS cache can return very large batches, \n // ensure that batches are split across decoder threads.\n if (ctx._pendingGeomHashes.length> 50) {\n flushMessagesToDecoderThread(loadContext);\n }\n }\n onCdnResourceProcessed(loadContext, hashes.length);\n}\n\n// Sends recently received (since last flush) resources to the decoders\nfunction flushMessagesToDecoderThread(loadContext) {\n\n var ctx = getWorkerContext(loadContext);\n\n if (!ctx._pendingGeomHashes.length)\n return;\n\n const port = ctx.decoderPorts[ctx.nextPortIndex];\n ctx.nextPortIndex = ++ctx.nextPortIndex % ctx.decoderPorts.length;\n port.postMessage({\n operation: \"DECODE_GEOMETRIES\",\n hashes: ctx._pendingGeomHashes,\n arrays: ctx._pendingGeoms,\n fromCache: ctx._pendingFromCache\n }, ctx._pendingTransferList);\n\n ctx._pendingGeomHashes = [];\n ctx._pendingGeoms = [];\n ctx._pendingFromCache = [];\n ctx._pendingTransferList = [];\n}\n\nfunction onCdnResourceProcessed(loadContext) {let numResourcesProcessed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n const ctx = getWorkerContext(loadContext);\n\n ctx.numRequests -= numResourcesProcessed;\n ctx._requestsReceived += numResourcesProcessed;\n\n if (ctx.flushCacheAndDisconnectRequested && !ctx.numRequests && !ctx._pendingGeomHashes.length) {\n doFlushCacheAndDisconnect(loadContext);\n ctx.flushCacheAndDisconnectRequested = false;\n }\n}\n\n// Request raw geometry data (arraybuffer) and forward result to onCdnResourcesReceived once it is available\n// @param {Object} loadContext - passed through to the receiving callback\n// @param {String[]} hashes - hashes of the resources\n// @param {String[]} urls - urls of the network resources\n// @param {String[]} lineageUrns - lineage Urns of the resources\n// @param {String} resourceType - \"m\" for material and \"g\" for geometry\n// @param {Boolean[]} couldBeInCacheArray - One entry per resource, false if the resource can't be in the cache (i.e., skip the cache and directly load from the network)\n// if true and not in cache, the data is still requested from the network\nfunction loadCdnResources(loadContext, hashes, urls, lineageUrns, resourceType, couldBeInCacheArray) {\n\n var ctx = getWorkerContext(loadContext);\n\n ctx._requestsSent += hashes.length;\n\n if (ctx.opfsCache) {\n ctx.opfsCache.get(hashes, lineageUrns).then((datas) => {\n for (let i = 0; i < hashes.length; i++) {\n const hash=h ashes[i];\n const url=u rls[i];\n const lineageUrn=l ineageUrns[i];\n const data=d atas[i];\n\n if (data) {\n onCdnResourcesReceived(loadContext, [hash], [lineageUrn], [data], true, resourceType);\n } else {\n ctx.pendingForNetwork.push([hash, url, lineageUrn, resourceType, loadContext.queryParams]);\n }\n }\n });\n } else if (ctx.localDbCache) {\n for (let i=0 ; i < urls.length; i++) {\n const hash=h ashes[i];\n const url=u rls[i];\n if (!couldBeInCacheArray || couldBeInCacheArray[i]) {\n //Make sure the IndexedDb session is started before we ask to get() anything.\n //This is done by a call to open, which will call us back immediately, or delay until\n //the database is open.\n ctx.localDbCache.open(()=> ctx.localDbCache.get(hash, function (error, data) {\n if (data) {\n onCdnResourcesReceived(loadContext, [hash], [\"\"], [data], true, resourceType);\n } else {\n ctx.pendingForNetwork.push([hash, url, \"\", resourceType, loadContext.queryParams]);\n }\n }));\n } else {\n ctx.pendingForNetwork.push([hash, url, \"\", resourceType, loadContext.queryParams]);\n }\n }\n }\n}\n\n\nfunction _loadCdnResourceFromNetworkBatch(loadContext) {\n var ctx = getWorkerContext(loadContext);\n\n if (ctx.pendingForNetwork.length === 0) {\n return;\n }\n\n // Only fill the queue of open WS. Non-open WS might take a few seconds to open: \n // Chrome and Firefox throttle opening WS to one per ~500ms, so the eighth WS would open only after 3.5s.\n // Also, the WS might currently be attempting to recover from an error.\n let openWS = [];\n let numNonbrokenWs = 0;\n let totalInFlightRequests = 0;\n for (const ws of ctx.otgws) {var _ws$ws;\n if (!ws.hasPermanentError) {\n numNonbrokenWs++;\n }\n if (((_ws$ws = ws.ws) === null || _ws$ws === void 0 ? void 0 : _ws$ws.readyState) === _lmvtk_otg_WebSocketBase__WEBPACK_IMPORTED_MODULE_4__.STATE.OPEN) {\n openWS.push(ws);\n totalInFlightRequests += ws.inFlightRequests.size;\n } else {\n // Reasons they might need opening: 1. WS was just initialized 2. WS was closed due to model/view changing 3. server closed it due to e.g. timeout\n ws._openWebSocket();\n }\n }\n\n if (numNonbrokenWs === 0) {\n if (!ctx.analyticsForHttpFallbackSent) {\n ctx.analyticsForHttpFallbackSent = true;\n loadContext.worker.postMessage({ event: \"OTG_FALLBACK_TO_HTTP\", properties: {\n wsStates: ctx.otgws.map((ws) => {var _ws$ws2;return (_ws$ws2 = ws.ws) === null || _ws$ws2 === void 0 ? void 0 : _ws$ws2.readyState;}),\n wsLastErrorNumInFlight: ctx.otgws.map((ws) => ws.lastErrorNumInFlight),\n wsLastErrorReasons: ctx.otgws.map((ws) => {var _ws$lastError;return (_ws$lastError = ws.lastError) === null || _ws$lastError === void 0 ? void 0 : _ws$lastError.reason;}),\n wsLastErrorCodes: ctx.otgws.map((ws) => {var _ws$lastError2;return (_ws$lastError2 = ws.lastError) === null || _ws$lastError2 === void 0 ? void 0 : _ws$lastError2.code;})\n } });\n }\n //Fallback to XHR/HTTP2\n for (const [hash, url, lineageUrn, resourceType, queryParams] of ctx.pendingForNetwork) {\n loadContext.queryParams = queryParams;\n _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.getItem(\n loadContext,\n url,\n (data) => onCdnResourcesReceived(loadContext, [hash], [lineageUrn], [data], false, resourceType),\n getHttpErrorHandler(loadContext, hash, resourceType),\n {\n responseType: \"arraybuffer\",\n withCredentials: true\n }\n );\n }\n ctx.pendingForNetwork = [];\n return;\n }\n\n if (openWS.length <=0 ) {\n return;\n }\n\n const wsSortedByLoad=o penWS.sort((a, b)=> a.inFlightRequests.size - b.inFlightRequests.size);\n\n // Do load balancing among WS: every request should go to the WS which is currently least busy.\n // In other words, the minimum of the WS's inFlightRequests.size should be as high as possible,\n // otherwise that would mean that some WS are underutilized.\n // To achieve that, starting with the least busy WS, we raise the targeted requests in flight\n // so that after iteration n, the n least busy WS are utilized equally, until all incoming requests are distributed.\n let requestsToDistribute = ctx.pendingForNetwork.length;\n let targetRequestsInFlight = wsSortedByLoad[0].inFlightRequests.size;\n for (let i = 1; i < wsSortedByLoad.length; i++) {\n const raiseTargetBy=w sSortedByLoad[i].inFlightRequests.size - targetRequestsInFlight;\n requestsToDistribute -=r aiseTargetBy * i;\n targetRequestsInFlight +=r aiseTargetBy;\n if (requestsToDistribute <=0 ) {\n wsSortedByLoad.length=i ; // cut out WS that we won 't use anyway\n break;\n }\n }\n\n // If there are more requests left, distribute them equally across all WS,\n // or if targetRequestsInFlight got too high (i.e. if requestsToDistribute < 0), trim it down.\n targetRequestsInFlight += Math.ceil(requestsToDistribute / wsSortedByLoad.length);\n\n // If there are some WS not-yet-open, keep work in the queue for them and not overload the open ones\n const totalRequests = totalInFlightRequests + ctx.pendingForNetwork.length;\n targetRequestsInFlight = Math.min(targetRequestsInFlight, Math.ceil(totalRequests / numNonbrokenWs));\n\n for (let i = wsSortedByLoad.length - 1; i >= 0; i--) {\n const ws = wsSortedByLoad[i];\n const numHashesToSend = targetRequestsInFlight - ws.inFlightRequests.size;\n\n if (numHashesToSend < SMALL_MESSAGE_THRESHOLD && !(i == 0 && totalRequests < IN_FLIGHT_THRESHOLD_FOR_SMALL_MESSAGES)) {\n // Message is too small, distribute it to the other WS\n targetRequestsInFlight += Math.ceil(numHashesToSend / i);\n continue;\n }\n for (const [hash, url, lineageUrn, resourceType, queryParams] of ctx.pendingForNetwork.splice(0, numHashesToSend)) {\n ws.requestResource(url, lineageUrn, hash, resourceType, queryParams);\n }\n ws._flushSendQueue();\n }\n}\n\nfunction doCdnResourceLoad(loadContext) {\n var ctx = getWorkerContext(loadContext);\n\n loadCdnResources(loadContext, loadContext.hashes, loadContext.urls, loadContext.lineageUrns, loadContext.type, loadContext.couldBeInCache);\n ctx.numRequests += loadContext.urls.length;\n}\n\nfunction requestFlushCacheAndDisconnect(loadContext) {\n var ctx = getWorkerContext(loadContext);\n // If there are still requests in flight, we're likely switching views, and in that case we don 't want to close the\n // websockets now, because the new view would just re-open them again with some delay.\n // So we just set a flag here, and actually close the websockets when the last request is processed.\n // This way we also don't have to do any cleanup of requests in flight, we cannot cancel anything already on the wire anyway.\n ctx.flushCacheAndDisconnectRequested=t rue;\n onCdnResourceProcessed(loadContext, 0);\n}\n\nfunction doFlushCacheAndDisconnect(loadContext) {var _ctx$localDbCache2, _ctx$opfsCache;\n\n var ctx=g etWorkerContext(loadContext);\n\n if (ctx.numRequests || ctx._pendingGeomHashes.length) {\n console.error(\ "OtgLoadWorker disconnect requested even though there are requests in flight\");\n flushMessagesToDecoderThread(loadContext);\n }\n\n for (const ws of ctx.otgws) {\n ws.closeWebSocket();\n }\n\n clearInterval(ctx.flushMessages);\n ctx.flushMessages=n ull;\n\n (_ctx$localDbCache2=c tx.localDbCache)===n ull || _ctx$localDbCache2===v oid 0 || _ctx$localDbCache2.open(()=> ctx.localDbCache.flushStoresAndTimestamps());\n (_ctx$opfsCache = ctx.opfsCache) === null || _ctx$opfsCache === void 0 || _ctx$opfsCache.close();\n}\n\n// Usage: NOP_VIEWER.impl.geomCache().clearOpfsCache()\nasync function doClearOpfsCache(loadContext) {var _ctx$opfsCache2;\n var ctx = getWorkerContext(loadContext);\n await ((_ctx$opfsCache2 = ctx.opfsCache) === null || _ctx$opfsCache2 === void 0 ? void 0 : _ctx$opfsCache2.clear());\n console.log('OPFS cache cleared');\n}\n\n// Helper task to faciliate console debugging.\n// How to use:\n// If OTG loading gets stuck, call NOP_VIEWER.impl.geomCache().reportLoadingState()\nfunction doReportLoadingState(loadContext) {\n\n var ctx = getWorkerContext(loadContext);\n\n // Uncomment to debug a worker that got stuck:\n // const pending = ctx._requestsSent - ctx._requestsReceived;\n // if (pending) {\n // debugger;\n // }\n\n const loadingState = {\n // Total number of send/receive (also indexDB etc)\n sent: ctx._requestsSent,\n received: ctx._requestsReceived,\n\n // Actual websocket sends/receives\n wsSent: ctx.otgws.map((ws) => ws.numRequestsSent),\n wsReceived: ctx.otgws.map((ws) => ws.numRequestsReceived)\n };\n console.log('WorkerState: ', loadingState);\n}\n\nfunction register(workerMain) {\n workerMain.register(\"INIT_WORKER_OTG\", { doOperation: doInitGeomWorker });\n workerMain.register(\"ADD_MODEL_OTG\", { doOperation: doAddModel });\n workerMain.register(\"LOAD_CDN_RESOURCE_OTG\", { doOperation: doCdnResourceLoad });\n workerMain.register(\"FLUSH_CACHE_AND_DISCONNECT_OTG\", { doOperation: requestFlushCacheAndDisconnect });\n workerMain.register(\"CLEAR_OPFS_CACHE\", { doOperation: doClearOpfsCache });\n workerMain.register(\"REPORT_LOADING_STATE\", { doOperation: doReportLoadingState });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvT3RnTG9hZFdvcmtlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTRDO0FBQ3VDO0FBQzdCO0FBQ3BCO0FBQ2dCO0FBQ0M7OztBQUduRDs7QUFFQSxNQUFNTyxjQUFjLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsRUFBRTtBQUNsQztBQUNBO0FBQ0E7QUFDQSxNQUFNQyxzQ0FBc0MsR0FBRyxHQUFHOztBQUVsRDtBQUNBO0FBQ0EsU0FBU0MsZ0JBQWdCQSxDQUFDQyxXQUFXLEVBQUU7O0VBRW5DO0VBQ0E7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDQyxHQUFHLEVBQUU7O0lBRXpCRixXQUFXLENBQUNDLE1BQU0sQ0FBQ0MsR0FBRyxHQUFHOztNQUVyQkMsS0FBSyxFQUFFLEVBQUU7TUFDVEMsWUFBWSxFQUFFLElBQUk7TUFDbEJDLFNBQVMsRUFBRSxJQUFJOztNQUVmQyxXQUFXLEVBQUUsQ0FBQzs7TUFFZEMsaUJBQWlCLEVBQUUsRUFBRTs7TUFFckI7TUFDQUMsa0JBQWtCLEVBQUUsRUFBRTtNQUN0QkMsYUFBYSxFQUFFLEVBQUU7TUFDakJDLGlCQUFpQixFQUFFLEVBQUU7TUFDckJDLG9CQUFvQixFQUFFLEVBQUU7O01BRXhCO01BQ0FDLGFBQWEsRUFBRSxDQUFDO01BQ2hCQyxpQkFBaUIsRUFBRSxDQUFDOztNQUVwQkMsWUFBWSxFQUFFLEVBQUU7TUFDaEJDLGFBQWEsRUFBRSxDQUFDOztNQUVoQkMsNEJBQTRCLEVBQUU7SUFDbEMsQ0FBQztFQUNMOztFQUVBLE9BQU9oQixXQUFXLENBQUNDLE1BQU0sQ0FBQ0MsR0FBRztBQUNqQzs7QUFFQSxTQUFTZSxnQkFBZ0JBLENBQUNqQixXQUFXLEVBQUU7RUFDbkMsSUFBSUUsR0FBRyxHQUFHSCxnQkFBZ0IsQ0FBQ0MsV0FBVyxDQUFDOztFQUV2QyxJQUFJLENBQUNBLFdBQVcsQ0FBQ2tCLGdCQUFnQixF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QUFJQSxFQUFFLENBQUNvRyxlQUFlLENBQUM7SUFDL0NDLFVBQVUsRUFBRWpKLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDZ0csR0FBRyxDQUFDLENBQUFyRCxFQUFFLEtBQUlBLEVBQUUsQ0FBQ3NHLG1CQUFtQjtFQUMxRCxDQUFDO0VBQ0RoQixPQUFPLENBQUNRLEdBQUcsQ0FBQyxlQUFlLEVBQUVFLFlBQVksQ0FBQztBQUM5Qzs7QUFFTyxTQUFTTyxRQUFRQSxDQUFDQyxVQUFVLEVBQUU7RUFDakNBLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEVBQUVFLFdBQVcsRUFBRXRJLGdCQUFnQixDQUFDLENBQUMsQ0FBQztFQUN6RXFJLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFRSxXQUFXLEVBQUUxRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0VBQ2pFeUcsVUFBVSxDQUFDRCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsRUFBRUUsV0FBVyxFQUFFeEIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0VBQ2hGdUIsVUFBVSxDQUFDRCxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsRUFBRUUsV0FBVyxFQUFFdEIsOEJBQThCLENBQUMsQ0FBQyxDQUFDO0VBQ3RHcUIsVUFBVSxDQUFDRCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsRUFBRUUsV0FBVyxFQUFFZCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7RUFDMUVhLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEVBQUVFLFdBQVcsRUFBRVYsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQ3RGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy93b3JrZXJzL090Z0xvYWRXb3JrZXIuanM/OWIzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaWV3aW5nU2VydmljZSB9IGZyb20gXCIuLi9uZXQvWGhyXCI7XG5pbXBvcnQgeyBMb2NhbERiQ2FjaGUsIGNsZWFySW5kZXhlZERiSWZJdHNMYXJnZSB9IGZyb20gXCIuLi9sbXZ0ay9vdGcvTG9jYWxEYkNhY2hlXCI7XG5pbXBvcnQgeyBPUEZTQ2FjaGUgfSBmcm9tIFwiLi4vbG12dGsvb3RnL09QRlNDYWNoZS50c1wiO1xuaW1wb3J0IHsgZ3ppcFN5bmMgfSBmcm9tICdmZmxhdGUnO1xuaW1wb3J0IHsgT3RnV3MgfSBmcm9tIFwiLi4vbG12dGsvb3RnL090Z1dlYlNvY2tldFwiO1xuaW1wb3J0IHsgU1RBVEUgfSBmcm9tIFwiLi4vbG12dGsvb3RnL1dlYlNvY2tldEJhc2VcIjtcblxuXG4vLyBPdGdMb2FkV29ya2VyIGltcGxlbWVudHMgdGhlIFwiTE9BRF9DRE5fUkVTT1VSQ0VfT1RHXCIgb3BlcmF0aW9uLlxuXG5jb25zdCBOVU1fV0VCU09DS0VUUyA9IDI7XG4vLyBBdm9pZCBiYXRjaCByZXF1ZXN0cyB3aXRoIGJlbG93IHRoaXMgc2l6ZS4gU2hvdWxkIGJlIHNvbWUgc21hbGwgcGVyY2VudGFnZSBvZiBPdGdSZXNvdXJjZUNhY2hlLl9tYXhSZXF1ZXN0c0luRmxpZ2h0LlxuLy8gVGhpcyBtYWRlIG5vIG9ic2VydmFibGUgcGVyZiBkaWZmZXJlbmNlLCBidXQgdGhlIGRlcml2YXRpdmUgc2VydmljZSB0ZWFtIGxpa2VzIGxhcmdlciBiYXRjaGVzLlxuY29uc3QgU01BTExfTUVTU0FHRV9USFJFU0hPTEQgPSAyMDtcbi8vIFdoZW4gdGhlIG51bWJlciBvZiBpbiBmbGlnaHQgcmVxdWVzdHMgZmFsbHMgYmVsb3cgdGhpcywgc2VuZCBzbWFsbCBtZXNzYWdlcyBhZ2Fpbixcbi8vIHRvIGF2b2lkIG5vdCBzZW5kaW5nIHRoZSBsYXN0IFNNQUxMX01FU1NBR0VfVEhSRVNIT0xELTEgbWVzc2FnZXMgZm9yIHRvbyBsb25nLlxuLy8gU2hvdWxkIGJlIHNvbWUgbW9kZXJhdGUgcGVyY2VudGFnZSBvZiBPdGdSZXNvdXJjZUNhY2hlLl9tYXhSZXF1ZXN0c0luRmxpZ2h0LlxuY29uc3QgSU5fRkxJR0hUX1RIUkVTSE9MRF9GT1JfU01BTExfTUVTU0FHRVMgPSA0MDA7XG5cbi8vRG8gbm90IHN0b3JlIHN0YXRlIGRhdGEgZGlyZWN0bHkgaW4gXCJzZWxmXCIgYmVjYXVzZSBpbiB0aGUgbm9kZS5qcyBjb2RlIHBhdGhcbi8vdGhlcmUgYXJlIG5vIHNlcGFyYXRlIHdvcmtlciBjb250ZXh0c1xuZnVuY3Rpb24gZ2V0V29ya2VyQ29udGV4dChsb2FkQ29udGV4dCkge1xuXG4gICAgLy9Jbml0aWFsaXplIHRoZSB3b3JrZXIgY29udGV4dCAtLSB3ZSBjYW5ub3QgdXNlIG1vZHVsZS9nbG9iYWwgdmFycyBoZXJlLFxuICAgIC8vYmVjYXVzZSBpbiBub2RlLmpzIHRoZSBtb2R1bGUgdmFyaWFibGVzIGFyZSBzaGFyZWQgZm9yIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHdvcmtlci5cbiAgICBpZiAoIWxvYWRDb250ZXh0Lndvcmtlci5jdHgpIHtcblxuICAgICAgICBsb2FkQ29udGV4dC53b3JrZXIuY3R4ID0ge1xuXG4gICAgICAgICAgICBvdGd3czogW10sXG4gICAgICAgICAgICBsb2NhbERiQ2FjaGU6IG51bGwsXG4gICAgICAgICAgICBvcGZzQ2FjaGU6IG51bGwsXG5cbiAgICAgICAgICAgIG51bVJlcXVlc3RzOiAwLFxuXG4gICAgICAgICAgICBwZW5kaW5nRm9yTmV0d29yazogW10sXG5cbiAgICAgICAgICAgIC8vIEtlZXBzIGJhdGNoZXMgb2YgZ2VvbXMgdG8gYmUgc2VudCB0byBkZWNvZGVyIHRocmVhZHNcbiAgICAgICAgICAgIF9wZW5kaW5nR2VvbUhhc2hlczogW10sXG4gICAgICAgICAgICBfcGVuZGluZ0dlb21zOiBbXSxcbiAgICAgICAgICAgIF9wZW5kaW5nRnJvbUNhY2hlOiBbXSxcbiAgICAgICAgICAgIF9wZW5kaW5nVHJhbnNmZXJMaXN0OiBbXSxcblxuICAgICAgICAgICAgLy8gVHJhY2sgdG90YWwgY291bnRzIHRvIHNpbXBsaWZ5IGRlYnVnZ2luZ1xuICAgICAgICAgICAgX3JlcXVlc3RzU2VudDogMCxcbiAgICAgICAgICAgIF9yZXF1ZXN0c1JlY2VpdmVkOiAwLFxuXG4gICAgICAgICAgICBkZWNvZGVyUG9ydHM6IFtdLFxuICAgICAgICAgICAgbmV4dFBvcnRJbmRleDogMCxcblxuICAgICAgICAgICAgYW5hbHl0aWNzRm9ySHR0cEZhbGxiYWNrU2VudDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvYWRDb250ZXh0Lndvcmtlci5jdHg7XG59XG5cbmZ1bmN0aW9uIGRvSW5pdEdlb21Xb3JrZXIobG9hZENvbnRleHQpIHtcbiAgICB2YXIgY3R4ID0gZ2V0V29ya2VyQ29udGV4dChsb2FkQ29udGV4dCk7XG5cbiAgICBpZiAoIWxvYWRDb250ZXh0LmRpc2FibGVXZWJTb2NrZXQpIHtcbiAgICAgICAgY29uc3Qgb25SZXNvdXJjZXNSZWNlaXZlZCA9IChoYXNoZXMsIGxpbmVhZ2VVcm5zLCBhcnJheXMsIHJlc291cmNlVHlwZSkgPT4gb25DZG5SZXNvdXJjZXNSZWNlaXZlZChsb2FkQ29udGV4dCwgaGFzaGVzLCBsaW5lYWdlVXJucywgYXJyYXlzLCBmYWxzZSwgcmVzb3VyY2VUeXBlKTtcbiAgICAgICAgY29uc3Qgb25SZXNvdXJjZUZhaWxlZCA9IChoYXNoLCByZXNvdXJjZVR5cGUsIGVycm9yTWVzc2FnZSkgPT4gb25DZG5SZXNvdXJjZUZhaWxlZChsb2FkQ29udGV4dCwgaGFzaCwgcmVzb3VyY2VUeXBlLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICBjb25zdCBvbkNvbm5lY3Rpb25GYWlsZWQgPSAoaW5wcm9ncmVzcykgPT4gcmV0cnlQZW5kaW5nKGxvYWRDb250ZXh0LCBpbnByb2dyZXNzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOVU1fV0VCU09DS0VUUzsgaSsrKSB7XG4gICAgICAgICAgICBjdHgub3Rnd3MucHVzaChuZXcgT3RnV3MobG9hZENvbnRleHQub3RnX3dzLCBsb2FkQ29udGV4dC5xdWVyeVBhcmFtcywgbG9hZENvbnRleHQuaGVhZGVycywgb25SZXNvdXJjZXNSZWNlaXZlZCwgb25SZXNvdXJjZUZhaWxlZCwgb25Db25uZWN0aW9uRmFpbGVkKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9hZENvbnRleHQudXNlT3Bmcykge1xuICAgICAgICBjb25zdCBhbmFseXRpY3NDYWxsYmFjayA9IChldmVudCwgcHJvcGVydGllcykgPT4ge1xuICAgICAgICAgICAgbG9hZENvbnRleHQud29ya2VyLnBvc3RNZXNzYWdlKHtldmVudCwgcHJvcGVydGllc30pO1xuICAgICAgICB9O1xuICAgICAgICBjdHgub3Bmc0NhY2hlID0gbmV3IE9QRlNDYWNoZShhbmFseXRpY3NDYWxsYmFjayk7XG4gICAgICAgIGlmIChsb2FkQ29udGV4dC5jbGVhckluZGV4ZWREYklmSXRzTGFyZ2UpIHtcbiAgICAgICAgICAgIGNsZWFySW5kZXhlZERiSWZJdHNMYXJnZSgpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmxvY2FsRGJDYWNoZSA9IG5ldyBMb2NhbERiQ2FjaGUobG9hZENvbnRleHQuZGlzYWJsZUluZGV4ZWREYik7XG4gICAgICAgIGN0eC5sb2NhbERiQ2FjaGUub3BlbihudWxsKTtcbiAgICB9XG5cbiAgICBjdHguZGVjb2RlclBvcnRzID0gbG9hZENvbnRleHQucG9ydHM7XG59XG5cbmZ1bmN0aW9uIGRvQWRkTW9kZWwobG9hZENvbnRleHQpIHtcbiAgICB2YXIgY3R4ID0gZ2V0V29ya2VyQ29udGV4dChsb2FkQ29udGV4dCk7XG4gICAgZm9yIChjb25zdCB3cyBvZiBjdHgub3Rnd3MpIHtcbiAgICAgICAgd3MuYWRkQXV0aG9yaXplVXJuKGxvYWRDb250ZXh0Lm1vZGVsVXJuKTtcbiAgICB9XG4gICAgaWYgKGxvYWRDb250ZXh0LnVzZU9wZnMpIHtcbiAgICAgICAgY3R4Lm9wZnNDYWNoZS5vcGVuKGxvYWRDb250ZXh0LmxpbmVhZ2VVcm4pO1xuICAgIH1cblxuICAgIGlmICghY3R4LmZsdXNoTWVzc2FnZXMpIHtcbiAgICAgICAgY3R4LmZsdXNoTWVzc2FnZXMgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBfbG9hZENkblJlc291cmNlRnJvbU5ldHdvcmtCYXRjaChsb2FkQ29udGV4dCk7XG4gICAgICAgICAgICBmbHVzaE1lc3NhZ2VzVG9EZWNvZGVyVGhyZWFkKGxvYWRDb250ZXh0KTtcbiAgICAgICAgfSwgMjUpO1xuICAgIH1cbn1cblxuLy8gVXNlIGN1c3RvbSBlcnJvciBoYW5kbGVyOiBJdCAgZm9yd2FyZHMgdG8gdGhlIGRlZmF1bHQgb25lLCBidXQuLi5cbi8vICAxLiBhZGRzIHRoZSBnZW9tZXRyeSBoYXNoIHRvIHRoZSBlcnJvciBtZXNzYWdlLiBUaGlzIGlzIG5lZWRlZCBieSB0aGUgZ2VvbWV0cnkgY2FjaGUuXG4vLyAgICAgV2UgdXNlIGl0IHRvIGRldGVybWluZSBmb3Igd2hpY2ggZ2VvbWV0cnkgdGhlIHByb2JsZW0gb2NjdXJyZWQsIHNvIHRoYXQgdGhlIGFmZmVjdGVkXG4vLyAgICAgbG9hZGVycyBjYW4gYmUgaW5mb3JtZWQgKHNlZSBPdGdSZXNvdXJjZUNhY2hlLmpzKS5cbi8vICAyLiBJZiBhbnkgb3RoZXIgcmVxdWVzdHMgd2VyZSBibG9ja2VkIGJlZm9yZSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhcmFsbGVsXG4vLyAgICAgcmVxdWVzdHMsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlc2UgZW5xdWV1ZWQgcmVxdWVzdHMgYXJlIHByb2Nlc3NlZCB0b28uXG5mdW5jdGlvbiBnZXRIdHRwRXJyb3JIYW5kbGVyKGxvYWRDb250ZXh0LCBoYXNoLCByZXNvdXJjZVR5cGUpIHtcbiAgICBcbiAgICAvLyBhZGQgZXJyb3IgaGFuZGxlciB0byBvdmVycmlkZSByYWlzZUVycm9yIGZ1bmN0aW9uXG4gICAgdmFyIGVycm9ySGFuZGxlciA9IHtcbiAgICAgICAgLy8gYWRkIGhhc2ggYW5kIHBhc3Mgb24gdG8gbG9hZENvbnRleHQucmFpc2VFcnJvci5cbiAgICAgICAgcmFpc2VFcnJvcjogZnVuY3Rpb24oY29kZSwgbXNnLCBhcmdzKSB7XG4gICAgICAgICAgICBhcmdzLmhhc2ggPSBoYXNoO1xuICAgICAgICAgICAgYXJncy5yZXNvdXJjZVR5cGUgPSByZXNvdXJjZVR5cGU7XG4gICAgICAgICAgICBsb2FkQ29udGV4dC5yYWlzZUVycm9yKGNvZGUsIG1zZywgYXJncyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBmb3J3YXJkIHRvIGRlZmF1bHQgZXJyb3IgaGFuZGxlclxuICAgICAgICBWaWV3aW5nU2VydmljZS5kZWZhdWx0RmFpbHVyZUNhbGxiYWNrLmFwcGx5KGVycm9ySGFuZGxlciwgYXJndW1lbnRzKTtcblxuICAgICAgICBvbkNkblJlc291cmNlUHJvY2Vzc2VkKGxvYWRDb250ZXh0KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBvbkNkblJlc291cmNlRmFpbGVkKGxvYWRDb250ZXh0LCBoYXNoLCByZXNvdXJjZVR5cGUsIGVycm9yTWVzc2FnZSkge1xuICAgIGxvYWRDb250ZXh0LnJhaXNlRXJyb3IobnVsbCwgZXJyb3JNZXNzYWdlLCB7aGFzaDpoYXNoLCByZXNvdXJjZVR5cGU6cmVzb3VyY2VUeXBlfSk7XG4gICAgb25DZG5SZXNvdXJjZVByb2Nlc3NlZChsb2FkQ29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5UGVuZGluZyhsb2FkQ29udGV4dCwgaW5wcm9ncmVzcykge1xuICAgIGZvciAoY29uc3QgW2hhc2gsIHZhbHVlXSBvZiBpbnByb2dyZXNzKSB7XG4gICAgICAgIGxvYWRDb250ZXh0LnF1ZXJ5UGFyYW1zID0gdmFsdWUucXVlcnlQYXJhbXM7XG4gICAgICAgIGxvYWRDZG5SZXNvdXJjZXMobG9hZENvbnRleHQsIFtoYXNoXSwgW3ZhbHVlLnVybF0sIFt2YWx1ZS5saW5lYWdlVXJuXSwgdmFsdWUudHlwZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0d6aXAoZGF0YSkge1xuICAgIHJldHVybiBkYXRhWzBdID09PSAzMSAmJiBkYXRhWzFdID09PSAxMzk7XG59XG5cbmZ1bmN0aW9uIG9uQ2RuUmVzb3VyY2VzUmVjZWl2ZWQobG9hZENvbnRleHQsIGhhc2hlcywgbGluZWFnZVVybnMsIGFycmF5cywgc2tpcENhY2hlLCByZXNvdXJjZVR5cGUpIHtcbiAgICBjb25zdCBjdHggPSBnZXRXb3JrZXJDb250ZXh0KGxvYWRDb250ZXh0KTtcblxuICAgIGlmICghc2tpcENhY2hlKSB7XG4gICAgICAgIGlmIChjdHgub3Bmc0NhY2hlKSB7XG4gICAgICAgICAgICBjdHgub3Bmc0NhY2hlLnN0b3JlKGhhc2hlcywgbGluZWFnZVVybnMsIGFycmF5cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoZXNbaV07XG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBhcnJheXNbaV07XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIEhUVFAgZmFsbGJhY2sgd2FzIHVzZWQsIHRoZSBicm93c2VyIGFscmVhZHkgZGlkIHRoZSBkZWNvbXByZXNzaW9uXG4gICAgICAgICAgICAgICAgLy8gQWxzbywgd2UgZGlkIGVuY291bnRlciB1bmNvbXByZXNzZWQgYmxvYnMgaW4gcHJvZHVjdGlvbi5cbiAgICAgICAgICAgICAgICBpZiAoIWlzR3ppcChkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gZ3ppcFN5bmMoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5sb2NhbERiQ2FjaGU/LnN0b3JlKGhhc2gsIGRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIGN0eC5vcGZzQ2FjaGU/LnN0b3JlKGhhc2gsIGxpbmVhZ2VVcm5zW2ldLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXNvdXJjZVR5cGUgPT09IFwibVwiKSB7XG4gICAgICAgIC8vUG9zdCBtYXRlcmlhbHMgYXMgc29vbiBhcyBwb3NzaWJsZSB3aXRob3V0IGJhdGNoaW5nIC0tIHRob3NlIGFyZSBmZXdlclxuICAgICAgICAvL2FuZCBtb3JlIGNyaXRpY2FsIGFzIHRoZXkgYXJlIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgbWVzaGVzLlxuICAgICAgICBjb25zdCBwb3J0ID0gY3R4LmRlY29kZXJQb3J0c1tjdHgubmV4dFBvcnRJbmRleF07XG4gICAgICAgIGN0eC5uZXh0UG9ydEluZGV4ID0gKytjdHgubmV4dFBvcnRJbmRleCAlIGN0eC5kZWNvZGVyUG9ydHMubGVuZ3RoO1xuICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogXCJERUNPREVfTUFURVJJQUxTXCIsXG4gICAgICAgICAgICBoYXNoZXM6IGhhc2hlcyxcbiAgICAgICAgICAgIGFycmF5czogYXJyYXlzLFxuICAgICAgICB9LCBbYXJyYXlzWzBdLmJ1ZmZlcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEVhY2ggbWVzc2FnZSBoYXMgYSBiaXQgb2Ygb3ZlcmhlYWQsIGJvdGggd2hlbiBzZW5kaW5nIGFuZCByZWNlaXZpbmcsXG4gICAgICAgIC8vIGFuZCBib3RoIGluIHRoZSBkZWNvZGVyIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkIGFmdGVyd2FyZHMuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBiYXRjaCBoZXJlLCBldmVuIHRob3VnaCBpdCBpbnRyb2R1Y2VzIGEgYml0IG9mIGxhdGVuY3kuXG4gICAgICAgIC8vIElkZWFsbHksIGNhY2hlIGFuZCB3ZWJzb2NrZXRzIHdvdWxkIGFsd2F5cyByZXR1cm4gYmF0Y2hlcywgdGhlbiB3ZSBjb3VsZCByZW1vdmUgdGhpcy5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoZXNbaV07XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXJyYXlzW2ldO1xuICAgICAgICAgICAgY3R4Ll9wZW5kaW5nR2VvbUhhc2hlcy5wdXNoKGhhc2gpO1xuICAgICAgICAgICAgY3R4Ll9wZW5kaW5nR2VvbXMucHVzaChkYXRhKTtcbiAgICAgICAgICAgIGN0eC5fcGVuZGluZ0Zyb21DYWNoZS5wdXNoKHNraXBDYWNoZSk7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBkYXRhLmJ1ZmZlciAhPT0gYXJyYXlzWzBdLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIGN0eC5fcGVuZGluZ1RyYW5zZmVyTGlzdC5wdXNoKGRhdGEuYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTaW5jZSB0aGUgT1BGUyBjYWNoZSBjYW4gcmV0dXJuIHZlcnkgbGFyZ2UgYmF0Y2hlcywgXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IGJhdGNoZXMgYXJlIHNwbGl0IGFjcm9zcyBkZWNvZGVyIHRocmVhZHMuXG4gICAgICAgIGlmIChjdHguX3BlbmRpbmdHZW9tSGFzaGVzLmxlbmd0aCA+IDUwKSB7XG4gICAgICAgICAgICBmbHVzaE1lc3NhZ2VzVG9EZWNvZGVyVGhyZWFkKGxvYWRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNkblJlc291cmNlUHJvY2Vzc2VkKGxvYWRDb250ZXh0LCBoYXNoZXMubGVuZ3RoKTtcbn1cblxuLy8gU2VuZHMgcmVjZW50bHkgcmVjZWl2ZWQgKHNpbmNlIGxhc3QgZmx1c2gpIHJlc291cmNlcyB0byB0aGUgZGVjb2RlcnNcbmZ1bmN0aW9uIGZsdXNoTWVzc2FnZXNUb0RlY29kZXJUaHJlYWQobG9hZENvbnRleHQpIHtcblxuICAgIHZhciBjdHggPSBnZXRXb3JrZXJDb250ZXh0KGxvYWRDb250ZXh0KTtcblxuICAgIGlmICghY3R4Ll9wZW5kaW5nR2VvbUhhc2hlcy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHBvcnQgPSBjdHguZGVjb2RlclBvcnRzW2N0eC5uZXh0UG9ydEluZGV4XTtcbiAgICBjdHgubmV4dFBvcnRJbmRleCA9ICsrY3R4Lm5leHRQb3J0SW5kZXggJSBjdHguZGVjb2RlclBvcnRzLmxlbmd0aDtcbiAgICBwb3J0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgb3BlcmF0aW9uOiBcIkRFQ09ERV9HRU9NRVRSSUVTXCIsXG4gICAgICAgIGhhc2hlczogY3R4Ll9wZW5kaW5nR2VvbUhhc2hlcyxcbiAgICAgICAgYXJyYXlzOiBjdHguX3BlbmRpbmdHZW9tcyxcbiAgICAgICAgZnJvbUNhY2hlOiBjdHguX3BlbmRpbmdGcm9tQ2FjaGUsXG4gICAgfSwgY3R4Ll9wZW5kaW5nVHJhbnNmZXJMaXN0KTtcblxuICAgIGN0eC5fcGVuZGluZ0dlb21IYXNoZXMgPSBbXTtcbiAgICBjdHguX3BlbmRpbmdHZW9tcyA9IFtdO1xuICAgIGN0eC5fcGVuZGluZ0Zyb21DYWNoZSA9IFtdO1xuICAgIGN0eC5fcGVuZGluZ1RyYW5zZmVyTGlzdCA9IFtdO1xufVxuXG5mdW5jdGlvbiBvbkNkblJlc291cmNlUHJvY2Vzc2VkKGxvYWRDb250ZXh0LCBudW1SZXNvdXJjZXNQcm9jZXNzZWQgPSAxKSB7XG4gICAgY29uc3QgY3R4ID0gZ2V0V29ya2VyQ29udGV4dChsb2FkQ29udGV4dCk7XG5cbiAgICBjdHgubnVtUmVxdWVzdHMgLT0gbnVtUmVzb3VyY2VzUHJvY2Vzc2VkO1xuICAgIGN0eC5fcmVxdWVzdHNSZWNlaXZlZCArPSBudW1SZXNvdXJjZXNQcm9jZXNzZWQ7XG5cbiAgICBpZiAoY3R4LmZsdXNoQ2FjaGVBbmREaXNjb25uZWN0UmVxdWVzdGVkICYmICFjdHgubnVtUmVxdWVzdHMgJiYgIWN0eC5fcGVuZGluZ0dlb21IYXNoZXMubGVuZ3RoKSB7XG4gICAgICAgIGRvRmx1c2hDYWNoZUFuZERpc2Nvbm5lY3QobG9hZENvbnRleHQpO1xuICAgICAgICBjdHguZmx1c2hDYWNoZUFuZERpc2Nvbm5lY3RSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB9XG59XG5cbi8vIFJlcXVlc3QgcmF3IGdlb21ldHJ5IGRhdGEgKGFycmF5YnVmZmVyKSBhbmQgZm9yd2FyZCByZXN1bHQgdG8gb25DZG5SZXNvdXJjZXNSZWNlaXZlZCBvbmNlIGl0IGlzIGF2YWlsYWJsZVxuLy8gIEBwYXJhbSB7T2JqZWN0fSAgICAgbG9hZENvbnRleHQgLSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcmVjZWl2aW5nIGNhbGxiYWNrXG4vLyAgQHBhcmFtIHtTdHJpbmdbXX0gICBoYXNoZXMgLSBoYXNoZXMgb2YgdGhlIHJlc291cmNlc1xuLy8gIEBwYXJhbSB7U3RyaW5nW119ICAgdXJscyAtIHVybHMgb2YgdGhlIG5ldHdvcmsgcmVzb3VyY2VzXG4vLyAgQHBhcmFtIHtTdHJpbmdbXX0gICBsaW5lYWdlVXJucyAtIGxpbmVhZ2UgVXJucyBvZiB0aGUgcmVzb3VyY2VzXG4vLyAgQHBhcmFtIHtTdHJpbmd9ICAgICByZXNvdXJjZVR5cGUgLSBcIm1cIiBmb3IgbWF0ZXJpYWwgYW5kIFwiZ1wiIGZvciBnZW9tZXRyeVxuLy8gIEBwYXJhbSB7Qm9vbGVhbltdfSAgY291bGRCZUluQ2FjaGVBcnJheSAtIE9uZSBlbnRyeSBwZXIgcmVzb3VyY2UsIGZhbHNlIGlmIHRoZSByZXNvdXJjZSBjYW4ndCBiZSBpbiB0aGUgY2FjaGUgKGkuZS4sIHNraXAgdGhlIGNhY2hlIGFuZCBkaXJlY3RseSBsb2FkIGZyb20gdGhlIG5ldHdvcmspXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0cnVlIGFuZCBub3QgaW4gY2FjaGUsIHRoZSBkYXRhIGlzIHN0aWxsIHJlcXVlc3RlZCBmcm9tIHRoZSBuZXR3b3JrXG5mdW5jdGlvbiBsb2FkQ2RuUmVzb3VyY2VzKGxvYWRDb250ZXh0LCBoYXNoZXMsIHVybHMsIGxpbmVhZ2VVcm5zLCByZXNvdXJjZVR5cGUsIGNvdWxkQmVJbkNhY2hlQXJyYXkpIHtcblxuICAgIHZhciBjdHggPSBnZXRXb3JrZXJDb250ZXh0KGxvYWRDb250ZXh0KTtcblxuICAgIGN0eC5fcmVxdWVzdHNTZW50ICs9IGhhc2hlcy5sZW5ndGg7XG5cbiAgICBpZiAoY3R4Lm9wZnNDYWNoZSkge1xuICAgICAgICBjdHgub3Bmc0NhY2hlLmdldChoYXNoZXMsIGxpbmVhZ2VVcm5zKS50aGVuKChkYXRhcykgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNoID0gaGFzaGVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHVybHNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZWFnZVVybiA9IGxpbmVhZ2VVcm5zW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkYXRhc1tpXTtcblxuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ2RuUmVzb3VyY2VzUmVjZWl2ZWQobG9hZENvbnRleHQsIFtoYXNoXSwgW2xpbmVhZ2VVcm5dLCBbZGF0YV0sIHRydWUsIHJlc291cmNlVHlwZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnBlbmRpbmdGb3JOZXR3b3JrLnB1c2goW2hhc2gsIHVybCwgbGluZWFnZVVybiwgcmVzb3VyY2VUeXBlLCBsb2FkQ29udGV4dC5xdWVyeVBhcmFtc10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjdHgubG9jYWxEYkNhY2hlKSB7XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTx1cmxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNoID0gaGFzaGVzW2ldO1xuICAgICAgICAgICAgY29uc3QgdXJsID0gdXJsc1tpXTtcbiAgICAgICAgICAgIGlmICghY291bGRCZUluQ2FjaGVBcnJheSB8fCBjb3VsZEJlSW5DYWNoZUFycmF5W2ldKSB7XG4gICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIEluZGV4ZWREYiBzZXNzaW9uIGlzIHN0YXJ0ZWQgYmVmb3JlIHdlIGFzayB0byBnZXQoKSBhbnl0aGluZy5cbiAgICAgICAgICAgICAgICAvL1RoaXMgaXMgZG9uZSBieSBhIGNhbGwgdG8gb3Blbiwgd2hpY2ggd2lsbCBjYWxsIHVzIGJhY2sgaW1tZWRpYXRlbHksIG9yIGRlbGF5IHVudGlsXG4gICAgICAgICAgICAgICAgLy90aGUgZGF0YWJhc2UgaXMgb3Blbi5cbiAgICAgICAgICAgICAgICBjdHgubG9jYWxEYkNhY2hlLm9wZW4oKCkgPT4gY3R4LmxvY2FsRGJDYWNoZS5nZXQoaGFzaCwgZnVuY3Rpb24oZXJyb3IsIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2RuUmVzb3VyY2VzUmVjZWl2ZWQobG9hZENvbnRleHQsIFtoYXNoXSwgW1wiXCJdLCBbZGF0YV0sIHRydWUsIHJlc291cmNlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgucGVuZGluZ0Zvck5ldHdvcmsucHVzaChbaGFzaCwgdXJsLCBcIlwiLCByZXNvdXJjZVR5cGUsIGxvYWRDb250ZXh0LnF1ZXJ5UGFyYW1zXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5wZW5kaW5nRm9yTmV0d29yay5wdXNoKFtoYXNoLCB1cmwsIFwiXCIsIHJlc291cmNlVHlwZSwgbG9hZENvbnRleHQucXVlcnlQYXJhbXNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5mdW5jdGlvbiBfbG9hZENkblJlc291cmNlRnJvbU5ldHdvcmtCYXRjaChsb2FkQ29udGV4dCkge1xuICAgIHZhciBjdHggPSBnZXRXb3JrZXJDb250ZXh0KGxvYWRDb250ZXh0KTtcblxuICAgIGlmIChjdHgucGVuZGluZ0Zvck5ldHdvcmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGZpbGwgdGhlIHF1ZXVlIG9mIG9wZW4gV1MuIE5vbi1vcGVuIFdTIG1pZ2h0IHRha2UgYSBmZXcgc2Vjb25kcyB0byBvcGVuOiBcbiAgICAvLyBDaHJvbWUgYW5kIEZpcmVmb3ggdGhyb3R0bGUgb3BlbmluZyBXUyB0byBvbmUgcGVyIH41MDBtcywgc28gdGhlIGVpZ2h0aCBXUyB3b3VsZCBvcGVuIG9ubHkgYWZ0ZXIgMy41cy5cbiAgICAvLyBBbHNvLCB0aGUgV1MgbWlnaHQgY3VycmVudGx5IGJlIGF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGFuIGVycm9yLlxuICAgIGxldCBvcGVuV1MgPSBbXTtcbiAgICBsZXQgbnVtTm9uYnJva2VuV3MgPSAwO1xuICAgIGxldCB0b3RhbEluRmxpZ2h0UmVxdWVzdHMgPSAwO1xuICAgIGZvciAoY29uc3Qgd3Mgb2YgY3R4Lm90Z3dzKSB7XG4gICAgICAgIGlmICghd3MuaGFzUGVybWFuZW50RXJyb3IpIHtcbiAgICAgICAgICAgIG51bU5vbmJyb2tlbldzKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdzLndzPy5yZWFkeVN0YXRlID09PSBTVEFURS5PUEVOKSB7XG4gICAgICAgICAgICBvcGVuV1MucHVzaCh3cyk7XG4gICAgICAgICAgICB0b3RhbEluRmxpZ2h0UmVxdWVzdHMgKz0gd3MuaW5GbGlnaHRSZXF1ZXN0cy5zaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVhc29ucyB0aGV5IG1pZ2h0IG5lZWQgb3BlbmluZzogMS4gV1Mgd2FzIGp1c3QgaW5pdGlhbGl6ZWQgMi4gV1Mgd2FzIGNsb3NlZCBkdWUgdG8gbW9kZWwvdmlldyBjaGFuZ2luZyAzLiBzZXJ2ZXIgY2xvc2VkIGl0IGR1ZSB0byBlLmcuIHRpbWVvdXRcbiAgICAgICAgICAgIHdzLl9vcGVuV2ViU29ja2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobnVtTm9uYnJva2VuV3MgPT09IDApIHtcbiAgICAgICAgaWYgKCFjdHguYW5hbHl0aWNzRm9ySHR0cEZhbGxiYWNrU2VudCkge1xuICAgICAgICAgICAgY3R4LmFuYWx5dGljc0Zvckh0dHBGYWxsYmFja1NlbnQgPSB0cnVlO1xuICAgICAgICAgICAgbG9hZENvbnRleHQud29ya2VyLnBvc3RNZXNzYWdlKHtldmVudDogXCJPVEdfRkFMTEJBQ0tfVE9fSFRUUFwiLCBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgd3NTdGF0ZXM6IGN0eC5vdGd3cy5tYXAod3MgPT4gd3Mud3M/LnJlYWR5U3RhdGUpLFxuICAgICAgICAgICAgICAgIHdzTGFzdEVycm9yTnVtSW5GbGlnaHQ6IGN0eC5vdGd3cy5tYXAod3MgPT4gd3MubGFzdEVycm9yTnVtSW5GbGlnaHQpLFxuICAgICAgICAgICAgICAgIHdzTGFzdEVycm9yUmVhc29uczogY3R4Lm90Z3dzLm1hcCh3cyA9PiB3cy5sYXN0RXJyb3I/LnJlYXNvbiksXG4gICAgICAgICAgICAgICAgd3NMYXN0RXJyb3JDb2RlczogY3R4Lm90Z3dzLm1hcCh3cyA9PiB3cy5sYXN0RXJyb3I/LmNvZGUpLFxuICAgICAgICAgICAgfX0pO1xuICAgICAgICB9XG4gICAgICAgIC8vRmFsbGJhY2sgdG8gWEhSL0hUVFAyXG4gICAgICAgIGZvciAoY29uc3QgW2hhc2gsIHVybCwgbGluZWFnZVVybiwgcmVzb3VyY2VUeXBlLCBxdWVyeVBhcmFtc10gb2YgY3R4LnBlbmRpbmdGb3JOZXR3b3JrKSB7XG4gICAgICAgICAgICBsb2FkQ29udGV4dC5xdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgVmlld2luZ1NlcnZpY2UuZ2V0SXRlbShcbiAgICAgICAgICAgICAgICBsb2FkQ29udGV4dCxcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgKGRhdGEpID0+IG9uQ2RuUmVzb3VyY2VzUmVjZWl2ZWQobG9hZENvbnRleHQsIFtoYXNoXSwgW2xpbmVhZ2VVcm5dLCBbZGF0YV0sIGZhbHNlLCByZXNvdXJjZVR5cGUpLFxuICAgICAgICAgICAgICAgIGdldEh0dHBFcnJvckhhbmRsZXIobG9hZENvbnRleHQsIGhhc2gsIHJlc291cmNlVHlwZSksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcbiAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjdHgucGVuZGluZ0Zvck5ldHdvcmsgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcGVuV1MubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB3c1NvcnRlZEJ5TG9hZCA9IG9wZW5XUy5zb3J0KChhLCBiKSA9PiBhLmluRmxpZ2h0UmVxdWVzdHMuc2l6ZSAtIGIuaW5GbGlnaHRSZXF1ZXN0cy5zaXplKTtcblxuICAgIC8vIERvIGxvYWQgYmFsYW5jaW5nIGFtb25nIFdTOiBldmVyeSByZXF1ZXN0IHNob3VsZCBnbyB0byB0aGUgV1Mgd2hpY2ggaXMgY3VycmVudGx5IGxlYXN0IGJ1c3kuXG4gICAgLy8gSW4gb3RoZXIgd29yZHMsIHRoZSBtaW5pbXVtIG9mIHRoZSBXUydzIGluRmxpZ2h0UmVxdWVzdHMuc2l6ZSBzaG91bGQgYmUgYXMgaGlnaCBhcyBwb3NzaWJsZSxcbiAgICAvLyBvdGhlcndpc2UgdGhhdCB3b3VsZCBtZWFuIHRoYXQgc29tZSBXUyBhcmUgdW5kZXJ1dGlsaXplZC5cbiAgICAvLyBUbyBhY2hpZXZlIHRoYXQsIHN0YXJ0aW5nIHdpdGggdGhlIGxlYXN0IGJ1c3kgV1MsIHdlIHJhaXNlIHRoZSB0YXJnZXRlZCByZXF1ZXN0cyBpbiBmbGlnaHRcbiAgICAvLyBzbyB0aGF0IGFmdGVyIGl0ZXJhdGlvbiBuLCB0aGUgbiBsZWFzdCBidXN5IFdTIGFyZSB1dGlsaXplZCBlcXVhbGx5LCB1bnRpbCBhbGwgaW5jb21pbmcgcmVxdWVzdHMgYXJlIGRpc3RyaWJ1dGVkLlxuICAgIGxldCByZXF1ZXN0c1RvRGlzdHJpYnV0ZSA9IGN0eC5wZW5kaW5nRm9yTmV0d29yay5sZW5ndGg7XG4gICAgbGV0IHRhcmdldFJlcXVlc3RzSW5GbGlnaHQgPSB3c1NvcnRlZEJ5TG9hZFswXS5pbkZsaWdodFJlcXVlc3RzLnNpemU7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB3c1NvcnRlZEJ5TG9hZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByYWlzZVRhcmdldEJ5ID0gd3NTb3J0ZWRCeUxvYWRbaV0uaW5GbGlnaHRSZXF1ZXN0cy5zaXplIC0gdGFyZ2V0UmVxdWVzdHNJbkZsaWdodDtcbiAgICAgICAgcmVxdWVzdHNUb0Rpc3RyaWJ1dGUgLT0gcmFpc2VUYXJnZXRCeSAqIGk7XG4gICAgICAgIHRhcmdldFJlcXVlc3RzSW5GbGlnaHQgKz0gcmFpc2VUYXJnZXRCeTtcbiAgICAgICAgaWYgKHJlcXVlc3RzVG9EaXN0cmlidXRlIDw9IDApIHtcbiAgICAgICAgICAgIHdzU29ydGVkQnlMb2FkLmxlbmd0aCA9IGk7IC8vIGN1dCBvdXQgV1MgdGhhdCB3ZSB3b24ndCB1c2UgYW55d2F5XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBtb3JlIHJlcXVlc3RzIGxlZnQsIGRpc3RyaWJ1dGUgdGhlbSBlcXVhbGx5IGFjcm9zcyBhbGwgV1MsXG4gICAgLy8gb3IgaWYgdGFyZ2V0UmVxdWVzdHNJbkZsaWdodCBnb3QgdG9vIGhpZ2ggKGkuZS4gaWYgcmVxdWVzdHNUb0Rpc3RyaWJ1dGUgPCAwKSwgdHJpbSBpdCBkb3duLlxuICAgIHRhcmdldFJlcXVlc3RzSW5GbGlnaHQgKz0gTWF0aC5jZWlsKHJlcXVlc3RzVG9EaXN0cmlidXRlIC8gd3NTb3J0ZWRCeUxvYWQubGVuZ3RoKTtcbiAgICBcbiAgICAvLyBJZiB0aGVyZSBhcmUgc29tZSBXUyBub3QteWV0LW9wZW4sIGtlZXAgd29yayBpbiB0aGUgcXVldWUgZm9yIHRoZW0gYW5kIG5vdCBvdmVybG9hZCB0aGUgb3BlbiBvbmVzXG4gICAgY29uc3QgdG90YWxSZXF1ZXN0cyA9IHRvdGFsSW5GbGlnaHRSZXF1ZXN0cyArIGN0eC5wZW5kaW5nRm9yTmV0d29yay5sZW5ndGg7XG4gICAgdGFyZ2V0UmVxdWVzdHNJbkZsaWdodCA9IE1hdGgubWluKHRhcmdldFJlcXVlc3RzSW5GbGlnaHQsIE1hdGguY2VpbCh0b3RhbFJlcXVlc3RzIC8gbnVtTm9uYnJva2VuV3MpKTtcblxuICAgIGZvciAobGV0IGkgPSB3c1NvcnRlZEJ5TG9hZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCB3cyA9IHdzU29ydGVkQnlMb2FkW2ldO1xuICAgICAgICBjb25zdCBudW1IYXNoZXNUb1NlbmQgPSB0YXJnZXRSZXF1ZXN0c0luRmxpZ2h0IC0gd3MuaW5GbGlnaHRSZXF1ZXN0cy5zaXplO1xuICAgIFxuICAgICAgICBpZiAobnVtSGFzaGVzVG9TZW5kIDwgU01BTExfTUVTU0FHRV9USFJFU0hPTEQgJiYgIShpID09IDAgJiYgdG90YWxSZXF1ZXN0cyA8IElOX0ZMSUdIVF9USFJFU0hPTERfRk9SX1NNQUxMX01FU1NBR0VTKSkge1xuICAgICAgICAgICAgLy8gTWVzc2FnZSBpcyB0b28gc21hbGwsIGRpc3RyaWJ1dGUgaXQgdG8gdGhlIG90aGVyIFdTXG4gICAgICAgICAgICB0YXJnZXRSZXF1ZXN0c0luRmxpZ2h0ICs9IE1hdGguY2VpbChudW1IYXNoZXNUb1NlbmQgLyBpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2hhc2gsIHVybCwgbGluZWFnZVVybiwgcmVzb3VyY2VUeXBlLCBxdWVyeVBhcmFtc10gb2YgY3R4LnBlbmRpbmdGb3JOZXR3b3JrLnNwbGljZSgwLCBudW1IYXNoZXNUb1NlbmQpKSB7XG4gICAgICAgICAgICB3cy5yZXF1ZXN0UmVzb3VyY2UodXJsLCBsaW5lYWdlVXJuLCBoYXNoLCByZXNvdXJjZVR5cGUsIHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICB3cy5fZmx1c2hTZW5kUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRvQ2RuUmVzb3VyY2VMb2FkKGxvYWRDb250ZXh0KSB7XG4gICAgdmFyIGN0eCA9IGdldFdvcmtlckNvbnRleHQobG9hZENvbnRleHQpO1xuXG4gICAgbG9hZENkblJlc291cmNlcyhsb2FkQ29udGV4dCwgbG9hZENvbnRleHQuaGFzaGVzLCBsb2FkQ29udGV4dC51cmxzLCBsb2FkQ29udGV4dC5saW5lYWdlVXJucywgbG9hZENvbnRleHQudHlwZSwgbG9hZENvbnRleHQuY291bGRCZUluQ2FjaGUpO1xuICAgIGN0eC5udW1SZXF1ZXN0cyArPSBsb2FkQ29udGV4dC51cmxzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdEZsdXNoQ2FjaGVBbmREaXNjb25uZWN0KGxvYWRDb250ZXh0KSB7XG4gICAgdmFyIGN0eCA9IGdldFdvcmtlckNvbnRleHQobG9hZENvbnRleHQpO1xuICAgIC8vIElmIHRoZXJlIGFyZSBzdGlsbCByZXF1ZXN0cyBpbiBmbGlnaHQsIHdlJ3JlIGxpa2VseSBzd2l0Y2hpbmcgdmlld3MsIGFuZCBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBjbG9zZSB0aGVcbiAgICAvLyB3ZWJzb2NrZXRzIG5vdywgYmVjYXVzZSB0aGUgbmV3IHZpZXcgd291bGQganVzdCByZS1vcGVuIHRoZW0gYWdhaW4gd2l0aCBzb21lIGRlbGF5LlxuICAgIC8vIFNvIHdlIGp1c3Qgc2V0IGEgZmxhZyBoZXJlLCBhbmQgYWN0dWFsbHkgY2xvc2UgdGhlIHdlYnNvY2tldHMgd2hlbiB0aGUgbGFzdCByZXF1ZXN0IGlzIHByb2Nlc3NlZC5cbiAgICAvLyBUaGlzIHdheSB3ZSBhbHNvIGRvbid0IGhhdmUgdG8gZG8gYW55IGNsZWFudXAgb2YgcmVxdWVzdHMgaW4gZmxpZ2h0LCB3ZSBjYW5ub3QgY2FuY2VsIGFueXRoaW5nIGFscmVhZHkgb24gdGhlIHdpcmUgYW55d2F5LlxuICAgIGN0eC5mbHVzaENhY2hlQW5kRGlzY29ubmVjdFJlcXVlc3RlZCA9IHRydWU7XG4gICAgb25DZG5SZXNvdXJjZVByb2Nlc3NlZChsb2FkQ29udGV4dCwgMCk7XG59XG5cbmZ1bmN0aW9uIGRvRmx1c2hDYWNoZUFuZERpc2Nvbm5lY3QobG9hZENvbnRleHQpIHtcblxuICAgIHZhciBjdHggPSBnZXRXb3JrZXJDb250ZXh0KGxvYWRDb250ZXh0KTtcblxuICAgIGlmIChjdHgubnVtUmVxdWVzdHMgfHwgY3R4Ll9wZW5kaW5nR2VvbUhhc2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIk90Z0xvYWRXb3JrZXIgZGlzY29ubmVjdCByZXF1ZXN0ZWQgZXZlbiB0aG91Z2ggdGhlcmUgYXJlIHJlcXVlc3RzIGluIGZsaWdodFwiKTtcbiAgICAgICAgZmx1c2hNZXNzYWdlc1RvRGVjb2RlclRocmVhZChsb2FkQ29udGV4dCk7XG4gICAgfVxuICAgIFxuICAgIGZvciAoY29uc3Qgd3Mgb2YgY3R4Lm90Z3dzKSB7XG4gICAgICAgIHdzLmNsb3NlV2ViU29ja2V0KCk7XG4gICAgfVxuXG4gICAgY2xlYXJJbnRlcnZhbChjdHguZmx1c2hNZXNzYWdlcyk7XG4gICAgY3R4LmZsdXNoTWVzc2FnZXMgPSBudWxsO1xuXG4gICAgY3R4LmxvY2FsRGJDYWNoZT8ub3BlbigoKSA9PiBjdHgubG9jYWxEYkNhY2hlLmZsdXNoU3RvcmVzQW5kVGltZXN0YW1wcygpKTtcbiAgICBjdHgub3Bmc0NhY2hlPy5jbG9zZSgpO1xufVxuXG4vLyBVc2FnZTogTk9QX1ZJRVdFUi5pbXBsLmdlb21DYWNoZSgpLmNsZWFyT3Bmc0NhY2hlKClcbmFzeW5jIGZ1bmN0aW9uIGRvQ2xlYXJPcGZzQ2FjaGUobG9hZENvbnRleHQpIHtcbiAgICB2YXIgY3R4ID0gZ2V0V29ya2VyQ29udGV4dChsb2FkQ29udGV4dCk7XG4gICAgYXdhaXQgY3R4Lm9wZnNDYWNoZT8uY2xlYXIoKTtcbiAgICBjb25zb2xlLmxvZygnT1BGUyBjYWNoZSBjbGVhcmVkJyk7XG59XG5cbi8vIEhlbHBlciB0YXNrIHRvIGZhY2lsaWF0ZSBjb25zb2xlIGRlYnVnZ2luZy5cbi8vIEhvdyB0byB1c2U6XG4vLyAgSWYgT1RHIGxvYWRpbmcgZ2V0cyBzdHVjaywgY2FsbCBOT1BfVklFV0VSLmltcGwuZ2VvbUNhY2hlKCkucmVwb3J0TG9hZGluZ1N0YXRlKClcbmZ1bmN0aW9uIGRvUmVwb3J0TG9hZGluZ1N0YXRlKGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgY3R4ID0gZ2V0V29ya2VyQ29udGV4dChsb2FkQ29udGV4dCk7XG5cbiAgICAvLyBVbmNvbW1lbnQgdG8gZGVidWcgYSB3b3JrZXIgdGhhdCBnb3Qgc3R1Y2s6XG4gICAgLy8gY29uc3QgcGVuZGluZyA9IGN0eC5fcmVxdWVzdHNTZW50IC0gY3R4Ll9yZXF1ZXN0c1JlY2VpdmVkO1xuICAgIC8vIGlmIChwZW5kaW5nKSB7XG4gICAgLy8gICAgIGRlYnVnZ2VyO1xuICAgIC8vIH1cblxuICAgIGNvbnN0IGxvYWRpbmdTdGF0ZSA9IHtcbiAgICAgICAgLy8gVG90YWwgbnVtYmVyIG9mIHNlbmQvcmVjZWl2ZSAoYWxzbyBpbmRleERCIGV0YylcbiAgICAgICAgc2VudDogY3R4Ll9yZXF1ZXN0c1NlbnQsXG4gICAgICAgIHJlY2VpdmVkOiBjdHguX3JlcXVlc3RzUmVjZWl2ZWQsXG5cbiAgICAgICAgLy8gQWN0dWFsIHdlYnNvY2tldCBzZW5kcy9yZWNlaXZlc1xuICAgICAgICB3c1NlbnQ6IGN0eC5vdGd3cy5tYXAod3MgPT4gd3MubnVtUmVxdWVzdHNTZW50KSxcbiAgICAgICAgd3NSZWNlaXZlZDogY3R4Lm90Z3dzLm1hcCh3cyA9PiB3cy5udW1SZXF1ZXN0c1JlY2VpdmVkKSxcbiAgICB9O1xuICAgIGNvbnNvbGUubG9nKCdXb3JrZXJTdGF0ZTogJywgbG9hZGluZ1N0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHdvcmtlck1haW4pIHtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiSU5JVF9XT1JLRVJfT1RHXCIsIHsgZG9PcGVyYXRpb246IGRvSW5pdEdlb21Xb3JrZXIgfSk7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIkFERF9NT0RFTF9PVEdcIiwgeyBkb09wZXJhdGlvbjogZG9BZGRNb2RlbCB9KTtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiTE9BRF9DRE5fUkVTT1VSQ0VfT1RHXCIsIHsgZG9PcGVyYXRpb246IGRvQ2RuUmVzb3VyY2VMb2FkIH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJGTFVTSF9DQUNIRV9BTkRfRElTQ09OTkVDVF9PVEdcIiwgeyBkb09wZXJhdGlvbjogcmVxdWVzdEZsdXNoQ2FjaGVBbmREaXNjb25uZWN0IH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJDTEVBUl9PUEZTX0NBQ0hFXCIsIHsgZG9PcGVyYXRpb246IGRvQ2xlYXJPcGZzQ2FjaGUgfSk7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIlJFUE9SVF9MT0FESU5HX1NUQVRFXCIsIHsgZG9PcGVyYXRpb246IGRvUmVwb3J0TG9hZGluZ1N0YXRlIH0pO1xufVxuIl0sIm5hbWVzIjpbIlZpZXdpbmdTZXJ2aWNlIiwiTG9jYWxEYkNhY2hlIiwiY2xlYXJJbmRleGVkRGJJZkl0c0xhcmdlIiwiT1BGU0NhY2hlIiwiZ3ppcFN5bmMiLCJPdGdXcyIsIlNUQVRFIiwiTlVNX1dFQlNPQ0tFVFMiLCJTTUFMTF9NRVNTQUdFX1RIUkVTSE9MRCIsIklOX0ZMSUdIVF9USFJFU0hPTERfRk9SX1NNQUxMX01FU1NBR0VTIiwiZ2V0V29ya2VyQ29udGV4dCIsImxvYWRDb250ZXh0Iiwid29ya2VyIiwiY3R4Iiwib3Rnd3MiLCJsb2NhbERiQ2FjaGUiLCJvcGZzQ2FjaGUiLCJudW1SZXF1ZXN0cyIsInBlbmRpbmdGb3JOZXR3b3JrIiwiX3BlbmRpbmdHZW9tSGFzaGVzIiwiX3BlbmRpbmdHZW9tcyIsIl9wZW5kaW5nRnJvbUNhY2hlIiwiX3BlbmRpbmdUcmFuc2Zlckxpc3QiLCJfcmVxdWVzdHNTZW50IiwiX3JlcXVlc3RzUmVjZWl2ZWQiLCJkZWNvZGVyUG9ydHMiLCJuZXh0UG9ydEluZGV4IiwiYW5hbHl0aWNzRm9ySHR0cEZhbGxiYWNrU2VudCIsImRvSW5pdEdlb21Xb3JrZXIiLCJkaXNhYmxlV2ViU29ja2V0Iiwib25SZXNvdXJjZXNSZWNlaXZlZCIsImhhc2hlcyIsImxpbmVhZ2VVcm5zIiwiYXJyYXlzIiwicmVzb3VyY2VUeXBlIiwib25DZG5SZXNvdXJjZXNSZWNlaXZlZCIsIm9uUmVzb3VyY2VGYWlsZWQiLCJoYXNoIiwiZXJyb3JNZXNzYWdlIiwib25DZG5SZXNvdXJjZUZhaWxlZCIsIm9uQ29ubmVjdGlvbkZhaWxlZCIsImlucHJvZ3Jlc3MiLCJyZXRyeVBlbmRpbmciLCJpIiwicHVzaCIsIm90Z193cyIsInF1ZXJ5UGFyYW1zIiwiaGVhZGVycyIsInVzZU9wZnMiLCJhbmFseXRpY3NDYWxsYmFjayIsImV2ZW50IiwicHJvcGVydGllcyIsInBvc3RNZXNzYWdlIiwiZGlzYWJsZUluZGV4ZWREYiIsIm9wZW4iLCJwb3J0cyIsImRvQWRkTW9kZWwiLCJ3cyIsImFkZEF1dGhvcml6ZVVybiIsIm1vZGVsVXJuIiwibGluZWFnZVVybiIsImZsdXNoTWVzc2FnZXMiLCJzZXRJbnRlcnZhbCIsIl9sb2FkQ2RuUmVzb3VyY2VGcm9tTmV0d29ya0JhdGNoIiwiZmx1c2hNZXNzYWdlc1RvRGVjb2RlclRocmVhZCIsImdldEh0dHBFcnJvckhhbmRsZXIiLCJlcnJvckhhbmRsZXIiLCJyYWlzZUVycm9yIiwiY29kZSIsIm1zZyIsImFyZ3MiLCJkZWZhdWx0RmFpbHVyZUNhbGxiYWNrIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJvbkNkblJlc291cmNlUHJvY2Vzc2VkIiwidmFsdWUiLCJsb2FkQ2RuUmVzb3VyY2VzIiwidXJsIiwidHlwZSIsImlzR3ppcCIsImRhdGEiLCJza2lwQ2FjaGUiLCJzdG9yZSIsImxlbmd0aCIsIl9jdHgkbG9jYWxEYkNhY2hlIiwicG9ydCIsIm9wZXJhdGlvbiIsImJ1ZmZlciIsImZyb21DYWNoZSIsIm51bVJlc291cmNlc1Byb2Nlc3NlZCIsInVuZGVmaW5lZCIsImZsdXNoQ2FjaGVBbmREaXNjb25uZWN0UmVxdWVzdGVkIiwiZG9GbHVzaENhY2hlQW5kRGlzY29ubmVjdCIsInVybHMiLCJjb3VsZEJlSW5DYWNoZUFycmF5IiwiZ2V0IiwidGhlbiIsImRhdGFzIiwiZXJyb3IiLCJvcGVuV1MiLCJudW1Ob25icm9rZW5XcyIsInRvdGFsSW5GbGlnaHRSZXF1ZXN0cyIsIl93cyR3cyIsImhhc1Blcm1hbmVudEVycm9yIiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJpbkZsaWdodFJlcXVlc3RzIiwic2l6ZSIsIl9vcGVuV2ViU29ja2V0Iiwid3NTdGF0ZXMiLCJtYXAiLCJfd3Mkd3MyIiwid3NMYXN0RXJyb3JOdW1JbkZsaWdodCIsImxhc3RFcnJvck51bUluRmxpZ2h0Iiwid3NMYXN0RXJyb3JSZWFzb25zIiwiX3dzJGxhc3RFcnJvciIsImxhc3RFcnJvciIsInJlYXNvbiIsIndzTGFzdEVycm9yQ29kZXMiLCJfd3MkbGFzdEVycm9yMiIsImdldEl0ZW0iLCJyZXNwb25zZVR5cGUiLCJ3aXRoQ3JlZGVudGlhbHMiLCJ3c1NvcnRlZEJ5TG9hZCIsInNvcnQiLCJhIiwiYiIsInJlcXVlc3RzVG9EaXN0cmlidXRlIiwidGFyZ2V0UmVxdWVzdHNJbkZsaWdodCIsInJhaXNlVGFyZ2V0QnkiLCJNYXRoIiwiY2VpbCIsInRvdGFsUmVxdWVzdHMiLCJtaW4iLCJudW1IYXNoZXNUb1NlbmQiLCJzcGxpY2UiLCJyZXF1ZXN0UmVzb3VyY2UiLCJfZmx1c2hTZW5kUXVldWUiLCJkb0NkblJlc291cmNlTG9hZCIsImNvdWxkQmVJbkNhY2hlIiwicmVxdWVzdEZsdXNoQ2FjaGVBbmREaXNjb25uZWN0IiwiX2N0eCRsb2NhbERiQ2FjaGUyIiwiX2N0eCRvcGZzQ2FjaGUiLCJjb25zb2xlIiwiY2xvc2VXZWJTb2NrZXQiLCJjbGVhckludGVydmFsIiwiZmx1c2hTdG9yZXNBbmRUaW1lc3RhbXBzIiwiY2xvc2UiLCJkb0NsZWFyT3Bmc0NhY2hlIiwiX2N0eCRvcGZzQ2FjaGUyIiwiY2xlYXIiLCJsb2ciLCJkb1JlcG9ydExvYWRpbmdTdGF0ZSIsImxvYWRpbmdTdGF0ZSIsInNlbnQiLCJyZWNlaXZlZCIsIndzU2VudCIsIm51bVJlcXVlc3RzU2VudCIsIndzUmVjZWl2ZWQiLCJudW1SZXF1ZXN0c1JlY2VpdmVkIiwicmVnaXN0ZXIiLCJ3b3JrZXJNYWluIiwiZG9PcGVyYXRpb24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/OtgLoadWorker.js\n"); /***/ }), /***/ "./src/file-loaders/workers/PropWorker.js": /*!************************************************!*\ !*** ./src/file-loaders/workers/PropWorker.js ***! \************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _net_Xhr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../net/Xhr */ \"./src/file-loaders/net/Xhr.js\");\n/* harmony import */ var _lmvtk_common_Propdb__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lmvtk/common/Propdb */ \"./src/file-loaders/lmvtk/common/Propdb.js\");\n/* harmony import */ var _wgs_scene_InstanceTreeStorage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../wgs/scene/InstanceTreeStorage */ \"./src/wgs/scene/InstanceTreeStorage.js\");\n/* harmony import */ var _lmvtk_common_PropdbCustomPropertyWrapper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lmvtk/common/PropdbCustomPropertyWrapper.js */ \"./src/file-loaders/lmvtk/common/PropdbCustomPropertyWrapper.js\");\n/* eslint-env worker */\n\n\n\n\n\n\n\n\nfunction PdbCacheEntry(dbPath, isShared) {\n this.pdb = null;\n this.waitingCallbacks = [];\n this.error = false;\n this.dbPath = dbPath;\n this.dbFiles = null;\n this.isShared = isShared;\n this.timestamp = Date.now();\n}\n\nfunction FileCacheEntry(data) {\n this.data = data;\n this.refCount = 1;\n}\n\nclass PdbCache {\n\n constructor() {\n this.pdbCache = {};\n this.fileCache = {};\n }\n\n get(dbPath) {\n let cacheEntry = this.pdbCache[dbPath];\n\n if (cacheEntry) {\n cacheEntry.timestamp = Date.now();\n }\n\n return cacheEntry;\n }\n\n set(dbPath, isShared) {\n let cacheEntry = new PdbCacheEntry(dbPath, isShared);\n this.pdbCache[dbPath] = cacheEntry;\n return cacheEntry;\n }\n\n getFile(path) {\n let cacheEntry = this.fileCache[path];\n\n if (cacheEntry) {\n cacheEntry.timestamp = Date.now();\n }\n\n return cacheEntry;\n }\n\n setFile(path, data) {\n this.fileCache[path] = new FileCacheEntry(data);\n }\n\n delete(dbPath) {\n var cacheEntry = this.get(dbPath);\n\n if (cacheEntry && cacheEntry.pdb)\n cacheEntry.pdb.refCount--;else\n\n return;\n\n if (cacheEntry.pdb.refCount === 0) {\n\n //TODO: erase the entry even if db is shared once it's no longer used?\n //The db files are still cached anyway.\n if (!cacheEntry.isShared) {\n delete this.pdbCache[dbPath];\n }\n\n if (!cacheEntry.isShared) {\n //Also erase any per-file cache, unless the file is shared across multiple property databases\n for (var fileName in cacheEntry.dbFiles) {\n var file = cacheEntry.dbFiles[fileName];\n this.unrefFileCacheEntry(file.storage);\n }\n }\n }\n }\n\n // Releases a fileCache entry reference if a file is not used anymore.\n // @param {Object} storage - contains the full file path as (only) key\n unrefFileCacheEntry(storage) {\n\n // key is the full file path\n for (var key in storage) {\n var fileCacheEntry = this.fileCache[key];\n if (fileCacheEntry) {\n fileCacheEntry.refCount--;\n if (fileCacheEntry.refCount === 0)\n delete this.fileCache[key];\n }\n }\n }\n}\n\n\nfunction loadPropertyPacks(loadContext, dbId, onPropertyPackLoadComplete) {\n\n let _this = loadContext.worker;\n let pdbCache = _this.pdbCache;\n\n if (!pdbCache) {\n _this.pdbCache = pdbCache = new PdbCache();\n }\n\n //get the cache entry for the given property database URL\n var cacheEntry = pdbCache.get(loadContext.dbPath);\n var repeatedCall = false;\n if (!cacheEntry) {\n cacheEntry = pdbCache.set(loadContext.dbPath, !!loadContext.sharedDbPath);\n } else {\n repeatedCall = true;\n }\n\n if (cacheEntry.pdb) {\n onPropertyPackLoadComplete(cacheEntry.pdb, cacheEntry.dbidOldToNew);\n return;\n } else if (!cacheEntry.error) {\n //If we are already loading the same property database, queue the callback\n if (repeatedCall) {\n cacheEntry.waitingCallbacks.push(onPropertyPackLoadComplete);\n return;\n }\n } else {\n onPropertyPackLoadComplete(null);\n return;\n }\n\n var dbfiles = loadContext.propertydb;\n if (!dbfiles) {\n _this.propdbFailed = true;\n onPropertyPackLoadComplete(null);\n return;\n }\n\n var loadedDbFiles = {};\n var filesToRequest = [];\n\n if (dbfiles.avs.length) {\n\n for (var tag in dbfiles) {\n // Skip loading of externalId table if wanted\n if (loadContext.skipExternalIds && tag == 'ids') {\n continue;\n }\n\n loadedDbFiles[tag] = {};\n filesToRequest.push({ filename: dbfiles[tag][0].path, isShared: dbfiles[tag][0].isShared, storage: loadedDbFiles[tag] });\n }\n\n } else {\n\n //Hardcoded list of pdb files -- deprecated, still used when loading F2D files locally, without\n //having loaded a manifest first. And probably in some other cases.\n\n loadedDbFiles = {\n ids: {},\n attrs: {},\n offsets: {},\n values: {},\n avs: {}\n };\n\n filesToRequest.push({ filename: dbfiles.attrs.length ? dbfiles.attrs[0] : \"objects_attrs.json.gz\", storage: loadedDbFiles.attrs });\n filesToRequest.push({ filename: dbfiles.values.length ? dbfiles.values[0] : \"objects_vals.json.gz\", storage: loadedDbFiles.values });\n filesToRequest.push({ filename: dbfiles.avs.length ? dbfiles.avs[0] : \"objects_avs.json.gz\", storage: loadedDbFiles.avs });\n filesToRequest.push({ filename: dbfiles.offsets.length ? dbfiles.offsets[0] : \"objects_offs.json.gz\", storage: loadedDbFiles.offsets });\n\n // Loading the externalId table is optional\n if (!loadContext.skipExternalIds) {\n filesToRequest.push({ filename: dbfiles.ids.length ? dbfiles.ids[0] : \"objects_ids.json.gz\", storage: loadedDbFiles.ids });\n }\n }\n\n var filesRemaining = filesToRequest.length;\n var filesFailed = 0;\n\n function onRequestCompletion(data) {\n\n filesRemaining--;\n\n // Rough estimate for progress. Although we just count received files here,\n // it already helps to signficantly reduce the perceived \"nothing happens\" time periods.\n //\n // Tracking the progress of single requests would be more accurate, but:\n // - Attaching an onprogress handler to XHR would cause it to consume 2-3x more memory,\n // because it has to receive the data as text and then convert to array buffer on the fly.\n // - Due to the content encoding, the progress callbacks wouldn't know the file size, but only\n // the amount of transferred data, so that they wouldn't help much.\n _this.postMessage({\n cbId: loadContext.cbId,\n progress: {\n // Having all files loaded doesn't mean we are fully done. Reserve 5 percent for the rest.\n percent: 95 * (filesToRequest.length - filesRemaining) / filesToRequest.length\n }\n });\n\n if (!data)\n filesFailed++;\n\n // If all of the files we've requested have been retrieved, create the\n // property database. Otherwise, request the next required file.\n //\n if (!filesRemaining) {\n if (filesFailed) {\n cacheEntry.error = true;\n onPropertyPackLoadComplete(null);\n while (cacheEntry.waitingCallbacks.length) {\n cacheEntry.waitingCallbacks.shift()(null);\n }\n } else {\n\n //De-reference the result buffer from this array so that\n //it can be freed on the fly when the PropertyDatabases parses itself\n filesToRequest.forEach(function (f) {\n f.storage = null;\n });\n\n //Store the property db instance in its cache entry\n try {\n cacheEntry.pdb = loadContext.useCustomProperties ? new _lmvtk_common_PropdbCustomPropertyWrapper_js__WEBPACK_IMPORTED_MODULE_3__.PropertyDatabaseCustomPropertyWrapper(loadedDbFiles) : new _lmvtk_common_Propdb__WEBPACK_IMPORTED_MODULE_1__.PropertyDatabase(loadedDbFiles);\n cacheEntry.pdb.refCount = 0; //will be incremented by the success callback\n cacheEntry.loaded = true;\n cacheEntry.dbFiles = filesToRequest;\n\n cacheEntry.timestamp = Date.now();\n\n //TODO: revise this to use the pdb.byteSize() call once it's merged in.\n cacheEntry.byteSize = 0;\n for (let f in loadedDbFiles) {\n for (let p in loadedDbFiles[f]) {\n let fdata = loadedDbFiles[f][p];\n cacheEntry.byteSize += fdata && fdata.byteLength;\n }\n }\n\n for (let p in loadedDbFiles.dbid) {\n var b = loadedDbFiles.dbid[p];\n cacheEntry.dbidOldToNew = new Int32Array(b.buffer, b.byteOffset, b.byteLength / 4);\n break;\n }\n\n onPropertyPackLoadComplete(cacheEntry.pdb, cacheEntry.dbidOldToNew);\n\n while (cacheEntry.waitingCallbacks.length) {\n cacheEntry.waitingCallbacks.shift()(cacheEntry.pdb, cacheEntry.dbidOldToNew);\n }\n }\n catch (err) {\n onPropertyPackLoadComplete(null, null, err && err.message);\n }\n }\n }\n }\n // Request the files.\n //\n filesToRequest.forEach(function (f) {\n requestFile(f.filename, loadContext, onRequestCompletion, f.storage, f.isShared);\n });\n}\n\n\nfunction requestFile(filename, loadContext, onRequestCompletion, storage, isShared) {\n\n function onFailure(status, statusText, data) {\n // We're explicitly ignoring missing property files.\n if (status !== 404) {\n loadContext.onFailureCallback(status, statusText, data);\n }\n onRequestCompletion(null);\n }\n\n var url;\n if (filename.indexOf(\"://\") !== -1 || filename.indexOf(\"urn:\") === 0) {\n url = filename;\n } else {\n // no dbPath AND no url in the filename means no propertydb\n if (!loadContext.dbPath) {\n onRequestCompletion(null);\n return;\n }\n url = `${loadContext.dbPath}${filename}`;\n }\n\n var fullPath = _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.generateUrl(loadContext.endpoint, \"items\", url);\n\n var onSuccess = function (response)\n {\n //Cache for future reuse\n if (isShared) {\n loadContext.worker.pdbCache && loadContext.worker.pdbCache.setFile(fullPath, response);\n }\n\n storage[fullPath] = response;\n onRequestCompletion(response);\n };\n\n //Fulfill the request from cache if available\n var cacheEntry = loadContext.worker.pdbCache && loadContext.worker.pdbCache.getFile(fullPath);\n if (cacheEntry) {\n cacheEntry.refCount++;\n onSuccess(cacheEntry.data);\n } else {\n _net_Xhr__WEBPACK_IMPORTED_MODULE_0__.ViewingService.getItem(loadContext, url, onSuccess, onFailure);\n }\n\n}\n\nfunction createTree(node, parent, dbToFrag, nodeStorage) {\n var dbId = node.dbId;\n var children = node.children;\n var childrenIds = [];\n if (children) {\n for (var j = 0; j < children.length; j++) {\n var childHasChildren=c reateTree(children[j], dbId, dbToFrag, nodeStorage);\n\n if (childHasChildren)\n childrenIds.push(children[j].dbId);\n }\n }\n\n var fragIds;\n\n //leaf node\n if (dbToFrag) {\n var frags=d bToFrag[dbId];\n if (frags !==u ndefined) {\n if (!Array.isArray(frags))\n fragIds=[ frags];else\n\n fragIds=f rags;\n }\n }\n\n var childCount=c hildrenIds.length + (fragIds ? fragIds.length : 0);\n if (childCount) {\n nodeStorage.setNode(dbId, parent, node.name.toString(), 0, childrenIds, fragIds);\n }\n return childCount;\n}\n\nfunction doObjectTreeCreate(loadContext) {\n var _this=l oadContext.worker;\n var gltfTree=l oadContext.gltfTree;\n var dbToFragId=l oadContext.dbToFragId;\n var nodeStorage=n ew _wgs_scene_InstanceTreeStorage__WEBPACK_IMPORTED_MODULE_2__.InstanceTreeStorage();\n\n createTree(gltfTree, 0, dbToFragId, nodeStorage);\n nodeStorage.flatten();\n\n _this.postMessage({ cbId: loadContext.cbId,\n result: {\n rootId: gltfTree.dbId,\n instanceTreeStorage: nodeStorage\n }\n });\n}\n\nfunction doObjectTreeParse(loadContext) {\n\n var _this=l oadContext.worker;\n\n function onPropertyPackLoadComplete(propertyDb, dbidOldToNew, errorMessage) {\n if (!propertyDb) {\n _this.postMessage({\n cbId: loadContext.cbId,\n error: { instanceTree: null, maxTreeDepth: 0, err: errorMessage }\n });\n return;\n }\n\n propertyDb.refCount++;\n\n //Find the root object:\n //TODO: internalize this into the pdb object.\n if (!loadContext.skipInstanceTreeResult && !propertyDb.rootsDone) {\n propertyDb.idroots=p ropertyDb.findRootNodes();\n propertyDb.rootsDone=t rue;\n }\n\n var rootId;\n var maxDepth=[ 0];\n\n var transferList=[ ];\n var storage;\n let nodeAccess=n ull;\n\n var fragToDbId=l oadContext.fragToDbId;\n\n // Only need to rebuild fragToDbId using the old IDs in F2D case.\n if (loadContext.needsDbIdRemap && loadContext.is2d) {\n if (!dbidOldToNew) {\n console.warn(\ "ID remap required, but not loaded.\");\n } else if (!fragToDbId) {\n console.warn(\ "No frag->dbid mapping!.\");\n } else {\n\n //Replace the frag2dbid mapping by a new one using the\n //correct property db v2 ids.\n var old2new=d bidOldToNew;\n var fr2id=[ ];\n\n for (var i=0 ; i < fragToDbId.length; i++) {\n\n var d=f ragToDbId[i];\n\n if (!Array.isArray(d)) {\n fr2id[i]=o ld2new[d];\n } else {\n fr2id[i]=[ ];\n for (var j=0 ; j < d.length; j++) {\n fr2id[i][j]=o ld2new[d[j]];\n }\n }\n }\n\n fragToDbId=f r2id;\n }\n }\n\n //In the cases of 2D drawings, there is no meaningful\n //object hierarchy, so we don 't build a tree.\n var idroots = propertyDb.idroots;\n if (idroots && idroots.length)\n {\n storage = new _wgs_scene_InstanceTreeStorage__WEBPACK_IMPORTED_MODULE_2__.InstanceTreeStorage();\n\n if (idroots.length == 1 && propertyDb.nodeHasChild(idroots[0])) {\n //Case of a single root in the property database,\n //use that as the document root.\n rootId = idroots[0];\n propertyDb.buildObjectTree(rootId, fragToDbId, maxDepth, storage);\n } else\n {\n //Case of multiple nodes at the root level\n //This happens in DWFs coming from Revit.\n //Create a dummy root and add all the other roots\n //as its children.\n rootId = -1e10; // Big negative number to prevent conflicts with F2D\n var childrenIds = [];\n\n for (let i = 0; i < idroots.length; i++) {\n propertyDb.buildObjectTree(idroots[i], fragToDbId, maxDepth, storage);\n childrenIds.push(idroots[i]);\n }\n\n storage.setNode(rootId, 0, \"\", 0, childrenIds, false);\n }\n\n storage.flatten();\n transferList.push(storage.nodes.buffer);\n transferList.push(storage.children.buffer);\n transferList.push(storage.strings.buf.buffer);\n transferList.push(storage.strings.idx.buffer);\n\n\n //Now compute the bounding boxes for instance tree nodes\n if (loadContext.fragBoxes) {\n nodeAccess = new _wgs_scene_InstanceTreeStorage__WEBPACK_IMPORTED_MODULE_2__.InstanceTreeAccess(storage, rootId);\n nodeAccess.computeBoxes(loadContext.fragBoxes);\n transferList.push(nodeAccess.nodeBoxes.buffer);\n }\n }\n\n _this.postMessage({ cbId: loadContext.cbId,\n result: {\n rootId: rootId,\n instanceTreeStorage: storage,\n instanceBoxes: nodeAccess ? nodeAccess.nodeBoxes : undefined,\n dbidOldToNew: loadContext.needsDbIdRemap ? dbidOldToNew : null, //If we have a dbId mapping (from new OTG dbIds to old F2D dbIds send it to the main thread.\n maxTreeDepth: maxDepth[0],\n objectCount: propertyDb.getObjectCount()\n }\n }, transferList);\n }\n\n loadPropertyPacks(loadContext, null, onPropertyPackLoadComplete);\n}\n\nfunction doPropertySearch(loadContext) {\n\n var _this = loadContext.worker;\n\n var cacheEntry = _this.pdbCache && _this.pdbCache.get(loadContext.dbPath);\n\n if (cacheEntry && cacheEntry.pdb) {\n const searchText = loadContext.searchText;\n var result = cacheEntry.pdb.bruteForceSearch(searchText, loadContext.attributeNames, loadContext.searchOptions);\n _this.postMessage({ cbId: loadContext.cbId, result: result });\n }\n\n}\n\nfunction doPropertyDiff(loadContext) {\n\n var _this = loadContext.worker;\n\n // get property dbs to compare\n var cacheEntry1 = _this.pdbCache && _this.pdbCache.get(loadContext.dbPath);\n var cacheEntry2 = _this.pdbCache && _this.pdbCache.get(loadContext.dbPath2);\n var pdb1 = cacheEntry1 && cacheEntry1.pdb;\n var pdb2 = cacheEntry2 && cacheEntry2.pdb;\n\n // send messages for progress events to main thread\n var onProgress = function (percent) {\n loadContext.worker.postMessage({\n cbId: loadContext.cbId,\n progress: { percent: percent }\n });\n };\n\n if (pdb1 && pdb2) {\n var result = pdb1.findDifferences(pdb2, loadContext.diffOptions, onProgress);\n _this.postMessage({ cbId: loadContext.cbId, result: result });\n }\n}\n\nfunction doPropertyFind(loadContext) {\n\n var _this = loadContext.worker;\n\n var cacheEntry = _this.pdbCache && _this.pdbCache.get(loadContext.dbPath);\n\n if (cacheEntry && cacheEntry.pdb) {\n var result = cacheEntry.pdb.bruteForceFind(loadContext.propertyName);\n _this.postMessage({ cbId: loadContext.cbId, result: result });\n }\n\n}\n\nfunction doLayersFind(loadContext) {\n var _this = loadContext.worker;\n\n var cacheEntry = _this.pdbCache && _this.pdbCache.get(loadContext.dbPath);\n\n if (cacheEntry && cacheEntry.pdb) {\n var result = cacheEntry.pdb.findLayers();\n _this.postMessage({ cbId: loadContext.cbId, result: result });\n }\n}\n\nfunction searchTree(node, dbId, result) {\n if (Object.keys(result).length > 0) {\n return;\n }\n\n if (dbId == node.dbId) {\n result['name '] = node.name;\n result['dbId '] = dbId;\n return;\n }\n\n var children = node.children;\n if (children) {\n for (var j = 0; j < children.length; j++) {\n searchTree(children[j], dbId, result);\n }\n }\n}\n\nfunction getPropertyResults(loadContext) {\n var _this = loadContext.worker;\n\n var cacheEntry = _this.pdbCache && _this.pdbCache.get(loadContext.dbPath);\n\n if (!cacheEntry || !cacheEntry.pdb) {\n if (loadContext.gltfTree) {\n var gltfTree = loadContext.gltfTree;\n var result = {};\n searchTree(gltfTree, loadContext.dbId, result);\n return result;\n }\n return;\n }\n\n var dbId = loadContext.dbId;\n var dbIds = loadContext.dbIds;\n var propFilter = loadContext.propFilter;\n var ignoreHidden = loadContext.ignoreHidden;\n var categoryFilter = loadContext.categoryFilter;\n\n if (typeof dbIds !== \"undefined\") {\n var results = [];\n if (dbIds && dbIds.length) {\n for (let i = 0; i < dbIds.length; i++) {\n let result = cacheEntry.pdb.getObjectProperties(dbIds[i], propFilter, ignoreHidden, undefined, categoryFilter);\n if (result)\n results.push(result);\n }\n } else {//If dbIds is empty, return results for all objects (i.e. no ID filter)\n for (let i = 1, last = cacheEntry.pdb.getObjectCount(); i <= last; i++) {\n let result = cacheEntry.pdb.getObjectProperties(i, propFilter, ignoreHidden, undefined, categoryFilter);\n if (result)\n results.push(result);\n }\n }\n return results;\n } else {\n let result = cacheEntry.pdb.getObjectProperties(dbId, propFilter, undefined, undefined, categoryFilter);\n return result;\n }\n}\n\nfunction doPropertyGet(loadContext) {\n var results = getPropertyResults(loadContext);\n if (!results) {\n loadContext.worker.postMessage({ cbId: loadContext.cbId, error: { msg: \"Properties are not available.\" } });\n } else {\n loadContext.worker.postMessage({ cbId: loadContext.cbId, result: results });\n }\n}\n\nfunction doPropertySetGet(loadContext) {\n var results = getPropertyResults(loadContext);\n if (!results) {\n loadContext.worker.postMessage({ cbId: loadContext.cbId, error: { msg: \"Properties are not available.\" } });\n }\n\n var map = {};\n var names = [];\n\n // Process the results and generate a map.\n // The map's keys are \ "displayCategory/displayName\" and the map 's values are all of the properties containing the same name and category.\n for (var i = 0; i < results.length; ++i) {\n var result = results[i];\n const props = result.properties;\n\n // Not every document type has a proper externalId\n // We will handle only RVT which has translatable from Hex to Decimal value\n if (loadContext.fileType === 'rvt ') {\n try {\n let elementId;\n\n // Check if the properties include an element ID already\n const elementIdProperty = props.find((each) => each.attributeName === \"ElementId\");\n\n if (elementIdProperty) {\n elementId = elementIdProperty.displayValue;\n }\n\n // Or fall back and generate it from the external ID, if the external ID is present\n if (result.externalId && !elementId) {\n const externalIdSplit = result.externalId.split('- ');\n\n if (externalIdSplit.length) {\n elementId = parseInt(externalIdSplit[externalIdSplit.length - 1], 16);\n }\n }\n\n // since in this context we don't know either model OTG/SVF, we will add elementId only if name isn 't already included\n if (elementId && !result.name.includes(elementId)) {\n result.name += ` [${elementId}]`;\n }\n } catch (e) {\n // We don't want failures to generate ElementId to fail the whole PropertySet process.\n console.warn(`Caught error in updating ElementIds, object with dbId ${result.dbId} skipped`, e);\n }\n }\n\n props.forEach(function (prop) {\n // The category is always present for revit but not fusion.\n // Make sure to add a Name key to the property set map.\n if (prop.displayName==='Name' && !prop.displayCategory) {\n // Keep track of the Name entries.\n names.push(result.name);\n }\n\n var identifier=! prop.displayCategory ? prop.displayName : `${prop.displayCategory}/${prop.displayName}`;\n if (!Object.prototype.hasOwnProperty.call(map, identifier)) {\n map[identifier]=[ ];\n }\n prop.parentName=r esult.name;\n prop.dbId=r esult.dbId;\n map[identifier].push(prop);\n });\n\n // Add a Name key to the property set map.\n if (Object.prototype.hasOwnProperty.call(result, 'name') && names.indexOf(result.name)===- 1) {\n if (!Object.prototype.hasOwnProperty.call(map, 'Name')) {\n map[ 'Name']=[ ];\n }\n\n map[ 'Name'].push({\n displayName: 'Name',\n displayValue: result.name,\n displayCategory: null,\n attributeName: 'Name',\n type: 20,\n units: null,\n hidden: false,\n precision: 0,\n dbId: result.dbId,\n parentName: result.name\n });\n }\n }\n names=[ ];\n map[\ "__selected_dbIds__\"]=l oadContext.dbIds;\n loadContext.worker.postMessage({ cbId: loadContext.cbId, result: map });\n}\n\n\nfunction doBuildExternalIdMapping(loadContext) {\n\n var _this=l oadContext.worker;\n\n var cacheEntry=_ this.pdbCache && _this.pdbCache.get(loadContext.dbPath);\n\n if (cacheEntry && cacheEntry.pdb) {\n var mapping=c acheEntry.pdb.getExternalIdMapping(loadContext.extIdFilter);\n _this.postMessage({ cbId: loadContext.cbId, result: mapping });\n }\n}\n\nfunction doBuildLayerToNodeIdMapping(loadContext) {\n var _this=l oadContext.worker;\n\n var cacheEntry=_ this.pdbCache && _this.pdbCache.get(loadContext.dbPath);\n\n if (cacheEntry && cacheEntry.pdb) {\n var mapping=c acheEntry.pdb.getLayerToNodeIdMapping();\n _this.postMessage({ cbId: loadContext.cbId, result: mapping });\n }\n}\n\nfunction doUnloadPropertyDb(loadContext) {\n var _this=l oadContext.worker;\n\n if (loadContext.clearCaches) {\n _this.pdbCache=n ull;\n return;\n }\n\n _this.pdbCache && _this.pdbCache.delete(loadContext.dbPath);\n}\n\n// Required params\n// @param {string} loadContext.dbPath\n// @param {string} loadContext.idsFile - filename of the ids-file\n// @param {string} loadContext.cbId - worker callback id\n// @param {Object} loadContext.worker - global worker context\n//\n// Preconditions:\n// - PropDbLoader makes sure that this task is not called before propDb finished loading. (see asyncPropertyOperation in PropDblLoader)\nfunction doLoadExternalIds(loadContext) {\n\n var _this=l oadContext.worker;\n\n // Deprecated case: If pdbFiles are not known use hard-wired one (see comment in loadPropertyPacks)\n var idsFileEntry=l oadContext.idsFile || { path: \ "objects_ids.json.gz\" };\n\n // After loading, storage[fullPath] will contain the response blob.\n var storage={ };\n\n // Purpose of doLoadExternalIds is to delay-load the ids for a PropDb.\n // If this propDb is not loaded and not even requested to load, we cannot add externalIds to it.\n var cacheEntry=_ this.pdbCache.get(loadContext.dbPath);\n if (!cacheEntry) {\n console.error( 'Delay-loading of externalIDs requires to load the propDb first.');\n return;\n }\n\n // Skip here if we have the ids already. Note that this will usually be prevented by propDbLoader already.\n if (cacheEntry.pdb && cacheEntry.pdb.externalIdsLoaded()) {\n _this.postMessage({ cbId: loadContext.cbId });\n return;\n }\n\n // Receives ids-file blob (or null on failure)\n var onDone=f unction (data) {\n\n if (!data) {\n // Loading failed. requestFile() already posted an error message in this case.\n return;\n }\n\n // Find propertyDB in cache that we want to load ids for\n let pdbCache=_ this.pdbCache;\n cacheEntry=p dbCache.get(loadContext.dbPath);\n if (!cacheEntry || !cacheEntry.pdb) {\n\n // PropDBLoader delays id-loading until propertyDB finished loading.\n // So, if we get here and cannot find the propDb, we can assume that the propertyDb must have been unloaded meanwhile.\n\n // Make sure that we don 't leak the blob in the file-cache (requestFile adds the reference automatically)\n pdbCache.unrefFileCacheEntry(storage);\n\n // Send message to inform that waiting makes no sense anymore, because\n // propDb has been unloaded meanwhile.\n _this.postMessage({\n cbId: loadContext.cbId,\n error: {\n propDbWasUnloaded: true\n }\n });\n }\n\n // Make ids available in pdb\n cacheEntry.pdb.setIdsBlob(data);\n cacheEntry.byteSize += data.byteLength;\n\n // Append entry to cacheEntry.dbFiles. This makes sure that the id file blob is released just like\n // all other dbFiles when the propDb is unloaded later. (see unloadPropertyDb)\n var newFile = {\n filename: idsFileEntry.path,\n storage: storage\n };\n cacheEntry.dbFiles.push(newFile);\n\n // Signal that we are done - main thread is now ready to query externalIds.\n _this.postMessage({ cbId: loadContext.cbId });\n };\n\n requestFile(idsFileEntry.path, loadContext, onDone, storage, idsFileEntry.isShared);\n}\n\nfunction doExecuteCode(loadContext) {\n\n var _this = loadContext.worker;\n\n //This is expected to load a function named \"userFunction\"\n if (loadContext.userFunction) {\n try {\n importScripts(loadContext.userFunction);\n } catch (err) {\n console.error(err);\n _this.postMessage({ cbId: loadContext.cbId, error: { msg: \"Error while importing 'userFunction '.\" } });\n return;\n }\n }\n\n if (!self.userFunction) {\n _this.postMessage({ cbId: loadContext.cbId, error: { msg: \"function 'userFunction ' was not found.\" } });\n return;\n }\n\n var cacheEntry = _this.pdbCache && _this.pdbCache.get(loadContext.dbPath);\n\n if (cacheEntry && cacheEntry.pdb) {\n var result;\n try {\n result = self.userFunction(cacheEntry.pdb, loadContext.userData);\n } catch (err) {\n console.error(err);\n _this.postMessage({ cbId: loadContext.cbId, error: { msg: \"Error while executing 'userFunction '.\" } });\n return;\n } finally {\n self.userFunction = undefined; // cleanup\n }\n _this.postMessage({ cbId: loadContext.cbId, result: result });\n }\n}\n\n/**\n * Refreshes the custom properties definitions.\n *\n * @param {object} loadContext - the configured request for the get custom properties values endpoint.\n * @param {string} loadContext.baseUrl - the base url of the get custom properties values endpoint.\n * @param {string} loadContext.projectId - the project ID to fetch custom properties definitions for.\n * @param {object} loadContext.worker - the web worker.\n * @param {Record} loadContext.headers - the headers to send with the request.\n */\nasync function doRefreshCustomProperties(loadContext) {\n const _this = loadContext.worker;\n const customPropsCache = (0,_lmvtk_common_PropdbCustomPropertyWrapper_js__WEBPACK_IMPORTED_MODULE_3__.acquireCustomPropsCache)(_this);\n let result, error;\n try {\n const projectCache = await customPropsCache.acquireDefinitionsCache(loadContext);\n result = projectCache.lastFetched;\n }\n catch (err) {\n error = { msg: err.message, error: err };\n }\n _this.postMessage({ cbId: loadContext.cbId, result, error });\n}\n\n/**\n * Refreshes the custom properties values.\n *\n * @param {object} loadContext - the configured request for the get custom properties values endpoint.\n * @param {string} loadContext.baseUrl - the base url of the get custom properties values endpoint.\n * @param {string} loadContext.projectId - the project Id for the seed file URN\n * @param {string} loadContext.seedFileUrn - the seed file URN\n * @param {object} loadContext.worker - the web worker.\n * @param {Record} loadContext.headers - the headers to send with the request.\n */\nasync function doRefreshCustomPropertiesValues(loadContext) {\n const _this = loadContext.worker;\n const { dbPath } = loadContext;\n const customPropsCache = (0,_lmvtk_common_PropdbCustomPropertyWrapper_js__WEBPACK_IMPORTED_MODULE_3__.acquireCustomPropsCache)(_this);\n let result, error;\n try {var _this$pdbCache;\n const projectCache = await customPropsCache.acquireDefinitionsCache(loadContext);\n const seedFileCache = await projectCache.acquireValuesCache(loadContext);\n var pdb = (_this$pdbCache = _this.pdbCache) === null || _this$pdbCache === void 0 || (_this$pdbCache = _this$pdbCache.get(dbPath)) === null || _this$pdbCache === void 0 ? void 0 : _this$pdbCache.pdb;\n if (pdb && 'setCustomAttrs ' in pdb) {\n pdb.setCustomAttrs(seedFileCache);\n }\n result = seedFileCache.lastFetched;\n }\n catch (err) {\n error = { msg: err.message, error: err };\n }\n _this.postMessage({ cbId: loadContext.cbId, result, error });\n}\n\nfunction register(workerMain) {\n workerMain.register(\"BUILD_EXTERNAL_ID_MAPPING\", { doOperation: doBuildExternalIdMapping });\n workerMain.register(\"BUILD_LAYER_TO_NODE_ID_MAPPING\", { doOperation: doBuildLayerToNodeIdMapping });\n workerMain.register(\"GET_PROPERTIES\", { doOperation: doPropertyGet });\n workerMain.register(\"GET_PROPERTY_SET\", { doOperation: doPropertySetGet });\n workerMain.register(\"SEARCH_PROPERTIES\", { doOperation: doPropertySearch });\n workerMain.register(\"DIFF_PROPERTIES\", { doOperation: doPropertyDiff });\n workerMain.register(\"FIND_PROPERTY\", { doOperation: doPropertyFind });\n workerMain.register(\"FIND_LAYERS\", { doOperation: doLayersFind });\n workerMain.register(\"LOAD_PROPERTYDB\", { doOperation: doObjectTreeParse });\n workerMain.register(\"CREATE_TREE\", { doOperation: doObjectTreeCreate });\n workerMain.register(\"UNLOAD_PROPERTYDB\", { doOperation: doUnloadPropertyDb });\n workerMain.register(\"USER_FUNCTION\", { doOperation: doExecuteCode });\n workerMain.register(\"LOAD_EXTERNAL_IDS\", { doOperation: doLoadExternalIds });\n workerMain.register(\"REFRESH_CUSTOM_PROPERTIES\", { doOperation: doRefreshCustomProperties });\n workerMain.register(\"REFRESH_CUSTOM_PROPERTIES_VALUES\", { doOperation: doRefreshCustomPropertiesValues });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDRCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRUUsV0FBVyxFQUFFaEksaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0VBQzFFK0gsVUFBVSxDQUFDRCxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUVFLFdBQVcsRUFBRXZJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztFQUN2RXNJLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEVBQUVFLFdBQVcsRUFBRTNCLGtCQUFrQixDQUFDLENBQUMsQ0FBQztFQUM3RTBCLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFRSxXQUFXLEVBQUVqQixhQUFhLENBQUMsQ0FBQyxDQUFDO0VBQ3BFZ0IsVUFBVSxDQUFDRCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBRUUsV0FBVyxFQUFFekIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0VBQzVFd0IsVUFBVSxDQUFDRCxRQUFRLENBQUMsMkJBQTJCLEVBQUUsRUFBRUUsV0FBVyxFQUFFWix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7RUFDNUZXLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLGtDQUFrQyxFQUFFLEVBQUVFLFdBQVcsRUFBRVAsK0JBQStCLENBQUMsQ0FBQyxDQUFDO0FBQzdHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy93b3JrZXJzL1Byb3BXb3JrZXIuanM/YTZlYSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZW52IHdvcmtlciAqL1xuXG5pbXBvcnQgeyBWaWV3aW5nU2VydmljZSB9IGZyb20gJy4uL25ldC9YaHInO1xuXG5pbXBvcnQgeyBQcm9wZXJ0eURhdGFiYXNlIH0gZnJvbSAnLi4vbG12dGsvY29tbW9uL1Byb3BkYic7XG5cbmltcG9ydCB7IEluc3RhbmNlVHJlZVN0b3JhZ2UsIEluc3RhbmNlVHJlZUFjY2VzcyB9IGZyb20gJy4uLy4uL3dncy9zY2VuZS9JbnN0YW5jZVRyZWVTdG9yYWdlJztcbmltcG9ydCB7IFByb3BlcnR5RGF0YWJhc2VDdXN0b21Qcm9wZXJ0eVdyYXBwZXIsIGFjcXVpcmVDdXN0b21Qcm9wc0NhY2hlIH0gZnJvbSAnLi4vbG12dGsvY29tbW9uL1Byb3BkYkN1c3RvbVByb3BlcnR5V3JhcHBlci5qcyc7XG5cbmZ1bmN0aW9uIFBkYkNhY2hlRW50cnkoZGJQYXRoLCBpc1NoYXJlZCkge1xuICAgIHRoaXMucGRiID0gbnVsbDtcbiAgICB0aGlzLndhaXRpbmdDYWxsYmFja3MgPSBbXTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5kYlBhdGggPSBkYlBhdGg7XG4gICAgdGhpcy5kYkZpbGVzID0gbnVsbDtcbiAgICB0aGlzLmlzU2hhcmVkID0gaXNTaGFyZWQ7XG4gICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xufVxuXG5mdW5jdGlvbiBGaWxlQ2FjaGVFbnRyeShkYXRhKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnJlZkNvdW50ID0gMTtcbn1cblxuY2xhc3MgUGRiQ2FjaGUge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucGRiQ2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5maWxlQ2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICBnZXQoZGJQYXRoKSB7XG4gICAgICAgIGxldCBjYWNoZUVudHJ5ID0gdGhpcy5wZGJDYWNoZVtkYlBhdGhdO1xuXG4gICAgICAgIGlmIChjYWNoZUVudHJ5KSB7XG4gICAgICAgICAgICBjYWNoZUVudHJ5LnRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVFbnRyeTtcbiAgICB9XG5cbiAgICBzZXQoZGJQYXRoLCBpc1NoYXJlZCkge1xuICAgICAgICBsZXQgY2FjaGVFbnRyeSA9IG5ldyBQZGJDYWNoZUVudHJ5KGRiUGF0aCwgaXNTaGFyZWQpO1xuICAgICAgICB0aGlzLnBkYkNhY2hlW2RiUGF0aF0gPSBjYWNoZUVudHJ5O1xuICAgICAgICByZXR1cm4gY2FjaGVFbnRyeTtcbiAgICB9XG5cbiAgICBnZXRGaWxlKHBhdGgpIHtcbiAgICAgICAgbGV0IGNhY2hlRW50cnkgPSB0aGlzLmZpbGVDYWNoZVtwYXRoXTtcblxuICAgICAgICBpZiAoY2FjaGVFbnRyeSkge1xuICAgICAgICAgICAgY2FjaGVFbnRyeS50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlRW50cnk7XG4gICAgfVxuXG4gICAgc2V0RmlsZShwYXRoLCBkYXRhKSB7XG4gICAgICAgIHRoaXMuZmlsZUNhY2hlW3BhdGhdID0gIG5ldyBGaWxlQ2FjaGVFbnRyeShkYXRhKTtcbiAgICB9XG5cbiAgICBkZWxldGUoZGJQYXRoKSB7XG4gICAgICAgIHZhciBjYWNoZUVudHJ5ID0gdGhpcy5nZXQoZGJQYXRoKTtcblxuICAgICAgICBpZiAoY2FjaGVFbnRyeSAmJiBjYWNoZUVudHJ5LnBkYilcbiAgICAgICAgICAgIGNhY2hlRW50cnkucGRiLnJlZkNvdW50LS07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoY2FjaGVFbnRyeS5wZGIucmVmQ291bnQgPT09IDApIHtcblxuICAgICAgICAgICAgLy9UT0RPOiBlcmFzZSB0aGUgZW50cnkgZXZlbiBpZiBkYiBpcyBzaGFyZWQgb25jZSBpdCdzIG5vIGxvbmdlciB1c2VkP1xuICAgICAgICAgICAgLy9UaGUgZGIgZmlsZXMgYXJlIHN0aWxsIGNhY2hlZCBhbnl3YXkuXG4gICAgICAgICAgICBpZiAoIWNhY2hlRW50cnkuaXNTaGFyZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZGJDYWNoZVtkYlBhdGhdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNhY2hlRW50cnkuaXNTaGFyZWQpIHtcbiAgICAgICAgICAgICAgICAvL0Fsc28gZXJhc2UgYW55IHBlci1maWxlIGNhY2hlLCB1bmxlc3MgdGhlIGZpbGUgaXMgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSBwcm9wZXJ0eSBkYXRhYmFzZXNcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBmaWxlTmFtZSBpbiBjYWNoZUVudHJ5LmRiRmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGUgPSBjYWNoZUVudHJ5LmRiRmlsZXNbZmlsZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVucmVmRmlsZUNhY2hlRW50cnkoZmlsZS5zdG9yYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZWxlYXNlcyBhIGZpbGVDYWNoZSBlbnRyeSByZWZlcmVuY2UgaWYgYSBmaWxlIGlzIG5vdCB1c2VkIGFueW1vcmUuXG4gICAgLy8gICBAcGFyYW0ge09iamVjdH0gc3RvcmFnZSAtIGNvbnRhaW5zIHRoZSBmdWxsIGZpbGUgcGF0aCBhcyAob25seSkga2V5XG4gICAgdW5yZWZGaWxlQ2FjaGVFbnRyeShzdG9yYWdlKSB7XG5cbiAgICAgICAgLy8ga2V5IGlzIHRoZSBmdWxsIGZpbGUgcGF0aFxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3RvcmFnZSkge1xuICAgICAgICAgICAgdmFyIGZpbGVDYWNoZUVudHJ5ID0gdGhpcy5maWxlQ2FjaGVba2V5XTtcbiAgICAgICAgICAgIGlmIChmaWxlQ2FjaGVFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGVFbnRyeS5yZWZDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUNhY2hlRW50cnkucmVmQ291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmlsZUNhY2hlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuZnVuY3Rpb24gbG9hZFByb3BlcnR5UGFja3MobG9hZENvbnRleHQsIGRiSWQsIG9uUHJvcGVydHlQYWNrTG9hZENvbXBsZXRlKSB7XG5cbiAgICBsZXQgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG4gICAgbGV0IHBkYkNhY2hlID0gX3RoaXMucGRiQ2FjaGU7XG5cbiAgICBpZiAoIXBkYkNhY2hlKSB7XG4gICAgICAgIF90aGlzLnBkYkNhY2hlID0gcGRiQ2FjaGUgPSBuZXcgUGRiQ2FjaGUoKTtcbiAgICB9XG5cbiAgICAvL2dldCB0aGUgY2FjaGUgZW50cnkgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBkYXRhYmFzZSBVUkxcbiAgICB2YXIgY2FjaGVFbnRyeSA9IHBkYkNhY2hlLmdldChsb2FkQ29udGV4dC5kYlBhdGgpO1xuICAgIHZhciByZXBlYXRlZENhbGwgPSBmYWxzZTtcbiAgICBpZiAoIWNhY2hlRW50cnkpIHtcbiAgICAgICAgY2FjaGVFbnRyeSA9IHBkYkNhY2hlLnNldChsb2FkQ29udGV4dC5kYlBhdGgsICEhbG9hZENvbnRleHQuc2hhcmVkRGJQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXBlYXRlZENhbGwgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjYWNoZUVudHJ5LnBkYikge1xuICAgICAgICBvblByb3BlcnR5UGFja0xvYWRDb21wbGV0ZShjYWNoZUVudHJ5LnBkYiwgY2FjaGVFbnRyeS5kYmlkT2xkVG9OZXcpO1xuICAgICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICghY2FjaGVFbnRyeS5lcnJvcikge1xuICAgICAgICAvL0lmIHdlIGFyZSBhbHJlYWR5IGxvYWRpbmcgdGhlIHNhbWUgcHJvcGVydHkgZGF0YWJhc2UsIHF1ZXVlIHRoZSBjYWxsYmFja1xuICAgICAgICBpZiAocmVwZWF0ZWRDYWxsKSB7XG4gICAgICAgICAgICBjYWNoZUVudHJ5LndhaXRpbmdDYWxsYmFja3MucHVzaChvblByb3BlcnR5UGFja0xvYWRDb21wbGV0ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBvblByb3BlcnR5UGFja0xvYWRDb21wbGV0ZShudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkYmZpbGVzID0gbG9hZENvbnRleHQucHJvcGVydHlkYjtcbiAgICBpZiAoIWRiZmlsZXMpIHtcbiAgICAgICAgX3RoaXMucHJvcGRiRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgb25Qcm9wZXJ0eVBhY2tMb2FkQ29tcGxldGUobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbG9hZGVkRGJGaWxlcyA9IHt9O1xuICAgIHZhciBmaWxlc1RvUmVxdWVzdCA9IFtdO1xuXG4gICAgaWYgKGRiZmlsZXMuYXZzLmxlbmd0aCkge1xuXG4gICAgICAgIGZvciAodmFyIHRhZyBpbiBkYmZpbGVzKSB7XG4gICAgICAgICAgICAvLyBTa2lwIGxvYWRpbmcgb2YgZXh0ZXJuYWxJZCB0YWJsZSBpZiB3YW50ZWRcbiAgICAgICAgICAgIGlmIChsb2FkQ29udGV4dC5za2lwRXh0ZXJuYWxJZHMgJiYgdGFnID09ICdpZHMnKSB7XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2FkZWREYkZpbGVzW3RhZ10gPSB7fTtcbiAgICAgICAgICAgIGZpbGVzVG9SZXF1ZXN0LnB1c2goe2ZpbGVuYW1lOiBkYmZpbGVzW3RhZ11bMF0ucGF0aCwgaXNTaGFyZWQ6IGRiZmlsZXNbdGFnXVswXS5pc1NoYXJlZCwgc3RvcmFnZTogbG9hZGVkRGJGaWxlc1t0YWddIH0pO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8vSGFyZGNvZGVkIGxpc3Qgb2YgcGRiIGZpbGVzIC0tIGRlcHJlY2F0ZWQsIHN0aWxsIHVzZWQgd2hlbiBsb2FkaW5nIEYyRCBmaWxlcyBsb2NhbGx5LCB3aXRob3V0XG4gICAgICAgIC8vaGF2aW5nIGxvYWRlZCBhIG1hbmlmZXN0IGZpcnN0LiBBbmQgcHJvYmFibHkgaW4gc29tZSBvdGhlciBjYXNlcy5cblxuICAgICAgICBsb2FkZWREYkZpbGVzID0ge1xuICAgICAgICAgICAgICAgIGlkcyA6IHt9LFxuICAgICAgICAgICAgICAgIGF0dHJzIDoge30sXG4gICAgICAgICAgICAgICAgb2Zmc2V0cyA6IHt9LFxuICAgICAgICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgICAgICAgYXZzOiB7fVxuICAgICAgICB9O1xuXG4gICAgICAgIGZpbGVzVG9SZXF1ZXN0LnB1c2goe2ZpbGVuYW1lOiBkYmZpbGVzLmF0dHJzLmxlbmd0aCA/IGRiZmlsZXMuYXR0cnNbMF0gOiBcIm9iamVjdHNfYXR0cnMuanNvbi5nelwiLCBzdG9yYWdlOiBsb2FkZWREYkZpbGVzLmF0dHJzfSk7XG4gICAgICAgIGZpbGVzVG9SZXF1ZXN0LnB1c2goe2ZpbGVuYW1lOiBkYmZpbGVzLnZhbHVlcy5sZW5ndGggPyBkYmZpbGVzLnZhbHVlc1swXSA6IFwib2JqZWN0c192YWxzLmpzb24uZ3pcIiwgc3RvcmFnZTogbG9hZGVkRGJGaWxlcy52YWx1ZXN9KTtcbiAgICAgICAgZmlsZXNUb1JlcXVlc3QucHVzaCh7ZmlsZW5hbWU6IGRiZmlsZXMuYXZzLmxlbmd0aCA/IGRiZmlsZXMuYXZzWzBdIDogXCJvYmplY3RzX2F2cy5qc29uLmd6XCIsIHN0b3JhZ2U6IGxvYWRlZERiRmlsZXMuYXZzfSk7XG4gICAgICAgIGZpbGVzVG9SZXF1ZXN0LnB1c2goe2ZpbGVuYW1lOiBkYmZpbGVzLm9mZnNldHMubGVuZ3RoID8gZGJmaWxlcy5vZmZzZXRzWzBdIDogXCJvYmplY3RzX29mZnMuanNvbi5nelwiLCBzdG9yYWdlOiBsb2FkZWREYkZpbGVzLm9mZnNldHN9KTtcblxuICAgICAgICAvLyBMb2FkaW5nIHRoZSBleHRlcm5hbElkIHRhYmxlIGlzIG9wdGlvbmFsXG4gICAgICAgIGlmICghbG9hZENvbnRleHQuc2tpcEV4dGVybmFsSWRzKSB7XG4gICAgICAgICAgICBmaWxlc1RvUmVxdWVzdC5wdXNoKHtmaWxlbmFtZTogZGJmaWxlcy5pZHMubGVuZ3RoID8gZGJmaWxlcy5pZHNbMF0gOiBcIm9iamVjdHNfaWRzLmpzb24uZ3pcIiwgc3RvcmFnZTogbG9hZGVkRGJGaWxlcy5pZHN9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmaWxlc1JlbWFpbmluZyA9IGZpbGVzVG9SZXF1ZXN0Lmxlbmd0aDtcbiAgICB2YXIgZmlsZXNGYWlsZWQgPSAwO1xuXG4gICAgZnVuY3Rpb24gb25SZXF1ZXN0Q29tcGxldGlvbihkYXRhKSB7XG5cbiAgICAgICAgZmlsZXNSZW1haW5pbmctLTtcblxuICAgICAgICAvLyBSb3VnaCBlc3RpbWF0ZSBmb3IgcHJvZ3Jlc3MuIEFsdGhvdWdoIHdlIGp1c3QgY291bnQgcmVjZWl2ZWQgZmlsZXMgaGVyZSxcbiAgICAgICAgLy8gaXQgYWxyZWFkeSBoZWxwcyB0byBzaWduZmljYW50bHkgcmVkdWNlIHRoZSBwZXJjZWl2ZWQgXCJub3RoaW5nIGhhcHBlbnNcIiB0aW1lIHBlcmlvZHMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRyYWNraW5nIHRoZSBwcm9ncmVzcyBvZiBzaW5nbGUgcmVxdWVzdHMgd291bGQgYmUgbW9yZSBhY2N1cmF0ZSwgYnV0OlxuICAgICAgICAvLyAgLSBBdHRhY2hpbmcgYW4gb25wcm9ncmVzcyBoYW5kbGVyIHRvIFhIUiB3b3VsZCBjYXVzZSBpdCB0byBjb25zdW1lIDItM3ggbW9yZSBtZW1vcnksXG4gICAgICAgIC8vICAgIGJlY2F1c2UgaXQgaGFzIHRvIHJlY2VpdmUgdGhlIGRhdGEgYXMgdGV4dCBhbmQgdGhlbiBjb252ZXJ0IHRvIGFycmF5IGJ1ZmZlciBvbiB0aGUgZmx5LlxuICAgICAgICAvLyAgLSBEdWUgdG8gdGhlIGNvbnRlbnQgZW5jb2RpbmcsIHRoZSBwcm9ncmVzcyBjYWxsYmFja3Mgd291bGRuJ3Qga25vdyB0aGUgZmlsZSBzaXplLCBidXQgb25seVxuICAgICAgICAvLyAgICB0aGUgYW1vdW50IG9mIHRyYW5zZmVycmVkIGRhdGEsIHNvIHRoYXQgdGhleSB3b3VsZG4ndCBoZWxwIG11Y2guXG4gICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIGNiSWQ6IGxvYWRDb250ZXh0LmNiSWQsXG4gICAgICAgICAgICBwcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIC8vIEhhdmluZyBhbGwgZmlsZXMgbG9hZGVkIGRvZXNuJ3QgbWVhbiB3ZSBhcmUgZnVsbHkgZG9uZS4gUmVzZXJ2ZSA1IHBlcmNlbnQgZm9yIHRoZSByZXN0LlxuICAgICAgICAgICAgICAgIHBlcmNlbnQ6IDk1ICogKGZpbGVzVG9SZXF1ZXN0Lmxlbmd0aCAtIGZpbGVzUmVtYWluaW5nKSAvIGZpbGVzVG9SZXF1ZXN0Lmxlbmd0aFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWRhdGEpXG4gICAgICAgICAgICBmaWxlc0ZhaWxlZCsrO1xuXG4gICAgICAgIC8vIElmIGFsbCBvZiB0aGUgZmlsZXMgd2UndmUgcmVxdWVzdGVkIGhhdmUgYmVlbiByZXRyaWV2ZWQsIGNyZWF0ZSB0aGVcbiAgICAgICAgLy8gcHJvcGVydHkgZGF0YWJhc2UuICBPdGhlcndpc2UsIHJlcXVlc3QgdGhlIG5leHQgcmVxdWlyZWQgZmlsZS5cbiAgICAgICAgLy9cbiAgICAgICAgaWYgKCFmaWxlc1JlbWFpbmluZykge1xuICAgICAgICAgICAgaWYgKGZpbGVzRmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVFbnRyeS5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgb25Qcm9wZXJ0eVBhY2tMb2FkQ29tcGxldGUobnVsbCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNhY2hlRW50cnkud2FpdGluZ0NhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVFbnRyeS53YWl0aW5nQ2FsbGJhY2tzLnNoaWZ0KCkobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vRGUtcmVmZXJlbmNlIHRoZSByZXN1bHQgYnVmZmVyIGZyb20gdGhpcyBhcnJheSBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy9pdCBjYW4gYmUgZnJlZWQgb24gdGhlIGZseSB3aGVuIHRoZSBQcm9wZXJ0eURhdGFiYXNlcyBwYXJzZXMgaXRzZWxmXG4gICAgICAgICAgICAgICAgZmlsZXNUb1JlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICAgICAgICAgICAgICAgIGYuc3RvcmFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvL1N0b3JlIHRoZSBwcm9wZXJ0eSBkYiBpbnN0YW5jZSBpbiBpdHMgY2FjaGUgZW50cnlcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5LnBkYiA9IGxvYWRDb250ZXh0LnVzZUN1c3RvbVByb3BlcnRpZXMgPyBuZXcgUHJvcGVydHlEYXRhYmFzZUN1c3RvbVByb3BlcnR5V3JhcHBlcihsb2FkZWREYkZpbGVzKSA6IG5ldyBQcm9wZXJ0eURhdGFiYXNlKGxvYWRlZERiRmlsZXMpO1xuICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5LnBkYi5yZWZDb3VudCA9IDA7IC8vd2lsbCBiZSBpbmNyZW1lbnRlZCBieSB0aGUgc3VjY2VzcyBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5LmxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnkuZGJGaWxlcyA9IGZpbGVzVG9SZXF1ZXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnkudGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgICAgICAvL1RPRE86IHJldmlzZSB0aGlzIHRvIHVzZSB0aGUgcGRiLmJ5dGVTaXplKCkgY2FsbCBvbmNlIGl0J3MgbWVyZ2VkIGluLlxuICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5LmJ5dGVTaXplID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZiBpbiBsb2FkZWREYkZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwIGluIGxvYWRlZERiRmlsZXNbZl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmRhdGEgPSBsb2FkZWREYkZpbGVzW2ZdW3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnkuYnl0ZVNpemUgKz0gZmRhdGEgJiYgZmRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHAgaW4gbG9hZGVkRGJGaWxlcy5kYmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGxvYWRlZERiRmlsZXMuZGJpZFtwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnkuZGJpZE9sZFRvTmV3ID0gbmV3IEludDMyQXJyYXkoYi5idWZmZXIsIGIuYnl0ZU9mZnNldCwgYi5ieXRlTGVuZ3RoIC8gNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG9uUHJvcGVydHlQYWNrTG9hZENvbXBsZXRlKGNhY2hlRW50cnkucGRiLCBjYWNoZUVudHJ5LmRiaWRPbGRUb05ldyk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNhY2hlRW50cnkud2FpdGluZ0NhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnkud2FpdGluZ0NhbGxiYWNrcy5zaGlmdCgpKGNhY2hlRW50cnkucGRiLCBjYWNoZUVudHJ5LmRiaWRPbGRUb05ldyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2goZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uUHJvcGVydHlQYWNrTG9hZENvbXBsZXRlKG51bGwsIG51bGwsIChlcnIgJiYgZXJyLm1lc3NhZ2UpICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJlcXVlc3QgdGhlIGZpbGVzLlxuICAgIC8vXG4gICAgZmlsZXNUb1JlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICAgIHJlcXVlc3RGaWxlKGYuZmlsZW5hbWUsIGxvYWRDb250ZXh0LCBvblJlcXVlc3RDb21wbGV0aW9uLCBmLnN0b3JhZ2UsIGYuaXNTaGFyZWQpO1xuICAgIH0pO1xufVxuXG5cbmZ1bmN0aW9uIHJlcXVlc3RGaWxlKGZpbGVuYW1lLCBsb2FkQ29udGV4dCwgb25SZXF1ZXN0Q29tcGxldGlvbiwgc3RvcmFnZSwgaXNTaGFyZWQpIHtcblxuICAgIGZ1bmN0aW9uIG9uRmFpbHVyZShzdGF0dXMsIHN0YXR1c1RleHQsIGRhdGEpIHtcbiAgICAgICAgLy8gV2UncmUgZXhwbGljaXRseSBpZ25vcmluZyBtaXNzaW5nIHByb3BlcnR5IGZpbGVzLlxuICAgICAgICBpZiAoc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgICAgIGxvYWRDb250ZXh0Lm9uRmFpbHVyZUNhbGxiYWNrKHN0YXR1cywgc3RhdHVzVGV4dCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgb25SZXF1ZXN0Q29tcGxldGlvbihudWxsKTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmIChmaWxlbmFtZS5pbmRleE9mKFwiOi8vXCIpICE9PSAtMSB8fCBmaWxlbmFtZS5pbmRleE9mKFwidXJuOlwiKSA9PT0gMCkge1xuICAgICAgICB1cmwgPSBmaWxlbmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBubyBkYlBhdGggQU5EIG5vIHVybCBpbiB0aGUgZmlsZW5hbWUgbWVhbnMgbm8gcHJvcGVydHlkYlxuICAgICAgICBpZiAoIWxvYWRDb250ZXh0LmRiUGF0aCkge1xuICAgICAgICAgICAgb25SZXF1ZXN0Q29tcGxldGlvbihudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB1cmwgPSBgJHtsb2FkQ29udGV4dC5kYlBhdGh9JHtmaWxlbmFtZX1gO1xuICAgIH1cblxuICAgIHZhciBmdWxsUGF0aCA9IFZpZXdpbmdTZXJ2aWNlLmdlbmVyYXRlVXJsKGxvYWRDb250ZXh0LmVuZHBvaW50LCBcIml0ZW1zXCIsIHVybCk7XG5cbiAgICB2YXIgb25TdWNjZXNzID0gZnVuY3Rpb24ocmVzcG9uc2UpXG4gICAge1xuICAgICAgICAvL0NhY2hlIGZvciBmdXR1cmUgcmV1c2VcbiAgICAgICAgaWYgKGlzU2hhcmVkKSB7XG4gICAgICAgICAgICBsb2FkQ29udGV4dC53b3JrZXIucGRiQ2FjaGUgJiYgbG9hZENvbnRleHQud29ya2VyLnBkYkNhY2hlLnNldEZpbGUoZnVsbFBhdGgsIHJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0b3JhZ2VbZnVsbFBhdGhdID0gcmVzcG9uc2U7XG4gICAgICAgIG9uUmVxdWVzdENvbXBsZXRpb24ocmVzcG9uc2UpO1xuICAgIH07XG5cbiAgICAvL0Z1bGZpbGwgdGhlIHJlcXVlc3QgZnJvbSBjYWNoZSBpZiBhdmFpbGFibGVcbiAgICB2YXIgY2FjaGVFbnRyeSA9IGxvYWRDb250ZXh0Lndvcmtlci5wZGJDYWNoZSAmJiBsb2FkQ29udGV4dC53b3JrZXIucGRiQ2FjaGUuZ2V0RmlsZShmdWxsUGF0aCk7XG4gICAgaWYgKGNhY2hlRW50cnkpIHtcbiAgICAgICAgY2FjaGVFbnRyeS5yZWZDb3VudCsrO1xuICAgICAgICBvblN1Y2Nlc3MoY2FjaGVFbnRyeS5kYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBWaWV3aW5nU2VydmljZS5nZXRJdGVtKGxvYWRDb250ZXh0LCB1cmwsIG9uU3VjY2Vzcywgb25GYWlsdXJlKTtcbiAgICB9XG5cbn1cblxuZnVuY3Rpb24gY3JlYXRlVHJlZShub2RlLCBwYXJlbnQsIGRiVG9GcmFnLCBub2RlU3RvcmFnZSkge1xuICAgIHZhciBkYklkID0gbm9kZS5kYklkO1xuICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkcmVuSWRzID0gW107XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgIGZvciAodmFyIGo9MDsgajxjaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkSGFzQ2hpbGRyZW4gPSBjcmVhdGVUcmVlKGNoaWxkcmVuW2pdLCBkYklkLCBkYlRvRnJhZywgbm9kZVN0b3JhZ2UpO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGRIYXNDaGlsZHJlbilcbiAgICAgICAgICAgICAgICBjaGlsZHJlbklkcy5wdXNoKGNoaWxkcmVuW2pdLmRiSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyYWdJZHM7XG5cbiAgICAvL2xlYWYgbm9kZVxuICAgIGlmIChkYlRvRnJhZykge1xuICAgICAgICB2YXIgZnJhZ3MgPSBkYlRvRnJhZ1tkYklkXTtcbiAgICAgICAgaWYgKGZyYWdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShmcmFncykpXG4gICAgICAgICAgICAgICAgZnJhZ0lkcyA9IFtmcmFnc107XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZnJhZ0lkcyA9IGZyYWdzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkQ291bnQgPSBjaGlsZHJlbklkcy5sZW5ndGggKyAoZnJhZ0lkcyA/IGZyYWdJZHMubGVuZ3RoIDogMCk7XG4gICAgaWYgKGNoaWxkQ291bnQpIHtcbiAgICAgICAgbm9kZVN0b3JhZ2Uuc2V0Tm9kZShkYklkLCBwYXJlbnQsIG5vZGUubmFtZS50b1N0cmluZygpLCAwLCBjaGlsZHJlbklkcywgZnJhZ0lkcyk7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZENvdW50O1xufVxuXG5mdW5jdGlvbiBkb09iamVjdFRyZWVDcmVhdGUobG9hZENvbnRleHQpIHtcbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG4gICAgdmFyIGdsdGZUcmVlID0gbG9hZENvbnRleHQuZ2x0ZlRyZWU7XG4gICAgdmFyIGRiVG9GcmFnSWQgPSBsb2FkQ29udGV4dC5kYlRvRnJhZ0lkO1xuICAgIHZhciBub2RlU3RvcmFnZSA9IG5ldyBJbnN0YW5jZVRyZWVTdG9yYWdlKCk7XG5cbiAgICBjcmVhdGVUcmVlKGdsdGZUcmVlLCAwLCBkYlRvRnJhZ0lkLCBub2RlU3RvcmFnZSk7XG4gICAgbm9kZVN0b3JhZ2UuZmxhdHRlbigpO1xuXG4gICAgX3RoaXMucG9zdE1lc3NhZ2UoeyBjYklkOmxvYWRDb250ZXh0LmNiSWQsXG4gICAgICAgIHJlc3VsdCA6IHtcbiAgICAgICAgICAgIHJvb3RJZDogZ2x0ZlRyZWUuZGJJZCxcbiAgICAgICAgICAgIGluc3RhbmNlVHJlZVN0b3JhZ2U6IG5vZGVTdG9yYWdlXG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZG9PYmplY3RUcmVlUGFyc2UobG9hZENvbnRleHQpIHtcblxuICAgIHZhciBfdGhpcyA9IGxvYWRDb250ZXh0LndvcmtlcjtcblxuICAgIGZ1bmN0aW9uIG9uUHJvcGVydHlQYWNrTG9hZENvbXBsZXRlKHByb3BlcnR5RGIsIGRiaWRPbGRUb05ldywgZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIGlmKCFwcm9wZXJ0eURiKSB7XG4gICAgICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgY2JJZDogbG9hZENvbnRleHQuY2JJZCxcbiAgICAgICAgICAgICAgICBlcnJvcjogeyBpbnN0YW5jZVRyZWU6bnVsbCwgbWF4VHJlZURlcHRoOjAsIGVycjogZXJyb3JNZXNzYWdlIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydHlEYi5yZWZDb3VudCsrO1xuXG4gICAgICAgIC8vRmluZCB0aGUgcm9vdCBvYmplY3Q6XG4gICAgICAgIC8vVE9ETzogaW50ZXJuYWxpemUgdGhpcyBpbnRvIHRoZSBwZGIgb2JqZWN0LlxuICAgICAgICBpZiAoIWxvYWRDb250ZXh0LnNraXBJbnN0YW5jZVRyZWVSZXN1bHQgJiYgIXByb3BlcnR5RGIucm9vdHNEb25lKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eURiLmlkcm9vdHMgPSBwcm9wZXJ0eURiLmZpbmRSb290Tm9kZXMoKTtcbiAgICAgICAgICAgIHByb3BlcnR5RGIucm9vdHNEb25lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290SWQ7XG4gICAgICAgIHZhciBtYXhEZXB0aCA9IFswXTtcblxuICAgICAgICB2YXIgdHJhbnNmZXJMaXN0ID0gW107XG4gICAgICAgIHZhciBzdG9yYWdlO1xuICAgICAgICBsZXQgbm9kZUFjY2VzcyA9IG51bGw7XG5cbiAgICAgICAgdmFyIGZyYWdUb0RiSWQgPSBsb2FkQ29udGV4dC5mcmFnVG9EYklkO1xuXG4gICAgICAgIC8vIE9ubHkgbmVlZCB0byByZWJ1aWxkIGZyYWdUb0RiSWQgdXNpbmcgdGhlIG9sZCBJRHMgaW4gRjJEIGNhc2UuXG4gICAgICAgIGlmIChsb2FkQ29udGV4dC5uZWVkc0RiSWRSZW1hcCAmJiBsb2FkQ29udGV4dC5pczJkKSB7XG4gICAgICAgICAgICBpZiAoIWRiaWRPbGRUb05ldykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIklEIHJlbWFwIHJlcXVpcmVkLCBidXQgbm90IGxvYWRlZC5cIik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFmcmFnVG9EYklkKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTm8gZnJhZy0+ZGJpZCBtYXBwaW5nIS5cIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgLy9SZXBsYWNlIHRoZSBmcmFnMmRiaWQgbWFwcGluZyBieSBhIG5ldyBvbmUgdXNpbmcgdGhlXG4gICAgICAgICAgICAgICAgLy9jb3JyZWN0IHByb3BlcnR5IGRiIHYyIGlkcy5cbiAgICAgICAgICAgICAgICB2YXIgb2xkMm5ldyA9IGRiaWRPbGRUb05ldztcbiAgICAgICAgICAgICAgICB2YXIgZnIyaWQgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxmcmFnVG9EYklkLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBmcmFnVG9EYklkW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnIyaWRbaV0gPSBvbGQybmV3W2RdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnIyaWRbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxkLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnIyaWRbaV1bal0gPSBvbGQybmV3W2Rbal1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnJhZ1RvRGJJZCA9IGZyMmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9JbiB0aGUgY2FzZXMgb2YgMkQgZHJhd2luZ3MsIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWxcbiAgICAgICAgLy9vYmplY3QgaGllcmFyY2h5LCBzbyB3ZSBkb24ndCBidWlsZCBhIHRyZWUuXG4gICAgICAgIHZhciBpZHJvb3RzID0gcHJvcGVydHlEYi5pZHJvb3RzO1xuICAgICAgICBpZiAoaWRyb290cyAmJiBpZHJvb3RzLmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICAgICAgc3RvcmFnZSA9IG5ldyBJbnN0YW5jZVRyZWVTdG9yYWdlKCk7XG5cbiAgICAgICAgICAgIGlmIChpZHJvb3RzLmxlbmd0aCA9PSAxICYmIHByb3BlcnR5RGIubm9kZUhhc0NoaWxkKGlkcm9vdHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgLy9DYXNlIG9mIGEgc2luZ2xlIHJvb3QgaW4gdGhlIHByb3BlcnR5IGRhdGFiYXNlLFxuICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgYXMgdGhlIGRvY3VtZW50IHJvb3QuXG4gICAgICAgICAgICAgICAgcm9vdElkID0gaWRyb290c1swXTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eURiLmJ1aWxkT2JqZWN0VHJlZShyb290SWQsIGZyYWdUb0RiSWQsIG1heERlcHRoLCBzdG9yYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vQ2FzZSBvZiBtdWx0aXBsZSBub2RlcyBhdCB0aGUgcm9vdCBsZXZlbFxuICAgICAgICAgICAgICAgIC8vVGhpcyBoYXBwZW5zIGluIERXRnMgY29taW5nIGZyb20gUmV2aXQuXG4gICAgICAgICAgICAgICAgLy9DcmVhdGUgYSBkdW1teSByb290IGFuZCBhZGQgYWxsIHRoZSBvdGhlciByb290c1xuICAgICAgICAgICAgICAgIC8vYXMgaXRzIGNoaWxkcmVuLlxuICAgICAgICAgICAgICAgIHJvb3RJZCA9IC0xZTEwOyAgICAgICAgIC8vIEJpZyBuZWdhdGl2ZSBudW1iZXIgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBGMkRcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW5JZHMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxpZHJvb3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RGIuYnVpbGRPYmplY3RUcmVlKGlkcm9vdHNbaV0sIGZyYWdUb0RiSWQsIG1heERlcHRoLCBzdG9yYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5JZHMucHVzaChpZHJvb3RzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdG9yYWdlLnNldE5vZGUocm9vdElkLCAwLCBcIlwiLCAwLCBjaGlsZHJlbklkcywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdG9yYWdlLmZsYXR0ZW4oKTtcbiAgICAgICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKHN0b3JhZ2Uubm9kZXMuYnVmZmVyKTtcbiAgICAgICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKHN0b3JhZ2UuY2hpbGRyZW4uYnVmZmVyKTtcbiAgICAgICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKHN0b3JhZ2Uuc3RyaW5ncy5idWYuYnVmZmVyKTtcbiAgICAgICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKHN0b3JhZ2Uuc3RyaW5ncy5pZHguYnVmZmVyKTtcblxuXG4gICAgICAgICAgICAvL05vdyBjb21wdXRlIHRoZSBib3VuZGluZyBib3hlcyBmb3IgaW5zdGFuY2UgdHJlZSBub2Rlc1xuICAgICAgICAgICAgaWYgKGxvYWRDb250ZXh0LmZyYWdCb3hlcykge1xuICAgICAgICAgICAgICAgIG5vZGVBY2Nlc3MgPSBuZXcgSW5zdGFuY2VUcmVlQWNjZXNzKHN0b3JhZ2UsIHJvb3RJZCk7XG4gICAgICAgICAgICAgICAgbm9kZUFjY2Vzcy5jb21wdXRlQm94ZXMobG9hZENvbnRleHQuZnJhZ0JveGVzKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zlckxpc3QucHVzaChub2RlQWNjZXNzLm5vZGVCb3hlcy5idWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UoeyBjYklkOmxvYWRDb250ZXh0LmNiSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RJZDogcm9vdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlVHJlZVN0b3JhZ2U6IHN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VCb3hlczogbm9kZUFjY2VzcyA/IG5vZGVBY2Nlc3Mubm9kZUJveGVzIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiaWRPbGRUb05ldzogbG9hZENvbnRleHQubmVlZHNEYklkUmVtYXAgPyBkYmlkT2xkVG9OZXcgOiBudWxsLC8vSWYgd2UgaGF2ZSBhIGRiSWQgbWFwcGluZyAoZnJvbSBuZXcgT1RHIGRiSWRzIHRvIG9sZCBGMkQgZGJJZHMgc2VuZCBpdCB0byB0aGUgbWFpbiB0aHJlYWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VHJlZURlcHRoOm1heERlcHRoWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdENvdW50OnByb3BlcnR5RGIuZ2V0T2JqZWN0Q291bnQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJhbnNmZXJMaXN0KTtcbiAgICB9XG5cbiAgICBsb2FkUHJvcGVydHlQYWNrcyhsb2FkQ29udGV4dCwgbnVsbCwgb25Qcm9wZXJ0eVBhY2tMb2FkQ29tcGxldGUpO1xufVxuXG5mdW5jdGlvbiBkb1Byb3BlcnR5U2VhcmNoKGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICB2YXIgY2FjaGVFbnRyeSA9IF90aGlzLnBkYkNhY2hlICYmIF90aGlzLnBkYkNhY2hlLmdldChsb2FkQ29udGV4dC5kYlBhdGgpO1xuXG4gICAgaWYgKGNhY2hlRW50cnkgJiYgY2FjaGVFbnRyeS5wZGIpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IGxvYWRDb250ZXh0LnNlYXJjaFRleHQ7XG4gICAgICAgIHZhciByZXN1bHQgPSBjYWNoZUVudHJ5LnBkYi5icnV0ZUZvcmNlU2VhcmNoKHNlYXJjaFRleHQsIGxvYWRDb250ZXh0LmF0dHJpYnV0ZU5hbWVzLCBsb2FkQ29udGV4dC5zZWFyY2hPcHRpb25zKTtcbiAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UoeyBjYklkOmxvYWRDb250ZXh0LmNiSWQsIHJlc3VsdDpyZXN1bHQgfSk7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGRvUHJvcGVydHlEaWZmKGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICAvLyBnZXQgcHJvcGVydHkgZGJzIHRvIGNvbXBhcmVcbiAgICB2YXIgY2FjaGVFbnRyeTEgPSBfdGhpcy5wZGJDYWNoZSAmJiBfdGhpcy5wZGJDYWNoZS5nZXQobG9hZENvbnRleHQuZGJQYXRoKTtcbiAgICB2YXIgY2FjaGVFbnRyeTIgPSBfdGhpcy5wZGJDYWNoZSAmJiBfdGhpcy5wZGJDYWNoZS5nZXQobG9hZENvbnRleHQuZGJQYXRoMik7XG4gICAgdmFyIHBkYjEgPSBjYWNoZUVudHJ5MSAmJiBjYWNoZUVudHJ5MS5wZGI7XG4gICAgdmFyIHBkYjIgPSBjYWNoZUVudHJ5MiAmJiBjYWNoZUVudHJ5Mi5wZGI7XG5cbiAgICAvLyBzZW5kIG1lc3NhZ2VzIGZvciBwcm9ncmVzcyBldmVudHMgdG8gbWFpbiB0aHJlYWRcbiAgICB2YXIgb25Qcm9ncmVzcyA9IGZ1bmN0aW9uKHBlcmNlbnQpIHtcbiAgICAgICAgbG9hZENvbnRleHQud29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIGNiSWQ6IGxvYWRDb250ZXh0LmNiSWQsXG4gICAgICAgICAgICBwcm9ncmVzczogeyBwZXJjZW50OiBwZXJjZW50IH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmIChwZGIxICYmIHBkYjIpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHBkYjEuZmluZERpZmZlcmVuY2VzKHBkYjIsIGxvYWRDb250ZXh0LmRpZmZPcHRpb25zLCBvblByb2dyZXNzKTtcbiAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UoIHsgY2JJZDogbG9hZENvbnRleHQuY2JJZCwgcmVzdWx0OiByZXN1bHQgfSApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZG9Qcm9wZXJ0eUZpbmQobG9hZENvbnRleHQpIHtcblxuICAgIHZhciBfdGhpcyA9IGxvYWRDb250ZXh0LndvcmtlcjtcblxuICAgIHZhciBjYWNoZUVudHJ5ID0gX3RoaXMucGRiQ2FjaGUgJiYgX3RoaXMucGRiQ2FjaGUuZ2V0KGxvYWRDb250ZXh0LmRiUGF0aCk7XG5cbiAgICBpZiAoY2FjaGVFbnRyeSAmJiBjYWNoZUVudHJ5LnBkYikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY2FjaGVFbnRyeS5wZGIuYnJ1dGVGb3JjZUZpbmQobG9hZENvbnRleHQucHJvcGVydHlOYW1lKTtcbiAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UoeyBjYklkOmxvYWRDb250ZXh0LmNiSWQsIHJlc3VsdDpyZXN1bHQgfSk7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGRvTGF5ZXJzRmluZChsb2FkQ29udGV4dCkge1xuICAgIHZhciBfdGhpcyA9IGxvYWRDb250ZXh0LndvcmtlcjtcblxuICAgIHZhciBjYWNoZUVudHJ5ID0gX3RoaXMucGRiQ2FjaGUgJiYgX3RoaXMucGRiQ2FjaGUuZ2V0KGxvYWRDb250ZXh0LmRiUGF0aCk7XG5cbiAgICBpZiAoY2FjaGVFbnRyeSAmJiBjYWNoZUVudHJ5LnBkYikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY2FjaGVFbnRyeS5wZGIuZmluZExheWVycygpO1xuICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7IGNiSWQ6bG9hZENvbnRleHQuY2JJZCwgcmVzdWx0OnJlc3VsdCB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNlYXJjaFRyZWUobm9kZSwgZGJJZCwgcmVzdWx0KSB7XG4gICAgaWYoT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihkYklkID09IG5vZGUuZGJJZCkge1xuICAgICAgICByZXN1bHRbJ25hbWUnXSA9IG5vZGUubmFtZTtcbiAgICAgICAgcmVzdWx0WydkYklkJ10gPSBkYklkO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaj0wOyBqPGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBzZWFyY2hUcmVlKGNoaWxkcmVuW2pdLCBkYklkLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVJlc3VsdHMobG9hZENvbnRleHQpIHtcbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICB2YXIgY2FjaGVFbnRyeSA9IF90aGlzLnBkYkNhY2hlICYmIF90aGlzLnBkYkNhY2hlLmdldChsb2FkQ29udGV4dC5kYlBhdGgpO1xuXG4gICAgaWYgKCFjYWNoZUVudHJ5IHx8ICFjYWNoZUVudHJ5LnBkYikge1xuICAgICAgICBpZiAobG9hZENvbnRleHQuZ2x0ZlRyZWUpIHtcbiAgICAgICAgICAgIHZhciBnbHRmVHJlZSA9IGxvYWRDb250ZXh0LmdsdGZUcmVlO1xuICAgICAgICAgICAgdmFyIHJlc3VsdD0ge307XG4gICAgICAgICAgICBzZWFyY2hUcmVlKGdsdGZUcmVlLCBsb2FkQ29udGV4dC5kYklkLCByZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRiSWQgPSBsb2FkQ29udGV4dC5kYklkO1xuICAgIHZhciBkYklkcyA9IGxvYWRDb250ZXh0LmRiSWRzO1xuICAgIHZhciBwcm9wRmlsdGVyID0gbG9hZENvbnRleHQucHJvcEZpbHRlcjtcbiAgICB2YXIgaWdub3JlSGlkZGVuID0gbG9hZENvbnRleHQuaWdub3JlSGlkZGVuO1xuICAgIHZhciBjYXRlZ29yeUZpbHRlciA9IGxvYWRDb250ZXh0LmNhdGVnb3J5RmlsdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBkYklkcyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoZGJJZHMgJiYgZGJJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8ZGJJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gY2FjaGVFbnRyeS5wZGIuZ2V0T2JqZWN0UHJvcGVydGllcyhkYklkc1tpXSwgcHJvcEZpbHRlciwgaWdub3JlSGlkZGVuLCB1bmRlZmluZWQsIGNhdGVnb3J5RmlsdGVyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy9JZiBkYklkcyBpcyBlbXB0eSwgcmV0dXJuIHJlc3VsdHMgZm9yIGFsbCBvYmplY3RzIChpLmUuIG5vIElEIGZpbHRlcilcbiAgICAgICAgICAgIGZvciAobGV0IGk9MSwgbGFzdD1jYWNoZUVudHJ5LnBkYi5nZXRPYmplY3RDb3VudCgpOyBpPD1sYXN0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gY2FjaGVFbnRyeS5wZGIuZ2V0T2JqZWN0UHJvcGVydGllcyhpLCBwcm9wRmlsdGVyLCBpZ25vcmVIaWRkZW4sIHVuZGVmaW5lZCwgY2F0ZWdvcnlGaWx0ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBjYWNoZUVudHJ5LnBkYi5nZXRPYmplY3RQcm9wZXJ0aWVzKGRiSWQsIHByb3BGaWx0ZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjYXRlZ29yeUZpbHRlcik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb1Byb3BlcnR5R2V0KGxvYWRDb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBnZXRQcm9wZXJ0eVJlc3VsdHMobG9hZENvbnRleHQpO1xuICAgIGlmICghcmVzdWx0cykge1xuICAgICAgICBsb2FkQ29udGV4dC53b3JrZXIucG9zdE1lc3NhZ2Uoe2NiSWQ6bG9hZENvbnRleHQuY2JJZCwgZXJyb3I6IHttc2c6XCJQcm9wZXJ0aWVzIGFyZSBub3QgYXZhaWxhYmxlLlwifX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvYWRDb250ZXh0Lndvcmtlci5wb3N0TWVzc2FnZSh7Y2JJZDpsb2FkQ29udGV4dC5jYklkLCByZXN1bHQ6IHJlc3VsdHN9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRvUHJvcGVydHlTZXRHZXQobG9hZENvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IGdldFByb3BlcnR5UmVzdWx0cyhsb2FkQ29udGV4dCk7XG4gICAgaWYgKCFyZXN1bHRzKSB7XG4gICAgICAgIGxvYWRDb250ZXh0Lndvcmtlci5wb3N0TWVzc2FnZSh7Y2JJZDpsb2FkQ29udGV4dC5jYklkLCBlcnJvcjoge21zZzpcIlByb3BlcnRpZXMgYXJlIG5vdCBhdmFpbGFibGUuXCJ9fSk7XG4gICAgfVxuXG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIHZhciBuYW1lcyA9IFtdO1xuXG4gICAgLy8gUHJvY2VzcyB0aGUgcmVzdWx0cyBhbmQgZ2VuZXJhdGUgYSBtYXAuXG4gICAgLy8gVGhlIG1hcCdzIGtleXMgYXJlIFwiZGlzcGxheUNhdGVnb3J5L2Rpc3BsYXlOYW1lXCIgYW5kIHRoZSBtYXAncyB2YWx1ZXMgYXJlIGFsbCBvZiB0aGUgcHJvcGVydGllcyBjb250YWluaW5nIHRoZSBzYW1lIG5hbWUgYW5kIGNhdGVnb3J5LlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGggOyArK2kpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIGNvbnN0IHByb3BzID0gcmVzdWx0LnByb3BlcnRpZXM7XG5cbiAgICAgICAgLy8gTm90IGV2ZXJ5IGRvY3VtZW50IHR5cGUgaGFzIGEgcHJvcGVyIGV4dGVybmFsSWRcbiAgICAgICAgLy8gV2Ugd2lsbCBoYW5kbGUgb25seSBSVlQgd2hpY2ggaGFzIHRyYW5zbGF0YWJsZSBmcm9tIEhleCB0byBEZWNpbWFsIHZhbHVlXG4gICAgICAgIGlmIChsb2FkQ29udGV4dC5maWxlVHlwZSA9PT0gJ3J2dCcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRJZDtcblxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm9wZXJ0aWVzIGluY2x1ZGUgYW4gZWxlbWVudCBJRCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudElkUHJvcGVydHkgPSBwcm9wcy5maW5kKGVhY2ggPT4gZWFjaC5hdHRyaWJ1dGVOYW1lID09PSBcIkVsZW1lbnRJZFwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50SWRQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50SWQgPSBlbGVtZW50SWRQcm9wZXJ0eS5kaXNwbGF5VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gT3IgZmFsbCBiYWNrIGFuZCBnZW5lcmF0ZSBpdCBmcm9tIHRoZSBleHRlcm5hbCBJRCwgaWYgdGhlIGV4dGVybmFsIElEIGlzIHByZXNlbnRcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmV4dGVybmFsSWQgJiYgIWVsZW1lbnRJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5hbElkU3BsaXQgPSByZXN1bHQuZXh0ZXJuYWxJZC5zcGxpdCgnLScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRlcm5hbElkU3BsaXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50SWQgPSBwYXJzZUludChleHRlcm5hbElkU3BsaXRbZXh0ZXJuYWxJZFNwbGl0Lmxlbmd0aCAtIDFdLCAxNik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBzaW5jZSBpbiB0aGlzIGNvbnRleHQgd2UgZG9uJ3Qga25vdyBlaXRoZXIgbW9kZWwgT1RHL1NWRiwgd2Ugd2lsbCBhZGQgZWxlbWVudElkIG9ubHkgaWYgbmFtZSBpc24ndCBhbHJlYWR5IGluY2x1ZGVkXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRJZCAmJiAhcmVzdWx0Lm5hbWUuaW5jbHVkZXMoZWxlbWVudElkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQubmFtZSArPSBgIFske2VsZW1lbnRJZH1dYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBmYWlsdXJlcyB0byBnZW5lcmF0ZSBFbGVtZW50SWQgdG8gZmFpbCB0aGUgd2hvbGUgUHJvcGVydHlTZXQgcHJvY2Vzcy5cbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYENhdWdodCBlcnJvciBpbiB1cGRhdGluZyBFbGVtZW50SWRzLCBvYmplY3Qgd2l0aCBkYklkICR7cmVzdWx0LmRiSWR9IHNraXBwZWRgLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgIC8vIFRoZSBjYXRlZ29yeSBpcyBhbHdheXMgcHJlc2VudCBmb3IgcmV2aXQgYnV0IG5vdCBmdXNpb24uXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gYWRkIGEgTmFtZSBrZXkgdG8gdGhlIHByb3BlcnR5IHNldCBtYXAuXG4gICAgICAgICAgICBpZiAocHJvcC5kaXNwbGF5TmFtZSA9PT0gJ05hbWUnICYmICFwcm9wLmRpc3BsYXlDYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIE5hbWUgZW50cmllcy5cbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKHJlc3VsdC5uYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGlkZW50aWZpZXIgPSAhcHJvcC5kaXNwbGF5Q2F0ZWdvcnkgPyBwcm9wLmRpc3BsYXlOYW1lIDogYCR7cHJvcC5kaXNwbGF5Q2F0ZWdvcnl9LyR7cHJvcC5kaXNwbGF5TmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBpZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgICAgIG1hcFtpZGVudGlmaWVyXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcC5wYXJlbnROYW1lID0gcmVzdWx0Lm5hbWU7XG4gICAgICAgICAgICBwcm9wLmRiSWQgPSByZXN1bHQuZGJJZDtcbiAgICAgICAgICAgIG1hcFtpZGVudGlmaWVyXS5wdXNoKHByb3ApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgYSBOYW1lIGtleSB0byB0aGUgcHJvcGVydHkgc2V0IG1hcC5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsICduYW1lJykgJiYgbmFtZXMuaW5kZXhPZihyZXN1bHQubmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXAsICdOYW1lJykpIHtcbiAgICAgICAgICAgICAgICBtYXBbJ05hbWUnXSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXBbJ05hbWUnXS5wdXNoKHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgICAgZGlzcGxheUNhdGVnb3J5OiBudWxsLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAyMCxcbiAgICAgICAgICAgICAgICB1bml0czogbnVsbCxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMCxcbiAgICAgICAgICAgICAgICBkYklkOiByZXN1bHQuZGJJZCxcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiByZXN1bHQubmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5hbWVzID0gW107XG4gICAgbWFwW1wiX19zZWxlY3RlZF9kYklkc19fXCJdID0gbG9hZENvbnRleHQuZGJJZHM7XG4gICAgbG9hZENvbnRleHQud29ya2VyLnBvc3RNZXNzYWdlKHtjYklkOmxvYWRDb250ZXh0LmNiSWQsIHJlc3VsdDogbWFwfSk7XG59XG5cblxuZnVuY3Rpb24gZG9CdWlsZEV4dGVybmFsSWRNYXBwaW5nKGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICB2YXIgY2FjaGVFbnRyeSA9IF90aGlzLnBkYkNhY2hlICYmIF90aGlzLnBkYkNhY2hlLmdldChsb2FkQ29udGV4dC5kYlBhdGgpO1xuXG4gICAgaWYgKGNhY2hlRW50cnkgJiYgY2FjaGVFbnRyeS5wZGIpIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBjYWNoZUVudHJ5LnBkYi5nZXRFeHRlcm5hbElkTWFwcGluZyhsb2FkQ29udGV4dC5leHRJZEZpbHRlcik7XG4gICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKHtjYklkIDogbG9hZENvbnRleHQuY2JJZCwgcmVzdWx0OiBtYXBwaW5nfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb0J1aWxkTGF5ZXJUb05vZGVJZE1hcHBpbmcobG9hZENvbnRleHQpIHtcbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICB2YXIgY2FjaGVFbnRyeSA9IF90aGlzLnBkYkNhY2hlICYmIF90aGlzLnBkYkNhY2hlLmdldChsb2FkQ29udGV4dC5kYlBhdGgpO1xuXG4gICAgaWYgKGNhY2hlRW50cnkgJiYgY2FjaGVFbnRyeS5wZGIpIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBjYWNoZUVudHJ5LnBkYi5nZXRMYXllclRvTm9kZUlkTWFwcGluZygpO1xuICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7Y2JJZCA6IGxvYWRDb250ZXh0LmNiSWQsIHJlc3VsdDogbWFwcGluZ30pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZG9VbmxvYWRQcm9wZXJ0eURiKGxvYWRDb250ZXh0KSB7XG4gICAgdmFyIF90aGlzID0gbG9hZENvbnRleHQud29ya2VyO1xuXG4gICAgaWYgKGxvYWRDb250ZXh0LmNsZWFyQ2FjaGVzKSB7XG4gICAgICAgIF90aGlzLnBkYkNhY2hlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIF90aGlzLnBkYkNhY2hlICYmIF90aGlzLnBkYkNhY2hlLmRlbGV0ZShsb2FkQ29udGV4dC5kYlBhdGgpO1xufVxuXG4vLyBSZXF1aXJlZCBwYXJhbXNcbi8vICBAcGFyYW0ge3N0cmluZ30gbG9hZENvbnRleHQuZGJQYXRoXG4vLyAgQHBhcmFtIHtzdHJpbmd9IGxvYWRDb250ZXh0Lmlkc0ZpbGUgLSBmaWxlbmFtZSBvZiB0aGUgaWRzLWZpbGVcbi8vICBAcGFyYW0ge3N0cmluZ30gbG9hZENvbnRleHQuY2JJZCAgICAtIHdvcmtlciBjYWxsYmFjayBpZFxuLy8gIEBwYXJhbSB7T2JqZWN0fSBsb2FkQ29udGV4dC53b3JrZXIgIC0gZ2xvYmFsIHdvcmtlciBjb250ZXh0XG4vL1xuLy8gUHJlY29uZGl0aW9uczpcbi8vICAtIFByb3BEYkxvYWRlciBtYWtlcyBzdXJlIHRoYXQgdGhpcyB0YXNrIGlzIG5vdCBjYWxsZWQgYmVmb3JlIHByb3BEYiBmaW5pc2hlZCBsb2FkaW5nLiAoc2VlIGFzeW5jUHJvcGVydHlPcGVyYXRpb24gaW4gUHJvcERibExvYWRlcilcbmZ1bmN0aW9uIGRvTG9hZEV4dGVybmFsSWRzKGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICAvLyBEZXByZWNhdGVkIGNhc2U6IElmIHBkYkZpbGVzIGFyZSBub3Qga25vd24gdXNlIGhhcmQtd2lyZWQgb25lIChzZWUgY29tbWVudCBpbiBsb2FkUHJvcGVydHlQYWNrcylcbiAgICB2YXIgaWRzRmlsZUVudHJ5ID0gbG9hZENvbnRleHQuaWRzRmlsZSB8fCB7IHBhdGg6IFwib2JqZWN0c19pZHMuanNvbi5nelwiIH07XG5cbiAgICAvLyBBZnRlciBsb2FkaW5nLCBzdG9yYWdlW2Z1bGxQYXRoXSB3aWxsIGNvbnRhaW4gdGhlIHJlc3BvbnNlIGJsb2IuXG4gICAgdmFyIHN0b3JhZ2UgPSB7fTtcblxuICAgIC8vIFB1cnBvc2Ugb2YgZG9Mb2FkRXh0ZXJuYWxJZHMgaXMgdG8gZGVsYXktbG9hZCB0aGUgaWRzIGZvciBhIFByb3BEYi5cbiAgICAvLyBJZiB0aGlzIHByb3BEYiBpcyBub3QgbG9hZGVkIGFuZCBub3QgZXZlbiByZXF1ZXN0ZWQgdG8gbG9hZCwgd2UgY2Fubm90IGFkZCBleHRlcm5hbElkcyB0byBpdC5cbiAgICB2YXIgY2FjaGVFbnRyeSA9IF90aGlzLnBkYkNhY2hlLmdldChsb2FkQ29udGV4dC5kYlBhdGgpO1xuICAgIGlmICghY2FjaGVFbnRyeSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdEZWxheS1sb2FkaW5nIG9mIGV4dGVybmFsSURzIHJlcXVpcmVzIHRvIGxvYWQgdGhlIHByb3BEYiBmaXJzdC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNraXAgaGVyZSBpZiB3ZSBoYXZlIHRoZSBpZHMgYWxyZWFkeS4gTm90ZSB0aGF0IHRoaXMgd2lsbCB1c3VhbGx5IGJlIHByZXZlbnRlZCBieSBwcm9wRGJMb2FkZXIgYWxyZWFkeS5cbiAgICBpZiAoY2FjaGVFbnRyeS5wZGIgJiYgY2FjaGVFbnRyeS5wZGIuZXh0ZXJuYWxJZHNMb2FkZWQoKSkge1xuICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7Y2JJZDogbG9hZENvbnRleHQuY2JJZH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVjZWl2ZXMgaWRzLWZpbGUgYmxvYiAob3IgbnVsbCBvbiBmYWlsdXJlKVxuICAgIHZhciBvbkRvbmUgPSBmdW5jdGlvbihkYXRhKSB7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAvLyBMb2FkaW5nIGZhaWxlZC4gcmVxdWVzdEZpbGUoKSBhbHJlYWR5IHBvc3RlZCBhbiBlcnJvciBtZXNzYWdlIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmQgcHJvcGVydHlEQiBpbiBjYWNoZSB0aGF0IHdlIHdhbnQgdG8gbG9hZCBpZHMgZm9yXG4gICAgICAgIGxldCBwZGJDYWNoZSA9IF90aGlzLnBkYkNhY2hlO1xuICAgICAgICBjYWNoZUVudHJ5ID0gcGRiQ2FjaGUuZ2V0KGxvYWRDb250ZXh0LmRiUGF0aCk7XG4gICAgICAgIGlmICghY2FjaGVFbnRyeSB8fCAhY2FjaGVFbnRyeS5wZGIpIHtcblxuICAgICAgICAgICAgLy8gUHJvcERCTG9hZGVyIGRlbGF5cyBpZC1sb2FkaW5nIHVudGlsIHByb3BlcnR5REIgZmluaXNoZWQgbG9hZGluZy5cbiAgICAgICAgICAgIC8vIFNvLCBpZiB3ZSBnZXQgaGVyZSBhbmQgY2Fubm90IGZpbmQgdGhlIHByb3BEYiwgd2UgY2FuIGFzc3VtZSB0aGF0IHRoZSBwcm9wZXJ0eURiIG11c3QgaGF2ZSBiZWVuIHVubG9hZGVkIG1lYW53aGlsZS5cblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgbGVhayB0aGUgYmxvYiBpbiB0aGUgZmlsZS1jYWNoZSAocmVxdWVzdEZpbGUgYWRkcyB0aGUgcmVmZXJlbmNlIGF1dG9tYXRpY2FsbHkpXG4gICAgICAgICAgICBwZGJDYWNoZS51bnJlZkZpbGVDYWNoZUVudHJ5KHN0b3JhZ2UpO1xuXG4gICAgICAgICAgICAvLyBTZW5kIG1lc3NhZ2UgdG8gaW5mb3JtIHRoYXQgd2FpdGluZyBtYWtlcyBubyBzZW5zZSBhbnltb3JlLCBiZWNhdXNlXG4gICAgICAgICAgICAvLyBwcm9wRGIgaGFzIGJlZW4gdW5sb2FkZWQgbWVhbndoaWxlLlxuICAgICAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIGNiSWQ6IGxvYWRDb250ZXh0LmNiSWQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcERiV2FzVW5sb2FkZWQ6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgaWRzIGF2YWlsYWJsZSBpbiBwZGJcbiAgICAgICAgY2FjaGVFbnRyeS5wZGIuc2V0SWRzQmxvYihkYXRhKTtcbiAgICAgICAgY2FjaGVFbnRyeS5ieXRlU2l6ZSArPSBkYXRhLmJ5dGVMZW5ndGg7XG5cbiAgICAgICAgLy8gQXBwZW5kIGVudHJ5IHRvIGNhY2hlRW50cnkuZGJGaWxlcy4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGlkIGZpbGUgYmxvYiBpcyByZWxlYXNlZCBqdXN0IGxpa2VcbiAgICAgICAgLy8gYWxsIG90aGVyIGRiRmlsZXMgd2hlbiB0aGUgcHJvcERiIGlzIHVubG9hZGVkIGxhdGVyLiAoc2VlIHVubG9hZFByb3BlcnR5RGIpXG4gICAgICAgIHZhciBuZXdGaWxlID0ge1xuICAgICAgICAgICAgZmlsZW5hbWU6IGlkc0ZpbGVFbnRyeS5wYXRoLFxuICAgICAgICAgICAgc3RvcmFnZTogc3RvcmFnZSxcbiAgICAgICAgfTtcbiAgICAgICAgY2FjaGVFbnRyeS5kYkZpbGVzLnB1c2gobmV3RmlsZSk7XG5cbiAgICAgICAgLy8gU2lnbmFsIHRoYXQgd2UgYXJlIGRvbmUgLSBtYWluIHRocmVhZCBpcyBub3cgcmVhZHkgdG8gcXVlcnkgZXh0ZXJuYWxJZHMuXG4gICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKHtjYklkOiBsb2FkQ29udGV4dC5jYklkfSk7XG4gICAgfTtcblxuICAgIHJlcXVlc3RGaWxlKGlkc0ZpbGVFbnRyeS5wYXRoLCBsb2FkQ29udGV4dCwgb25Eb25lLCBzdG9yYWdlLCBpZHNGaWxlRW50cnkuaXNTaGFyZWQpO1xufVxuXG5mdW5jdGlvbiBkb0V4ZWN1dGVDb2RlKGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICAvL1RoaXMgaXMgZXhwZWN0ZWQgdG8gbG9hZCBhIGZ1bmN0aW9uIG5hbWVkIFwidXNlckZ1bmN0aW9uXCJcbiAgICBpZiAobG9hZENvbnRleHQudXNlckZ1bmN0aW9uKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbXBvcnRTY3JpcHRzKGxvYWRDb250ZXh0LnVzZXJGdW5jdGlvbik7XG4gICAgICAgIH0gY2F0Y2goZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7IGNiSWQ6IGxvYWRDb250ZXh0LmNiSWQsIGVycm9yOiB7IG1zZzogXCJFcnJvciB3aGlsZSBpbXBvcnRpbmcgJ3VzZXJGdW5jdGlvbicuXCIgfSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc2VsZi51c2VyRnVuY3Rpb24pIHtcbiAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2UoeyBjYklkOiBsb2FkQ29udGV4dC5jYklkLCBlcnJvcjogeyBtc2c6IFwiZnVuY3Rpb24gJ3VzZXJGdW5jdGlvbicgd2FzIG5vdCBmb3VuZC5cIiB9IH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGNhY2hlRW50cnkgPSBfdGhpcy5wZGJDYWNoZSAmJiBfdGhpcy5wZGJDYWNoZS5nZXQobG9hZENvbnRleHQuZGJQYXRoKTtcblxuICAgIGlmIChjYWNoZUVudHJ5ICYmIGNhY2hlRW50cnkucGRiKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBzZWxmLnVzZXJGdW5jdGlvbihjYWNoZUVudHJ5LnBkYiwgbG9hZENvbnRleHQudXNlckRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKHsgY2JJZDogbG9hZENvbnRleHQuY2JJZCwgZXJyb3I6IHsgbXNnOiBcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyAndXNlckZ1bmN0aW9uJy5cIiB9IH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2VsZi51c2VyRnVuY3Rpb24gPSB1bmRlZmluZWQ7IC8vIGNsZWFudXBcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7Y2JJZCA6IGxvYWRDb250ZXh0LmNiSWQsIHJlc3VsdDogcmVzdWx0fSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlZnJlc2hlcyB0aGUgY3VzdG9tIHByb3BlcnRpZXMgZGVmaW5pdGlvbnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGxvYWRDb250ZXh0IC0gdGhlIGNvbmZpZ3VyZWQgcmVxdWVzdCBmb3IgdGhlIGdldCBjdXN0b20gcHJvcGVydGllcyB2YWx1ZXMgZW5kcG9pbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9hZENvbnRleHQuYmFzZVVybCAtIHRoZSBiYXNlIHVybCBvZiB0aGUgZ2V0IGN1c3RvbSBwcm9wZXJ0aWVzIHZhbHVlcyBlbmRwb2ludC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2FkQ29udGV4dC5wcm9qZWN0SWQgLSB0aGUgcHJvamVjdCBJRCB0byBmZXRjaCBjdXN0b20gcHJvcGVydGllcyBkZWZpbml0aW9ucyBmb3IuXG4gKiBAcGFyYW0ge29iamVjdH0gbG9hZENvbnRleHQud29ya2VyIC0gdGhlIHdlYiB3b3JrZXIuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGxvYWRDb250ZXh0LmhlYWRlcnMgLSB0aGUgaGVhZGVycyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvUmVmcmVzaEN1c3RvbVByb3BlcnRpZXMobG9hZENvbnRleHQpIHtcbiAgICBjb25zdCBfdGhpcyA9IGxvYWRDb250ZXh0LndvcmtlcjtcbiAgICBjb25zdCBjdXN0b21Qcm9wc0NhY2hlID0gYWNxdWlyZUN1c3RvbVByb3BzQ2FjaGUoX3RoaXMpO1xuICAgIGxldCByZXN1bHQsIGVycm9yO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb2plY3RDYWNoZSA9IGF3YWl0IGN1c3RvbVByb3BzQ2FjaGUuYWNxdWlyZURlZmluaXRpb25zQ2FjaGUobG9hZENvbnRleHQpO1xuICAgICAgICByZXN1bHQgPSBwcm9qZWN0Q2FjaGUubGFzdEZldGNoZWQ7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgICBlcnJvciA9IHsgbXNnOiBlcnIubWVzc2FnZSwgZXJyb3I6IGVyciB9O1xuICAgIH1cbiAgICBfdGhpcy5wb3N0TWVzc2FnZSh7IGNiSWQgOiBsb2FkQ29udGV4dC5jYklkLCByZXN1bHQsIGVycm9yIH0pO1xufVxuXG4vKipcbiAqIFJlZnJlc2hlcyB0aGUgY3VzdG9tIHByb3BlcnRpZXMgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBsb2FkQ29udGV4dCAtIHRoZSBjb25maWd1cmVkIHJlcXVlc3QgZm9yIHRoZSBnZXQgY3VzdG9tIHByb3BlcnRpZXMgdmFsdWVzIGVuZHBvaW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGxvYWRDb250ZXh0LmJhc2VVcmwgLSB0aGUgYmFzZSB1cmwgb2YgdGhlIGdldCBjdXN0b20gcHJvcGVydGllcyB2YWx1ZXMgZW5kcG9pbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9hZENvbnRleHQucHJvamVjdElkIC0gdGhlIHByb2plY3QgSWQgZm9yIHRoZSBzZWVkIGZpbGUgVVJOXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9hZENvbnRleHQuc2VlZEZpbGVVcm4gLSB0aGUgc2VlZCBmaWxlIFVSTlxuICogQHBhcmFtIHtvYmplY3R9IGxvYWRDb250ZXh0LndvcmtlciAtIHRoZSB3ZWIgd29ya2VyLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBsb2FkQ29udGV4dC5oZWFkZXJzIC0gdGhlIGhlYWRlcnMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiBkb1JlZnJlc2hDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzKGxvYWRDb250ZXh0KSB7XG4gICAgY29uc3QgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG4gICAgY29uc3QgeyBkYlBhdGggfSA9IGxvYWRDb250ZXh0O1xuICAgIGNvbnN0IGN1c3RvbVByb3BzQ2FjaGUgPSBhY3F1aXJlQ3VzdG9tUHJvcHNDYWNoZShfdGhpcyk7XG4gICAgbGV0IHJlc3VsdCwgZXJyb3I7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJvamVjdENhY2hlID0gYXdhaXQgY3VzdG9tUHJvcHNDYWNoZS5hY3F1aXJlRGVmaW5pdGlvbnNDYWNoZShsb2FkQ29udGV4dCk7XG4gICAgICAgIGNvbnN0IHNlZWRGaWxlQ2FjaGUgPSBhd2FpdCBwcm9qZWN0Q2FjaGUuYWNxdWlyZVZhbHVlc0NhY2hlKGxvYWRDb250ZXh0KTtcbiAgICAgICAgdmFyIHBkYiA9IF90aGlzLnBkYkNhY2hlPy5nZXQoZGJQYXRoKT8ucGRiO1xuICAgICAgICBpZiAocGRiICYmICdzZXRDdXN0b21BdHRycycgaW4gcGRiKSB7XG4gICAgICAgICAgICBwZGIuc2V0Q3VzdG9tQXR0cnMoc2VlZEZpbGVDYWNoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gc2VlZEZpbGVDYWNoZS5sYXN0RmV0Y2hlZDtcbiAgICB9XG4gICAgY2F0Y2goZXJyKSB7XG4gICAgICAgIGVycm9yID0geyBtc2c6IGVyci5tZXNzYWdlLCBlcnJvcjogZXJyIH07XG4gICAgfVxuICAgIF90aGlzLnBvc3RNZXNzYWdlKHsgY2JJZCA6IGxvYWRDb250ZXh0LmNiSWQsIHJlc3VsdCwgZXJyb3IgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcih3b3JrZXJNYWluKSB7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIkJVSUxEX0VYVEVSTkFMX0lEX01BUFBJTkdcIiwgeyBkb09wZXJhdGlvbjogZG9CdWlsZEV4dGVybmFsSWRNYXBwaW5nIH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJCVUlMRF9MQVlFUl9UT19OT0RFX0lEX01BUFBJTkdcIiwgeyBkb09wZXJhdGlvbjogZG9CdWlsZExheWVyVG9Ob2RlSWRNYXBwaW5nIH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJHRVRfUFJPUEVSVElFU1wiLCB7IGRvT3BlcmF0aW9uOiBkb1Byb3BlcnR5R2V0IH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJHRVRfUFJPUEVSVFlfU0VUXCIsIHsgZG9PcGVyYXRpb246IGRvUHJvcGVydHlTZXRHZXQgfSk7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIlNFQVJDSF9QUk9QRVJUSUVTXCIsIHsgZG9PcGVyYXRpb246IGRvUHJvcGVydHlTZWFyY2ggfSk7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIkRJRkZfUFJPUEVSVElFU1wiLCB7IGRvT3BlcmF0aW9uOiBkb1Byb3BlcnR5RGlmZiB9KTtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiRklORF9QUk9QRVJUWVwiLCB7IGRvT3BlcmF0aW9uOiBkb1Byb3BlcnR5RmluZCB9KTtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiRklORF9MQVlFUlNcIiwgeyBkb09wZXJhdGlvbjogZG9MYXllcnNGaW5kIH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJMT0FEX1BST1BFUlRZREJcIiwgeyBkb09wZXJhdGlvbjogZG9PYmplY3RUcmVlUGFyc2UgfSk7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIkNSRUFURV9UUkVFXCIsIHsgZG9PcGVyYXRpb246IGRvT2JqZWN0VHJlZUNyZWF0ZSB9KTtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiVU5MT0FEX1BST1BFUlRZREJcIiwgeyBkb09wZXJhdGlvbjogZG9VbmxvYWRQcm9wZXJ0eURiIH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJVU0VSX0ZVTkNUSU9OXCIsIHsgZG9PcGVyYXRpb246IGRvRXhlY3V0ZUNvZGUgfSk7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIkxPQURfRVhURVJOQUxfSURTXCIsIHsgZG9PcGVyYXRpb246IGRvTG9hZEV4dGVybmFsSWRzIH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJSRUZSRVNIX0NVU1RPTV9QUk9QRVJUSUVTXCIsIHsgZG9PcGVyYXRpb246IGRvUmVmcmVzaEN1c3RvbVByb3BlcnRpZXMgfSk7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIlJFRlJFU0hfQ1VTVE9NX1BST1BFUlRJRVNfVkFMVUVTXCIsIHsgZG9PcGVyYXRpb246IGRvUmVmcmVzaEN1c3RvbVByb3BlcnRpZXNWYWx1ZXMgfSk7XG59XG4iXSwibmFtZXMiOlsiVmlld2luZ1NlcnZpY2UiLCJQcm9wZXJ0eURhdGFiYXNlIiwiSW5zdGFuY2VUcmVlU3RvcmFnZSIsIkluc3RhbmNlVHJlZUFjY2VzcyIsIlByb3BlcnR5RGF0YWJhc2VDdXN0b21Qcm9wZXJ0eVdyYXBwZXIiLCJhY3F1aXJlQ3VzdG9tUHJvcHNDYWNoZSIsIlBkYkNhY2hlRW50cnkiLCJkYlBhdGgiLCJpc1NoYXJlZCIsInBkYiIsIndhaXRpbmdDYWxsYmFja3MiLCJlcnJvciIsImRiRmlsZXMiLCJ0aW1lc3RhbXAiLCJEYXRlIiwibm93IiwiRmlsZUNhY2hlRW50cnkiLCJkYXRhIiwicmVmQ291bnQiLCJQZGJDYWNoZSIsImNvbnN0cnVjdG9yIiwicGRiQ2FjaGUiLCJmaWxlQ2FjaGUiLCJnZXQiLCJjYWNoZUVudHJ5Iiwic2V0IiwiZ2V0RmlsZSIsInBhdGgiLCJzZXRGaWxlIiwiZGVsZXRlIiwiZmlsZU5hbWUiLCJmaWxlIiwidW5yZWZGaWxlQ2FjaGVFbnRyeSIsInN0b3JhZ2UiLCJrZXkiLCJmaWxlQ2FjaGVFbnRyeSIsImxvYWRQcm9wZXJ0eVBhY2tzIiwibG9hZENvbnRleHQiLCJkYklkIiwib25Qcm9wZXJ0eVBhY2tMb2FkQ29tcGxldGUiLCJfdGhpcyIsIndvcmtlciIsInJlcGVhdGVkQ2FsbCIsInNoYXJlZERiUGF0aCIsImRiaWRPbGRUb05ldyIsInB1c2giLCJkYmZpbGVzIiwicHJvcGVydHlkYiIsInByb3BkYkZhaWxlZCIsImxvYWRlZERiRmlsZXMiLCJmaWxlc1RvUmVxdWVzdCIsImF2cyIsImxlbmd0aCIsInRhZyIsInNraXBFeHRlcm5hbElkcyIsImZpbGVuYW1lIiwiaWRzIiwiYXR0cnMiLCJvZmZzZXRzIiwidmFsdWVzIiwiZmlsZXNSZW1haW5pbmciLCJmaWxlc0ZhaWxlZCIsIm9uUmVxdWVzdENvbXBsZXRpb24iLCJwb3N0TWVzc2FnZSIsImNiSWQiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJzaGlmdCIsImZvckVhY2giLCJmIiwidXNlQ3VzdG9tUHJvcGVydGllcyIsImxvYWRlZCIsImJ5dGVTaXplIiwicCIsImZkYXRhIiwiYnl0ZUxlbmd0aCIsImRiaWQiLCJiIiwiSW50MzJBcnJheSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJlcnIiLCJtZXNzYWdlIiwicmVxdWVzdEZpbGUiLCJvbkZhaWx1cmUiLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwib25GYWlsdXJlQ2FsbGJhY2siLCJ1cmwiLCJpbmRleE9mIiwiZnVsbFBhdGgiLCJnZW5lcmF0ZVVybCIsImVuZHBvaW50Iiwib25TdWNjZXNzIiwicmVzcG9uc2UiLCJnZXRJdGVtIiwiY3JlYXRlVHJlZSIsIm5vZGUiLCJwYXJlbnQiLCJkYlRvRnJhZyIsIm5vZGVTdG9yYWdlIiwiY2hpbGRyZW4iLCJjaGlsZHJlbklkcyIsImoiLCJjaGlsZEhhc0NoaWxkcmVuIiwiZnJhZ0lkcyIsImZyYWdzIiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5IiwiY2hpbGRDb3VudCIsInNldE5vZGUiLCJuYW1lIiwidG9TdHJpbmciLCJkb09iamVjdFRyZWVDcmVhdGUiLCJnbHRmVHJlZSIsImRiVG9GcmFnSWQiLCJmbGF0dGVuIiwicmVzdWx0Iiwicm9vdElkIiwiaW5zdGFuY2VUcmVlU3RvcmFnZSIsImRvT2JqZWN0VHJlZVBhcnNlIiwicHJvcGVydHlEYiIsImVycm9yTWVzc2FnZSIsImluc3RhbmNlVHJlZSIsIm1heFRyZWVEZXB0aCIsInNraXBJbnN0YW5jZVRyZWVSZXN1bHQiLCJyb290c0RvbmUiLCJpZHJvb3RzIiwiZmluZFJvb3ROb2RlcyIsIm1heERlcHRoIiwidHJhbnNmZXJMaXN0Iiwibm9kZUFjY2VzcyIsImZyYWdUb0RiSWQiLCJuZWVkc0RiSWRSZW1hcCIsImlzMmQiLCJjb25zb2xlIiwid2FybiIsIm9sZDJuZXciLCJmcjJpZCIsImkiLCJkIiwibm9kZUhhc0NoaWxkIiwiYnVpbGRPYmplY3RUcmVlIiwibm9kZXMiLCJzdHJpbmdzIiwiYnVmIiwiaWR4IiwiZnJhZ0JveGVzIiwiY29tcHV0ZUJveGVzIiwibm9kZUJveGVzIiwiaW5zdGFuY2VCb3hlcyIsIm9iamVjdENvdW50IiwiZ2V0T2JqZWN0Q291bnQiLCJkb1Byb3BlcnR5U2VhcmNoIiwic2VhcmNoVGV4dCIsImJydXRlRm9yY2VTZWFyY2giLCJhdHRyaWJ1dGVOYW1lcyIsInNlYXJjaE9wdGlvbnMiLCJkb1Byb3BlcnR5RGlmZiIsImNhY2hlRW50cnkxIiwiY2FjaGVFbnRyeTIiLCJkYlBhdGgyIiwicGRiMSIsInBkYjIiLCJvblByb2dyZXNzIiwiZmluZERpZmZlcmVuY2VzIiwiZGlmZk9wdGlvbnMiLCJkb1Byb3BlcnR5RmluZCIsImJydXRlRm9yY2VGaW5kIiwicHJvcGVydHlOYW1lIiwiZG9MYXllcnNGaW5kIiwiZmluZExheWVycyIsInNlYXJjaFRyZWUiLCJPYmplY3QiLCJrZXlzIiwiZ2V0UHJvcGVydHlSZXN1bHRzIiwiZGJJZHMiLCJwcm9wRmlsdGVyIiwiaWdub3JlSGlkZGVuIiwiY2F0ZWdvcnlGaWx0ZXIiLCJyZXN1bHRzIiwiZ2V0T2JqZWN0UHJvcGVydGllcyIsImxhc3QiLCJkb1Byb3BlcnR5R2V0IiwibXNnIiwiZG9Qcm9wZXJ0eVNldEdldCIsIm1hcCIsIm5hbWVzIiwicHJvcHMiLCJwcm9wZXJ0aWVzIiwiZmlsZVR5cGUiLCJlbGVtZW50SWQiLCJlbGVtZW50SWRQcm9wZXJ0eSIsImZpbmQiLCJlYWNoIiwiYXR0cmlidXRlTmFtZSIsImRpc3BsYXlWYWx1ZSIsImV4dGVybmFsSWQiLCJleHRlcm5hbElkU3BsaXQiLCJzcGxpdCIsInBhcnNlSW50IiwiaW5jbHVkZXMiLCJlIiwicHJvcCIsImRpc3BsYXlOYW1lIiwiZGlzcGxheUNhdGVnb3J5IiwiaWRlbnRpZmllciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInBhcmVudE5hbWUiLCJ0eXBlIiwidW5pdHMiLCJoaWRkZW4iLCJwcmVjaXNpb24iLCJkb0J1aWxkRXh0ZXJuYWxJZE1hcHBpbmciLCJtYXBwaW5nIiwiZ2V0RXh0ZXJuYWxJZE1hcHBpbmciLCJleHRJZEZpbHRlciIsImRvQnVpbGRMYXllclRvTm9kZUlkTWFwcGluZyIsImdldExheWVyVG9Ob2RlSWRNYXBwaW5nIiwiZG9VbmxvYWRQcm9wZXJ0eURiIiwiY2xlYXJDYWNoZXMiLCJkb0xvYWRFeHRlcm5hbElkcyIsImlkc0ZpbGVFbnRyeSIsImlkc0ZpbGUiLCJleHRlcm5hbElkc0xvYWRlZCIsIm9uRG9uZSIsInByb3BEYldhc1VubG9hZGVkIiwic2V0SWRzQmxvYiIsIm5ld0ZpbGUiLCJkb0V4ZWN1dGVDb2RlIiwidXNlckZ1bmN0aW9uIiwiaW1wb3J0U2NyaXB0cyIsInNlbGYiLCJ1c2VyRGF0YSIsImRvUmVmcmVzaEN1c3RvbVByb3BlcnRpZXMiLCJjdXN0b21Qcm9wc0NhY2hlIiwicHJvamVjdENhY2hlIiwiYWNxdWlyZURlZmluaXRpb25zQ2FjaGUiLCJsYXN0RmV0Y2hlZCIsImRvUmVmcmVzaEN1c3RvbVByb3BlcnRpZXNWYWx1ZXMiLCJfdGhpcyRwZGJDYWNoZSIsInNlZWRGaWxlQ2FjaGUiLCJhY3F1aXJlVmFsdWVzQ2FjaGUiLCJzZXRDdXN0b21BdHRycyIsInJlZ2lzdGVyIiwid29ya2VyTWFpbiIsImRvT3BlcmF0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/PropWorker.js\n"); /***/ }), /***/ "./src/file-loaders/workers/SvfWorker.js": /*!***********************************************!*\ !*** ./src/file-loaders/workers/SvfWorker.js ***! \***********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _lmvtk_svf_Package__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lmvtk/svf/Package */ \"./src/file-loaders/lmvtk/svf/Package.js\");\n/* harmony import */ var _lmvtk_common_InputStream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lmvtk/common/InputStream */ \"./src/file-loaders/lmvtk/common/InputStream.js\");\n/* harmony import */ var _net_Xhr__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../net/Xhr */ \"./src/file-loaders/net/Xhr.js\");\n/* harmony import */ var _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../net/ErrorCodes */ \"./src/file-loaders/net/ErrorCodes.js\");\n\n\n\n\n\nfunction guardFunction(loadContext, func)\n{\n try {\n func();\n }\n catch (exc) {\n loadContext.worker.raiseError(\n _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__.ErrorCodes.BAD_DATA, \"Unhandled exception while loading SVF\",\n { \"url\": loadContext.url, \"exception\": exc.toString(), \"stack\": exc.stack });\n loadContext.worker.postMessage(null);\n }\n}\n\nfunction doLoadSvfContinued(loadContext)\n{\n var _this = loadContext.worker;\n\n guardFunction(loadContext, function () {\n var svf = loadContext.svf;\n function loadDoneCallback(type, meshMessage) {\n if (type == \"svf\") {\n\n var msg, xfer;\n var frags = svf.fragments;\n var transferable = [\n frags.transforms.buffer,\n frags.packIds.buffer,\n frags.entityIndexes.buffer,\n frags.fragId2dbId.buffer,\n frags.visibilityFlags.buffer];\n\n\n if (svf.bvh) {\n // BVH is posted together with svf,\n // so can add more buffer to transfer.\n xfer = {\n nodes: svf.bvh.nodes.getRawData(),\n primitives: svf.bvh.primitives,\n useLeanNodes: svf.bvh.nodes.bytes_per_node == 32\n };\n transferable.push(xfer.nodes);\n transferable.push(xfer.primitives.buffer);\n\n // Then can safely transfer following buffers from fragments.\n transferable.push(frags.boxes.buffer);\n transferable.push(frags.polygonCounts.buffer);\n transferable.push(frags.materials.buffer);\n\n msg = { \"svf\": svf, \"bvh\": xfer, progress: 1.0 };\n } else\n {\n msg = { \"svf\": svf, progress: 0.8 };\n }\n\n _this.postMessage(msg, transferable);\n } else if (type == \"bvh\") {\n xfer = {\n nodes: svf.bvh.nodes.getRawData(),\n primitives: svf.bvh.primitives,\n useLeanNodes: svf.bvh.nodes.bytes_per_node == 32\n };\n\n _this.postMessage({ \"bvh\": xfer, basePath: svf.basePath, progress: 1.0 },\n [xfer.nodes, xfer.primitives.buffer]);\n\n } else if (type == \"mesh\") {\n\n var transferList = [];\n if (meshMessage.mesh)\n transferList.push(meshMessage.mesh.vb.buffer);\n\n _this.postMessage(meshMessage, transferList);\n\n } else if (type == \"done\") {\n _this.postMessage({ progress: 1.0 });\n } else\n {\n _this.raiseError(\n _net_ErrorCodes__WEBPACK_IMPORTED_MODULE_3__.ErrorCodes.BAD_DATA, \"Failure while loading SVF\",\n { \"url\": loadContext.url });\n _this.postMessage(null);\n }\n }\n\n loadContext.loadDoneCB = loadDoneCallback;\n\n svf.loadRemainingSvf(loadContext);\n });\n}\n\nfunction doLoadSvf(loadContext) {\n\n var _this = loadContext.worker;\n\n _this.postMessage({ progress: 0.01 }); //Tell the main thread we are alive\n\n var type = \"svf\";\n\n function onSuccess(result) {\n\n _this.postMessage({ progress: 0.5 }); //rough progress reporting -- can do better\n\n guardFunction(loadContext, function () {\n\n // result is arraybuffer\n var svf = new _lmvtk_svf_Package__WEBPACK_IMPORTED_MODULE_0__.Package(new Uint8Array(result));\n loadContext.svf = svf;\n svf.loadManifest(loadContext);\n\n\n if (loadContext.interceptManifest) {\n _this.postMessage({ \"manifest\": svf.manifest });\n } else {\n loadContext.manifest = svf.manifest;\n doLoadSvfContinued(loadContext);\n }\n });\n }\n\n var options = {\n responseType: \"arraybuffer\"\n };\n\n // Begin download the target SVF file with a GET request.\n _net_Xhr__WEBPACK_IMPORTED_MODULE_2__.ViewingService.getItem(loadContext, loadContext.url, onSuccess, loadContext.onFailureCallback, options);\n\n if (type === \"svf\") {\n // Prefetch the first geometry pack (we assume there is one) to mask \n // some latency. Note that errors are intentionally ignored here.\n _net_Xhr__WEBPACK_IMPORTED_MODULE_2__.ViewingService.getItem(loadContext, loadContext.basePath + \"0.pf\", function () {}, function () {}, options);\n }\n}\n\n\nfunction doFetchTopology(loadContext) {\n\n var _this = loadContext.worker;\n _net_Xhr__WEBPACK_IMPORTED_MODULE_2__.ViewingService.getItem(loadContext, loadContext.path, onSuccess, onFailure);\n\n // on success\n function onSuccess(data) {\n\n _this.postMessage({ \"status-topology\": {} }); // download is complete\n\n // This lines below may take a while...\n var topology = null;\n try {\n var jdr = new _lmvtk_common_InputStream__WEBPACK_IMPORTED_MODULE_1__.InputStream(data);\n var byteLength = data.byteLength;\n if (0 < byteLength) {\n topology = JSON.parse(jdr.getString(byteLength));\n }\n if (topology) {\n _this.postMessage({ \"fetch-topology\": { error: null, topology: topology } }); // parsing is complete\n } else {\n onFailure('topology-no-content ');\n }\n } catch (eee) {\n onFailure(eee);\n }\n }\n\n // on-failure\n function onFailure(err) {\n _this.postMessage({ \"fetch-topology\": { error: err, topology: null } }); // something went wrong\n }\n}\n\nfunction register(workerMain) {\n workerMain.register(\"LOAD_SVF\", { doOperation: doLoadSvf });\n workerMain.register(\"LOAD_SVF_CONTD\", { doOperation: doLoadSvfContinued });\n workerMain.register(\"FETCH_TOPOLOGY\", { doOperation: doFetchTopology });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvU3ZmV29ya2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQStDO0FBQ1c7QUFDZDtBQUNHOztBQUUvQyxTQUFTSSxhQUFhQSxDQUFDQyxXQUFXLEVBQUVDLElBQUk7QUFDeEM7RUFDSSxJQUFJO0lBQ0FBLElBQUksQ0FBQyxDQUFDO0VBQ1Y7RUFDQSxPQUFPQyxHQUFHLEVBQUU7SUFDUkYsV0FBVyxDQUFDRyxNQUFNLENBQUNDLFVBQVU7TUFDekJOLHVEQUFVLENBQUNPLFFBQVEsRUFBRSx1Q0FBdUM7TUFDNUQsRUFBRSxLQUFLLEVBQUVMLFdBQVcsQ0FBQ00sR0FBRyxFQUFFLFdBQVcsRUFBRUosR0FBRyxDQUFDSyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRUwsR0FBRyxDQUFDTSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hGUixXQUFXLENBQUNHLE1BQU0sQ0FBQ00sV0FBVyxDQUFDLElBQUksQ0FBQztFQUN4QztBQUNKOztBQUVBLFNBQVNDLGtCQUFrQkEsQ0FBQ1YsV0FBVztBQUN2QztFQUNJLElBQUlXLEtBQUssR0FBR1gsV0FBVyxDQUFDRyxNQUFNOztFQUU5QkosYUFBYSxDQUFDQyxXQUFXLEVBQUUsWUFBVTtJQUNqQyxJQUFJWSxHQUFHLEdBQUdaLFdBQVcsQ0FBQ1ksR0FBRztJQUN6QixTQUFTQyxnQkFBZ0JBLENBQUNDLElBQUksRUFBRUMsV0FBVyxFQUFFO01BQ3pDLElBQUlELElBQUksSUFBSSxLQUFLLEVBQUU7O1FBRWYsSUFBSUUsR0FBRyxFQUFFQyxJQUFJO1FBQ2IsSUFBSUMsS0FBSyxHQUFHTixHQUFHLENBQUNPLFNBQVM7UUFDekIsSUFBSUMsWUFBWSxHQUFHO1FBQ2ZGLEtBQUssQ0FBQ0csVUFBVSxDQUFDQyxNQUFNO1FBQ3ZCSixLQUFLLENBQUNLLE9BQU8sQ0FBQ0QsTUFBTTtRQUNwQkosS0FBSyxDQUFDTSxhQUFhLENBQUNGLE1BQU07UUFDMUJKLEtBQUssQ0FBQ08sV0FB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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNsRixDQUFDLE1BQU07UUFDSEYsU0FBUyxDQUFDLHFCQUFxQixDQUFDO01BQ3BDO0lBQ0osQ0FBQyxDQUFDLE9BQU9TLEdBQUcsRUFBRTtNQUNWVCxTQUFTLENBQUNTLEdBQUcsQ0FBQztJQUNsQjtFQUNKOztFQUVBO0VBQ0EsU0FBU1QsU0FBU0EsQ0FBQ1UsR0FBRyxFQUFFO0lBQ3BCeEQsS0FBSyxDQUFDRixXQUFXLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFd0QsS0FBSyxFQUFFRSxHQUFHLEVBQUVSLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUU7RUFDOUU7QUFDSjs7QUFFTyxTQUFTUyxRQUFRQSxDQUFDQyxVQUFVLEVBQUU7RUFDakNBLFVBQVUsQ0FBQ0QsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFRSxXQUFXLEVBQUUxQixTQUFTLENBQUMsQ0FBQyxDQUFDO0VBQzNEeUIsVUFBVSxDQUFDRCxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRUUsV0FBVyxFQUFFNUQsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0VBQzFFMkQsVUFBVSxDQUFDRCxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRUUsV0FBVyxFQUFFZixlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQzNFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy93b3JrZXJzL1N2Zldvcmtlci5qcz9mYzg1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhY2thZ2UgfSBmcm9tICcuLi9sbXZ0ay9zdmYvUGFja2FnZSc7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbSB9IGZyb20gJy4uL2xtdnRrL2NvbW1vbi9JbnB1dFN0cmVhbSc7XG5pbXBvcnQgeyBWaWV3aW5nU2VydmljZSB9IGZyb20gJy4uL25ldC9YaHInO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL25ldC9FcnJvckNvZGVzJztcblxuZnVuY3Rpb24gZ3VhcmRGdW5jdGlvbihsb2FkQ29udGV4dCwgZnVuYylcbntcbiAgICB0cnkge1xuICAgICAgICBmdW5jKCk7XG4gICAgfVxuICAgIGNhdGNoIChleGMpIHtcbiAgICAgICAgbG9hZENvbnRleHQud29ya2VyLnJhaXNlRXJyb3IoXG4gICAgICAgICAgICBFcnJvckNvZGVzLkJBRF9EQVRBLCBcIlVuaGFuZGxlZCBleGNlcHRpb24gd2hpbGUgbG9hZGluZyBTVkZcIixcbiAgICAgICAgICAgIHsgXCJ1cmxcIjogbG9hZENvbnRleHQudXJsLCBcImV4Y2VwdGlvblwiOiBleGMudG9TdHJpbmcoKSwgXCJzdGFja1wiOiBleGMuc3RhY2sgfSk7XG4gICAgICAgIGxvYWRDb250ZXh0Lndvcmtlci5wb3N0TWVzc2FnZShudWxsKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRvTG9hZFN2ZkNvbnRpbnVlZChsb2FkQ29udGV4dClcbntcbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICBndWFyZEZ1bmN0aW9uKGxvYWRDb250ZXh0LCBmdW5jdGlvbigpe1xuICAgICAgICB2YXIgc3ZmID0gbG9hZENvbnRleHQuc3ZmO1xuICAgICAgICBmdW5jdGlvbiBsb2FkRG9uZUNhbGxiYWNrKHR5cGUsIG1lc2hNZXNzYWdlKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBcInN2ZlwiKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgbXNnLCB4ZmVyO1xuICAgICAgICAgICAgICAgIHZhciBmcmFncyA9IHN2Zi5mcmFnbWVudHM7XG4gICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVyYWJsZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgZnJhZ3MudHJhbnNmb3Jtcy5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgIGZyYWdzLnBhY2tJZHMuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICBmcmFncy5lbnRpdHlJbmRleGVzLmJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgZnJhZ3MuZnJhZ0lkMmRiSWQuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICBmcmFncy52aXNpYmlsaXR5RmxhZ3MuYnVmZmVyXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGlmIChzdmYuYnZoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJWSCBpcyBwb3N0ZWQgdG9nZXRoZXIgd2l0aCBzdmYsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIGNhbiBhZGQgbW9yZSBidWZmZXIgdG8gdHJhbnNmZXIuXG4gICAgICAgICAgICAgICAgICAgIHhmZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2Rlczogc3ZmLmJ2aC5ub2Rlcy5nZXRSYXdEYXRhKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVzOiBzdmYuYnZoLnByaW1pdGl2ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VMZWFuTm9kZXM6IChzdmYuYnZoLm5vZGVzLmJ5dGVzX3Blcl9ub2RlID09IDMyKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGUucHVzaCh4ZmVyLm5vZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJhYmxlLnB1c2goeGZlci5wcmltaXRpdmVzLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiBjYW4gc2FmZWx5IHRyYW5zZmVyIGZvbGxvd2luZyBidWZmZXJzIGZyb20gZnJhZ21lbnRzLlxuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGUucHVzaChmcmFncy5ib3hlcy5idWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGUucHVzaChmcmFncy5wb2x5Z29uQ291bnRzLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyYWJsZS5wdXNoKGZyYWdzLm1hdGVyaWFscy5idWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgIG1zZyA9IHsgXCJzdmZcIiA6IHN2ZiwgXCJidmhcIiA6IHhmZXIsIHByb2dyZXNzOiAxLjAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZyA9IHsgXCJzdmZcIiA6IHN2ZiwgcHJvZ3Jlc3M6IDAuOCB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKG1zZywgdHJhbnNmZXJhYmxlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImJ2aFwiKSB7XG4gICAgICAgICAgICAgICAgeGZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXM6IHN2Zi5idmgubm9kZXMuZ2V0UmF3RGF0YSgpLFxuICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVzOiBzdmYuYnZoLnByaW1pdGl2ZXMsXG4gICAgICAgICAgICAgICAgICAgIHVzZUxlYW5Ob2RlczogKHN2Zi5idmgubm9kZXMuYnl0ZXNfcGVyX25vZGUgPT0gMzIpXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKCB7IFwiYnZoXCIgOiB4ZmVyLCBiYXNlUGF0aDogc3ZmLmJhc2VQYXRoLCBwcm9ncmVzczogMS4wIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeGZlci5ub2RlcywgeGZlci5wcmltaXRpdmVzLmJ1ZmZlcl0gKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwibWVzaFwiKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJMaXN0ID0gW107XG4gICAgICAgICAgICAgICAgaWYgKG1lc2hNZXNzYWdlLm1lc2gpXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKG1lc2hNZXNzYWdlLm1lc2gudmIuYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKG1lc2hNZXNzYWdlLCB0cmFuc2Zlckxpc3QpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJkb25lXCIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSggeyBwcm9ncmVzczogMS4wIH0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIF90aGlzLnJhaXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZXMuQkFEX0RBVEEsIFwiRmFpbHVyZSB3aGlsZSBsb2FkaW5nIFNWRlwiLFxuICAgICAgICAgICAgICAgICAgICB7IFwidXJsXCI6IGxvYWRDb250ZXh0LnVybCB9KTtcbiAgICAgICAgICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvYWRDb250ZXh0LmxvYWREb25lQ0IgPSBsb2FkRG9uZUNhbGxiYWNrO1xuXG4gICAgICAgIHN2Zi5sb2FkUmVtYWluaW5nU3ZmKGxvYWRDb250ZXh0KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZG9Mb2FkU3ZmKGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG5cbiAgICBfdGhpcy5wb3N0TWVzc2FnZSh7cHJvZ3Jlc3M6MC4wMX0pOyAvL1RlbGwgdGhlIG1haW4gdGhyZWFkIHdlIGFyZSBhbGl2ZVxuXG4gICAgdmFyIHR5cGUgPSBcInN2ZlwiO1xuXG4gICAgZnVuY3Rpb24gb25TdWNjZXNzKHJlc3VsdCkge1xuXG4gICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKHtwcm9ncmVzczowLjV9KTsgLy9yb3VnaCBwcm9ncmVzcyByZXBvcnRpbmcgLS0gY2FuIGRvIGJldHRlclxuXG4gICAgICAgIGd1YXJkRnVuY3Rpb24obG9hZENvbnRleHQsIGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAvLyByZXN1bHQgaXMgYXJyYXlidWZmZXJcbiAgICAgICAgICAgIHZhciBzdmYgPSBuZXcgUGFja2FnZShuZXcgVWludDhBcnJheShyZXN1bHQpKTtcbiAgICAgICAgICAgIGxvYWRDb250ZXh0LnN2ZiA9IHN2ZjtcbiAgICAgICAgICAgIHN2Zi5sb2FkTWFuaWZlc3QobG9hZENvbnRleHQpO1xuXG5cbiAgICAgICAgICAgIGlmKGxvYWRDb250ZXh0LmludGVyY2VwdE1hbmlmZXN0KSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucG9zdE1lc3NhZ2Uoe1wibWFuaWZlc3RcIiA6IHN2Zi5tYW5pZmVzdH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2FkQ29udGV4dC5tYW5pZmVzdCA9IHN2Zi5tYW5pZmVzdDtcbiAgICAgICAgICAgICAgICBkb0xvYWRTdmZDb250aW51ZWQobG9hZENvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCJcbiAgICB9O1xuXG4gICAgLy8gQmVnaW4gZG93bmxvYWQgdGhlIHRhcmdldCBTVkYgZmlsZSB3aXRoIGEgR0VUIHJlcXVlc3QuXG4gICAgVmlld2luZ1NlcnZpY2UuZ2V0SXRlbShsb2FkQ29udGV4dCwgbG9hZENvbnRleHQudXJsLCBvblN1Y2Nlc3MsIGxvYWRDb250ZXh0Lm9uRmFpbHVyZUNhbGxiYWNrLCBvcHRpb25zKTtcblxuICAgIGlmICggdHlwZSA9PT0gXCJzdmZcIiApIHtcbiAgICAgICAgLy8gUHJlZmV0Y2ggdGhlIGZpcnN0IGdlb21ldHJ5IHBhY2sgKHdlIGFzc3VtZSB0aGVyZSBpcyBvbmUpIHRvIG1hc2sgXG4gICAgICAgIC8vIHNvbWUgbGF0ZW5jeS4gTm90ZSB0aGF0IGVycm9ycyBhcmUgaW50ZW50aW9uYWxseSBpZ25vcmVkIGhlcmUuXG4gICAgICAgIFZpZXdpbmdTZXJ2aWNlLmdldEl0ZW0obG9hZENvbnRleHQsIGxvYWRDb250ZXh0LmJhc2VQYXRoICsgXCIwLnBmXCIsIGZ1bmN0aW9uKCl7fSwgZnVuY3Rpb24oKXt9LCBvcHRpb25zKTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gZG9GZXRjaFRvcG9sb2d5KGxvYWRDb250ZXh0KSB7XG5cbiAgICB2YXIgX3RoaXMgPSBsb2FkQ29udGV4dC53b3JrZXI7XG4gICAgVmlld2luZ1NlcnZpY2UuZ2V0SXRlbShsb2FkQ29udGV4dCwgbG9hZENvbnRleHQucGF0aCwgb25TdWNjZXNzLCBvbkZhaWx1cmUpO1xuXG4gICAgLy8gb24gc3VjY2Vzc1xuICAgIGZ1bmN0aW9uIG9uU3VjY2VzcyhkYXRhKXtcblxuICAgICAgICBfdGhpcy5wb3N0TWVzc2FnZSh7IFwic3RhdHVzLXRvcG9sb2d5XCI6IHsgfSB9KTsgLy8gZG93bmxvYWQgaXMgY29tcGxldGVcblxuICAgICAgICAvLyBUaGlzIGxpbmVzIGJlbG93IG1heSB0YWtlIGEgd2hpbGUuLi5cbiAgICAgICAgdmFyIHRvcG9sb2d5ID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBqZHIgPSBuZXcgSW5wdXRTdHJlYW0oZGF0YSk7XG4gICAgICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIGlmICgwIDwgYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRvcG9sb2d5ID0gSlNPTi5wYXJzZShqZHIuZ2V0U3RyaW5nKGJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b3BvbG9neSkge1xuICAgICAgICAgICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKHsgXCJmZXRjaC10b3BvbG9neVwiOiB7IGVycm9yOiBudWxsLCB0b3BvbG9neTogdG9wb2xvZ3kgfSB9KTsgLy8gcGFyc2luZyBpcyBjb21wbGV0ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvbkZhaWx1cmUoJ3RvcG9sb2d5LW5vLWNvbnRlbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZWVlKSB7XG4gICAgICAgICAgICBvbkZhaWx1cmUoZWVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9uLWZhaWx1cmVcbiAgICBmdW5jdGlvbiBvbkZhaWx1cmUoZXJyKSB7XG4gICAgICAgIF90aGlzLnBvc3RNZXNzYWdlKHsgXCJmZXRjaC10b3BvbG9neVwiOiB7IGVycm9yOiBlcnIsIHRvcG9sb2d5OiBudWxsIH0gfSk7ICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHdvcmtlck1haW4pIHtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKFwiTE9BRF9TVkZcIiwgeyBkb09wZXJhdGlvbjogZG9Mb2FkU3ZmIH0pO1xuICAgIHdvcmtlck1haW4ucmVnaXN0ZXIoXCJMT0FEX1NWRl9DT05URFwiLCB7IGRvT3BlcmF0aW9uOiBkb0xvYWRTdmZDb250aW51ZWQgfSk7XG4gICAgd29ya2VyTWFpbi5yZWdpc3RlcihcIkZFVENIX1RPUE9MT0dZXCIsIHsgZG9PcGVyYXRpb246IGRvRmV0Y2hUb3BvbG9neSB9KTtcbn1cbiJdLCJuYW1lcyI6WyJQYWNrYWdlIiwiSW5wdXRTdHJlYW0iLCJWaWV3aW5nU2VydmljZSIsIkVycm9yQ29kZXMiLCJndWFyZEZ1bmN0aW9uIiwibG9hZENvbnRleHQiLCJmdW5jIiwiZXhjIiwid29ya2VyIiwicmFpc2VFcnJvciIsIkJBRF9EQVRBIiwidXJsIiwidG9TdHJpbmciLCJzdGFjayIsInBvc3RNZXNzYWdlIiwiZG9Mb2FkU3ZmQ29udGludWVkIiwiX3RoaXMiLCJzdmYiLCJsb2FkRG9uZUNhbGxiYWNrIiwidHlwZSIsIm1lc2hNZXNzYWdlIiwibXNnIiwieGZlciIsImZyYWdzIiwiZnJhZ21lbnRzIiwidHJhbnNmZXJhYmxlIiwidHJhbnNmb3JtcyIsImJ1ZmZlciIsInBhY2tJZHMiLCJlbnRpdHlJbmRleGVzIiwiZnJhZ0lkMmRiSWQiLCJ2aXNpYmlsaXR5RmxhZ3MiLCJidmgiLCJub2RlcyIsImdldFJhd0RhdGEiLCJwcmltaXRpdmVzIiwidXNlTGVhbk5vZGVzIiwiYnl0ZXNfcGVyX25vZGUiLCJwdXNoIiwiYm94ZXMiLCJwb2x5Z29uQ291bnRzIiwibWF0ZXJpYWxzIiwicHJvZ3Jlc3MiLCJiYXNlUGF0aCIsInRyYW5zZmVyTGlzdCIsIm1lc2giLCJ2YiIsImxvYWREb25lQ0IiLCJsb2FkUmVtYWluaW5nU3ZmIiwiZG9Mb2FkU3ZmIiwib25TdWNjZXNzIiwicmVzdWx0IiwiVWludDhBcnJheSIsImxvYWRNYW5pZmVzdCIsImludGVyY2VwdE1hbmlmZXN0IiwibWFuaWZlc3QiLCJvcHRpb25zIiwicmVzcG9uc2VUeXBlIiwiZ2V0SXRlbSIsIm9uRmFpbHVyZUNhbGxiYWNrIiwiZG9GZXRjaFRvcG9sb2d5IiwicGF0aCIsIm9uRmFpbHVyZSIsImRhdGEiLCJ0b3BvbG9neSIsImpkciIsImJ5dGVMZW5ndGgiLCJKU09OIiwicGFyc2UiLCJnZXRTdHJpbmciLCJlcnJvciIsImVlZSIsImVyciIsInJlZ2lzdGVyIiwid29ya2VyTWFpbiIsImRvT3BlcmF0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/SvfWorker.js\n"); /***/ }), /***/ "./src/global.js": /*!***********************!*\ !*** ./src/global.js ***! \***********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getGlobal: () => (/* binding */ getGlobal)\n/* harmony export */ });\n/**\n * Functions on the global scope need to be called with the global scope as their 'this ' context.\n * Therefore, we can't simply return function properties from the global scope proxy like other properties.\n * We create another (temporary) proxy instead, which implements the 'apply' hook.\n * Invoking a function through this hook will ensure the correct 'this' context inside of the function.\n * \n * @param {Object} globalScope The global scope that the function is a property of (e.g. window).\n * @param {Function} func The function property that is accessed through the global scope proxy.\n * @returns {Proxy} A new proxy that forwards function invocations so that the 'this' context of the invoked function\n * is set up properly.\n */\nfunction createFunctionProxy(globalScope, func) {\n return new Proxy(func, {\n get(obj, prop) {\n return obj[prop];\n },\n apply(target, thisArg, argumentsList) {\n return target.call(globalScope || thisArg, ...argumentsList);\n }\n });\n}\n\n// A helper method to get an app-specific namespace under the global scope, or create it if it 's not present yet.\nfunction getAppNamespace(globalScope) {\n return globalScope[globalScope.LMV_APP_NAMESPACE] = globalScope[globalScope.LMV_APP_NAMESPACE] || {};\n}\n\n/**\n * Returns the global object of the current environment (e.g. window in a browser).\n * If `USE_LMV_APP_NAMESPACES` is set to `true` on the global scope, the returned value will be a proxy that intercepts\n * set operations on non-existing properties and writes the value to an app-specific namespace instead. The actual\n * property on the window object is a placeholder that forwards read and write operations to the app-specific version.\n *\n * Example:\n * Given that window.LMV_APP_NAMESPACE is 'myApp ' and window.Autodesk does not exist yet\n *\n * getGlobal().Autodesk = {}\n *\n * will be rewritten as\n *\n * window.myApp.Autodesk = {};\n * window.Autodesk = Placeholder that forwards to window[window.LMV_APP_NAMESPACE].Autodesk\n *\n * Changing window.LMV_APP_NAMESPACE to 'myOtherApp ' will then rewrite\n *\n * window.Autodesk to window.myOtherApp.Autodesk\n *\n * @returns {Object} The global scope of the environment.\n */\nfunction getGlobal() {\n // Determine the global scope of the environment\n const globalScope = typeof window !== \"undefined\" && window !== null ?\n window :\n typeof self !== \"undefined\" && self !== null ?\n self :\n __webpack_require__.g;\n\n // If app namespaces are used, create and return a proxy instead of the actual global scope object.\n if (globalScope.USE_LMV_APP_NAMESPACES) {\n if (!globalScope.globalProxy) {\n // The proxy is a singleton that will only be created once, even across multiple viewer bundles.\n globalScope.globalProxy = new Proxy({}, {\n // Get requests are simply forwarded to the global scope.\n // Functions get some special treatment, because they need to invoked with the global scope as their\n // 'this ' context.\n get(obj, prop) {\n let value = globalScope[prop];\n if (typeof value === 'function ') {\n return createFunctionProxy(globalScope, value);\n }\n return value;\n },\n // Set requests are intercepted to create properties in app-specific namespaces.\n set(obj, prop, value) {\n if (Object.prototype.hasOwnProperty.call(globalScope, prop)) {\n // Don't proxy existing properties\n if (globalScope[prop] !==v alue)\n globalScope[prop]=v alue;\n } else {\n // Create the property under the app 's namespace and inject a proxy object in the global\n // scope that forwards to the namespaced property.\n getAppNamespace(globalScope)[prop] = value;\n Object.defineProperty(globalScope, prop, {\n get: () => {return getAppNamespace(globalScope)[prop];},\n set: (value) => {getAppNamespace(globalScope)[prop] = value;}\n });\n }\n return true; // Proxy setters must return true\n }\n });\n }\n\n return globalScope.globalProxy;\n } else {\n return globalScope;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLENBQUM7UUFDakI7TUFDSixDQUFDLENBQUM7SUFDTjs7SUFFQSxPQUFPbkIsV0FBVyxDQUFDa0IsV0FBVztFQUNsQyxDQUFDLE1BQU07SUFDSCxPQUFPbEIsV0FBVztFQUN0QjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2dsb2JhbC5qcz8yOTE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRnVuY3Rpb25zIG9uIHRoZSBnbG9iYWwgc2NvcGUgbmVlZCB0byBiZSBjYWxsZWQgd2l0aCB0aGUgZ2xvYmFsIHNjb3BlIGFzIHRoZWlyICd0aGlzJyBjb250ZXh0LlxuICogVGhlcmVmb3JlLCB3ZSBjYW4ndCBzaW1wbHkgcmV0dXJuIGZ1bmN0aW9uIHByb3BlcnRpZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlIHByb3h5IGxpa2Ugb3RoZXIgcHJvcGVydGllcy5cbiAqIFdlIGNyZWF0ZSBhbm90aGVyICh0ZW1wb3JhcnkpIHByb3h5IGluc3RlYWQsIHdoaWNoIGltcGxlbWVudHMgdGhlICdhcHBseScgaG9vay5cbiAqIEludm9raW5nIGEgZnVuY3Rpb24gdGhyb3VnaCB0aGlzIGhvb2sgd2lsbCBlbnN1cmUgdGhlIGNvcnJlY3QgJ3RoaXMnIGNvbnRleHQgaW5zaWRlIG9mIHRoZSBmdW5jdGlvbi5cbiAqIFxuICogQHBhcmFtIHtPYmplY3R9IGdsb2JhbFNjb3BlIFRoZSBnbG9iYWwgc2NvcGUgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYSBwcm9wZXJ0eSBvZiAoZS5nLiB3aW5kb3cpLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gcHJvcGVydHkgdGhhdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBnbG9iYWwgc2NvcGUgcHJveHkuXG4gKiBAcmV0dXJucyB7UHJveHl9IEEgbmV3IHByb3h5IHRoYXQgZm9yd2FyZHMgZnVuY3Rpb24gaW52b2NhdGlvbnMgc28gdGhhdCB0aGUgJ3RoaXMnIGNvbnRleHQgb2YgdGhlIGludm9rZWQgZnVuY3Rpb25cbiAqICAgaXMgc2V0IHVwIHByb3Blcmx5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvblByb3h5KGdsb2JhbFNjb3BlLCBmdW5jKSB7XG4gICAgcmV0dXJuIG5ldyBQcm94eShmdW5jLCB7XG4gICAgICAgIGdldChvYmosIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbcHJvcF07XG4gICAgICAgIH0sXG4gICAgICAgIGFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jYWxsKGdsb2JhbFNjb3BlIHx8IHRoaXNBcmcsIC4uLmFyZ3VtZW50c0xpc3QpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8vIEEgaGVscGVyIG1ldGhvZCB0byBnZXQgYW4gYXBwLXNwZWNpZmljIG5hbWVzcGFjZSB1bmRlciB0aGUgZ2xvYmFsIHNjb3BlLCBvciBjcmVhdGUgaXQgaWYgaXQncyBub3QgcHJlc2VudCB5ZXQuXG5mdW5jdGlvbiBnZXRBcHBOYW1lc3BhY2UoZ2xvYmFsU2NvcGUpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2NvcGVbZ2xvYmFsU2NvcGUuTE1WX0FQUF9OQU1FU1BBQ0VdID0gZ2xvYmFsU2NvcGVbZ2xvYmFsU2NvcGUuTE1WX0FQUF9OQU1FU1BBQ0VdIHx8IHt9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGdsb2JhbCBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgKGUuZy4gd2luZG93IGluIGEgYnJvd3NlcikuXG4gKiBJZiBgVVNFX0xNVl9BUFBfTkFNRVNQQUNFU2AgaXMgc2V0IHRvIGB0cnVlYCBvbiB0aGUgZ2xvYmFsIHNjb3BlLCB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSBhIHByb3h5IHRoYXQgaW50ZXJjZXB0c1xuICogc2V0IG9wZXJhdGlvbnMgb24gbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMgYW5kIHdyaXRlcyB0aGUgdmFsdWUgdG8gYW4gYXBwLXNwZWNpZmljIG5hbWVzcGFjZSBpbnN0ZWFkLiBUaGUgYWN0dWFsXG4gKiBwcm9wZXJ0eSBvbiB0aGUgd2luZG93IG9iamVjdCBpcyBhIHBsYWNlaG9sZGVyIHRoYXQgZm9yd2FyZHMgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgYXBwLXNwZWNpZmljIHZlcnNpb24uXG4gKlxuICogRXhhbXBsZTpcbiAqIEdpdmVuIHRoYXQgd2luZG93LkxNVl9BUFBfTkFNRVNQQUNFIGlzICdteUFwcCcgYW5kIHdpbmRvdy5BdXRvZGVzayBkb2VzIG5vdCBleGlzdCB5ZXRcbiAqXG4gKiBnZXRHbG9iYWwoKS5BdXRvZGVzayA9IHt9XG4gKlxuICogd2lsbCBiZSByZXdyaXR0ZW4gYXNcbiAqXG4gKiB3aW5kb3cubXlBcHAuQXV0b2Rlc2sgPSB7fTtcbiAqIHdpbmRvdy5BdXRvZGVzayA9IFBsYWNlaG9sZGVyIHRoYXQgZm9yd2FyZHMgdG8gd2luZG93W3dpbmRvdy5MTVZfQVBQX05BTUVTUEFDRV0uQXV0b2Rlc2tcbiAqXG4gKiBDaGFuZ2luZyB3aW5kb3cuTE1WX0FQUF9OQU1FU1BBQ0UgdG8gJ215T3RoZXJBcHAnIHdpbGwgdGhlbiByZXdyaXRlXG4gKlxuICogd2luZG93LkF1dG9kZXNrIHRvIHdpbmRvdy5teU90aGVyQXBwLkF1dG9kZXNrXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGdsb2JhbCBzY29wZSBvZiB0aGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBnbG9iYWwgc2NvcGUgb2YgdGhlIGVudmlyb25tZW50XG4gICAgY29uc3QgZ2xvYmFsU2NvcGUgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cgIT09IG51bGwpXG4gICAgICAgID8gd2luZG93XG4gICAgICAgIDogKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYgIT09IG51bGwpXG4gICAgICAgICAgICA/IHNlbGZcbiAgICAgICAgICAgIDogZ2xvYmFsO1xuXG4gICAgLy8gSWYgYXBwIG5hbWVzcGFjZXMgYXJlIHVzZWQsIGNyZWF0ZSBhbmQgcmV0dXJuIGEgcHJveHkgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGdsb2JhbCBzY29wZSBvYmplY3QuXG4gICAgaWYgKGdsb2JhbFNjb3BlLlVTRV9MTVZfQVBQX05BTUVTUEFDRVMpIHtcbiAgICAgICAgaWYgKCFnbG9iYWxTY29wZS5nbG9iYWxQcm94eSkge1xuICAgICAgICAgICAgLy8gVGhlIHByb3h5IGlzIGEgc2luZ2xldG9uIHRoYXQgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgb25jZSwgZXZlbiBhY3Jvc3MgbXVsdGlwbGUgdmlld2VyIGJ1bmRsZXMuXG4gICAgICAgICAgICBnbG9iYWxTY29wZS5nbG9iYWxQcm94eSA9IG5ldyBQcm94eSh7fSwge1xuICAgICAgICAgICAgICAgIC8vIEdldCByZXF1ZXN0cyBhcmUgc2ltcGx5IGZvcndhcmRlZCB0byB0aGUgZ2xvYmFsIHNjb3BlLlxuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9ucyBnZXQgc29tZSBzcGVjaWFsIHRyZWF0bWVudCwgYmVjYXVzZSB0aGV5IG5lZWQgdG8gaW52b2tlZCB3aXRoIHRoZSBnbG9iYWwgc2NvcGUgYXMgdGhlaXJcbiAgICAgICAgICAgICAgICAvLyAndGhpcycgY29udGV4dC5cbiAgICAgICAgICAgICAgICBnZXQob2JqLCBwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGdsb2JhbFNjb3BlW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25Qcm94eShnbG9iYWxTY29wZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vIFNldCByZXF1ZXN0cyBhcmUgaW50ZXJjZXB0ZWQgdG8gY3JlYXRlIHByb3BlcnRpZXMgaW4gYXBwLXNwZWNpZmljIG5hbWVzcGFjZXMuXG4gICAgICAgICAgICAgICAgc2V0KG9iaiwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnbG9iYWxTY29wZSwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHByb3h5IGV4aXN0aW5nIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxTY29wZVtwcm9wXSAhPT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGVbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgcHJvcGVydHkgdW5kZXIgdGhlIGFwcCdzIG5hbWVzcGFjZSBhbmQgaW5qZWN0IGEgcHJveHkgb2JqZWN0IGluIHRoZSBnbG9iYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjb3BlIHRoYXQgZm9yd2FyZHMgdG8gdGhlIG5hbWVzcGFjZWQgcHJvcGVydHkuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRBcHBOYW1lc3BhY2UoZ2xvYmFsU2NvcGUpW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsU2NvcGUsIHByb3AsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHsgcmV0dXJuIGdldEFwcE5hbWVzcGFjZShnbG9iYWxTY29wZSlbcHJvcF07IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAodmFsdWUpID0+IHsgZ2V0QXBwTmFtZXNwYWNlKGdsb2JhbFNjb3BlKVtwcm9wXSA9IHZhbHVlOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUHJveHkgc2V0dGVycyBtdXN0IHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsU2NvcGUuZ2xvYmFsUHJveHk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFNjb3BlO1xuICAgIH1cbn0iXSwibmFtZXMiOlsiY3JlYXRlRnVuY3Rpb25Qcm94eSIsImdsb2JhbFNjb3BlIiwiZnVuYyIsIlByb3h5IiwiZ2V0Iiwib2JqIiwicHJvcCIsImFwcGx5IiwidGFyZ2V0IiwidGhpc0FyZyIsImFyZ3VtZW50c0xpc3QiLCJjYWxsIiwiZ2V0QXBwTmFtZXNwYWNlIiwiTE1WX0FQUF9OQU1FU1BBQ0UiLCJnZXRHbG9iYWwiLCJ3aW5kb3ciLCJzZWxmIiwiZ2xvYmFsIiwiVVNFX0xNVl9BUFBfTkFNRVNQQUNFUyIsImdsb2JhbFByb3h5IiwidmFsdWUiLCJzZXQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/global.js\n"); /***/ }), /***/ "./src/globals.js": /*!************************!*\ !*** ./src/globals.js ***! \************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DISABLE_FORGE_CANVAS_LOGO: () => (/* binding */ DISABLE_FORGE_CANVAS_LOGO),\n/* harmony export */ DISABLE_FORGE_LOGO: () => (/* binding */ DISABLE_FORGE_LOGO),\n/* harmony export */ fromUrlSafeBase64: () => (/* binding */ fromUrlSafeBase64),\n/* harmony export */ getHtmlTemplate: () => (/* binding */ getHtmlTemplate),\n/* harmony export */ getParameterByName: () => (/* binding */ getParameterByName),\n/* harmony export */ getParameterByNameFromPath: () => (/* binding */ getParameterByNameFromPath),\n/* harmony export */ getResourceUrl: () => (/* binding */ getResourceUrl),\n/* harmony export */ getScript: () => (/* binding */ getScript),\n/* harmony export */ injectCSS: () => (/* binding */ injectCSS),\n/* harmony export */ isExperimentalFlagEnabled: () => (/* binding */ isExperimentalFlagEnabled),\n/* harmony export */ stringToDOM: () => (/* binding */ stringToDOM),\n/* harmony export */ toUrlSafeBase64: () => (/* binding */ toUrlSafeBase64)\n/* harmony export */ });\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./compat */ \"./src/compat.js\");\n\n\n\nvar g = (0,_compat__WEBPACK_IMPORTED_MODULE_0__.getGlobal)();\nvar _window = g;\nvar _document = _window && _window.document;\n\ng.USE_FETCH_API = true;\n\ng.LOCALIZATION_REL_PATH = \"\";\n\n/**\n * Contains the Viewer's version.\n *\n * @type {string}\n * @global\n */\ng.LMV_VIEWER_VERSION=\ "7.96.0\";\n\ng.LMV_BUILD_TYPE=\ "Production\";\ng.LMV_RESOURCE_ROOT=\ "\";\n\n/** Allows for external code, e.g. collosseum tests, to check which version is used. */\ng.LMV_IS_FLUENT_BUILD=f alse;\n\n/**\n * When true, non-OTG resources (i.e. 2D documents, image files) will get fetched directly from DS.\n * When false, non-OTG resources will get fetched using OTG-DS proxy.\n * \n * https://git.autodesk.com/A360/firefly.js/pull/4319\n */\ng.USE_OTG_DS_PROXY=f alse;\n\n/**\n * When true, requests to APS are authenticated with a cookie. \n * When false, requests to APS are authenticated with an Authentication header.\n * When undefined, the viewer will first try authentication via cookie, if \n * that doesn 't work it will fallback to using an Authentication header.\n *\n * @type {boolean|undefined}\n * @global\n * @default undefined\n */\ng.LMV_THIRD_PARTY_COOKIE = (0,_compat__WEBPACK_IMPORTED_MODULE_0__.isNodeJS)() ? false : undefined;\n\nif (g.LMV_VIEWER_VERSION.charAt(0) === 'v ') {\n // remove prefixed 'v '\n // Required due to TeamCity build pipeline (LMV-1361)\n g.LMV_VIEWER_VERSION = g.LMV_VIEWER_VERSION.substr(1);\n}\n\n\n/**\n * When true, the viewer will favor loading the PDF file over the Leaflet derivative, \n * ignoring the manifest value for `totalRasterPixels`. A true value will take precedence over {@link LMV_RASTER_PDF}.\n *\n * @type {boolean}\n * @default \n * @global\n */\ng.LMV_VECTOR_PDF = false;\n\n/**\n * When true, the viewer will favor loading the Leaflet derivative over the PDF file,\n * ignoring the manifest value for `totalRasterPixels`. When {@link LMV_RASTER_PDF} is true, this value is ignored. \n *\n * @type {boolean}\n * @default \n * @global\n */\ng.LMV_RASTER_PDF = true;\n\n/**\n * When true, LMV will remove the APS Logo spinner and the in canvas APS logo\n * Note: We disable the branding for the fluent build. For the regular build this will be enabled.\n *\n * @private\n */\nlet DISABLE_FORGE_LOGO = false;\n\n\n/**\n * When true, LMV will remove the in canvas APS logo. To remove both the in canvas and the spinner logos use DISABLE_FORGE_LOG\n *\n * @private\n */\nlet DISABLE_FORGE_CANVAS_LOGO = true; // Switch to false to enable the in-canvas logo\n\n\n// TODO: This is here for now, until we find a better place for it.\n//\n/**\n * Returns the first source url found containing the given script name.\n *\n * @private\n * @param {string} scriptName - Script name.\n * @returns {HTMLScriptElement} The script element whose source location matches the input parameter.\n */\nfunction getScript(scriptName) {\n scriptName = scriptName.toLowerCase();\n var scripts = _document.getElementsByTagName('SCRIPT ');\n if (scripts && scripts.length > 0) {\n for (var i = 0; i < scripts.length; ++i) {\n if (scripts[i].src && scripts[i].src.toLowerCase().indexOf(scriptName) !== -1) {\n return scripts[i];\n }\n }\n }\n return null;\n}\n\n/**\n * Inject a css file into the page.\n * There's a callback if you need to know when it gets downloaded (rare).\n * Accepts both relative and absolute URLs.\n *\n * @param cssUrl\n * @param callback\n * @param onError\n * @private\n */\nfunction injectCSS(cssUrl, callback, onError) {\n var href=c ssUrl.indexOf( '://')> 0 ? cssUrl : getResourceUrl(cssUrl);\n\n // Verify that we haven't downloaded it already\n var results = _document.getElementsByTagName('link');\n for (var i = 0, len = results.length; i < len; i++) {\n if (results[i].href===h ref) {\n // Already downloaded\n callback && callback();\n return;\n }\n }\n\n // else, download it\n var s=_ document.createElement(\ "link\");\n s.setAttribute( 'rel', \ "stylesheet\");\n s.setAttribute( 'type', \ "text/css\");\n s.setAttribute( 'href', href);\n if (callback) {\n s.onload=c allback;\n }\n if (onError) {\n s.onerror=o nError;\n }\n _document.head.appendChild(s);\n}\n\n/**\n * Download an HTML template.\n * If successful, will invoke callback(null, templateString)\n * If failure, will invoke callback(\ "some error\", null)\n *\n * @param templateUrl\n * @param callback\n * @private\n * @deprecated\n */\nfunction getHtmlTemplate(templateUrl, callback) {\n var href=t emplateUrl.indexOf( '://')> 0 ? templateUrl : getResourceUrl(templateUrl);\n var request = new XMLHttpRequest();\n request.onload = requestLoad;\n request.onerror = requestError;\n request.ontimeout = requestError;\n request.open('GET', href, true);\n request.send();\n\n /**\n * @param err\n * @private\n */\n function requestError(err) {\n callback(err, null);\n }\n /**\n * @param event\n * @private\n */\n function requestLoad(event) {\n var content = event.currentTarget.responseText;\n callback(null, content);\n }\n\n}\n\n/**\n * Checks whether an experimental flag has been set into the viewer's' `config`\n * object, which happens to be the same as the extension's `options` object.\n *\n * @param flagName\n * @param config3d\n * @private\n */\nfunction isExperimentalFlagEnabled(flagName, config3d) {\n if (!config3d || !Array.isArray(config3d.experimental))\n return false;\n return config3d.experimental.indexOf(flagName) !== -1;\n}\n\n\n/**\n * Returns the full url of a resource with version.\n * The version will be determined from the LMV_VIEWER_VERSION variable.\n *\n * @private\n * @param {string} resourceRelativePath - The path of the resource relative to LMV_RESOURCE_ROOT.\n * @returns {string} The full resource path.\n */\nfunction getResourceUrl(resourceRelativePath) {\n return g.LMV_RESOURCE_ROOT + resourceRelativePath;\n}\n\n\n/**\n * Returns the query parameter value from window url\n * @param {string} name - Parameter name\n * @returns {string} - Parameter value\n * @alias Autodesk.Viewing.getParameterByName\n */\nfunction getParameterByName(name) {\n if (typeof window === \"undefined\") {\n return \"\";\n }\n return getParameterByNameFromPath(name, _window.location.href);\n}\n\n/**\n * Parameter from url\n * @param {string} name - Parameter name\n * @param {string} url - URL\n * @returns {string} - Parameter value\n * @alias Autodesk.Viewing.getParameterByNameFromPath\n */\nfunction getParameterByNameFromPath(name, url) {\n name = name.replace(/[[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n var regexS = \"[\\\\?&]\" + name + \"=([^&#]*)\";\n var regex = new RegExp(regexS);\n var results = regex.exec(url);\n if (results == null)\n return \"\";else\n\n return decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n}\n\n\n/**\n * Creae a dom element\n * @param {string} str - String to generate DOM object\n * @private\n */\nfunction stringToDOM(str) {\n var d = _document.createElement(\"div\");\n d.innerHTML = str;\n return d.firstChild;\n}\n\n/**\n * Convert to url-safe base 64 string\n * @param {string} str - String to convert\n * @returns - Url-safe base64 string\n * @alias Autodesk.Viewing.toUrlSafeBase64\n */\nfunction toUrlSafeBase64(str) {\n const base64 = btoa(str).\n replace(/\\+/g, '-') // Convert '+' to '-' (dash)\n .replace(/\\//g, '_') // Convert '/' to '_' (underscore)\n .replace(/=+$/, ''); // Remove trailing '='\n\n return base64;\n}\n\n/**\n * Decode base64 string\n * @param {string} str - String to convert\n * @returns string after decoding from base64\n * @alias Autodesk.Viewing.fromUrlSafeBase64\n */\nfunction fromUrlSafeBase64(str) {\n str = str.replace(/-/g, '+'); // Convert '-' (dash) to '+'\n str = str.replace(/_/g, '/'); // Convert '_' (underscore) to '/'\n while (str.length % 4) {str += '=';} // Add padding '='\n\n if ((0,_compat__WEBPACK_IMPORTED_MODULE_0__.isNodeJS)()) {\n return Buffer.from(str, \"base64\").toString();\n } else {\n return atob(str);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0VBQ2pDLE1BQU1LLE1BQU0sR0FBR0MsSUFBSSxDQUFDTixHQUFHLENBQUM7RUFDbkJQLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7RUFBQSxDQUNwQkEsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztFQUFBLENBQ3BCQSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0VBRXpCLE9BQU9ZLE1BQU07QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0UsaUJBQWlCQSxDQUFDUCxHQUFHLEVBQUU7RUFDbkNBLEdBQUcsR0FBR0EsR0FBRyxDQUFDUCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQVM7RUFDdENPLEdBQUcsR0FBR0EsR0FBRyxDQUFDUCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQVM7RUFDdEMsT0FBT08sR0FBRyxDQUFDckQsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFFcUQsR0FBRyxJQUFJLEdBQUcsQ0FBRSxDQUFDLENBQUM7O0VBRXZDLElBQUlsRixpREFBUSxDQUFDLENBQUMsRUFBRTtJQUNaLE9BQU8wRixNQUFNLENBQUNDLElBQUksQ0FBQ1QsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDVSxRQUFRLENBQUMsQ0FBQztFQUNoRCxDQUFDLE1BQU07SUFDSCxPQUFPQyxJQUFJLENBQUNYLEdBQUcsQ0FBQztFQUNwQjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2dsb2JhbHMuanM/ZjJhOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IGdldEdsb2JhbCwgaXNOb2RlSlMgfSBmcm9tIFwiLi9jb21wYXRcIjtcblxudmFyIGcgPSBnZXRHbG9iYWwoKTtcbnZhciBfd2luZG93ID0gZztcbnZhciBfZG9jdW1lbnQgPSBfd2luZG93ICYmIF93aW5kb3cuZG9jdW1lbnQ7XG5cbmcuVVNFX0ZFVENIX0FQSSA9IHRydWU7XG5cbmcuTE9DQUxJWkFUSU9OX1JFTF9QQVRIID0gXCJcIjtcblxuLyoqXG4gKiBDb250YWlucyB0aGUgVmlld2VyJ3MgdmVyc2lvbi5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGdsb2JhbFxuICovXG5nLkxNVl9WSUVXRVJfVkVSU0lPTiA9IEJVSUxEX0ZMQUdfX0JVSUxEX1ZFUlNJT047XG5cbmcuTE1WX0JVSUxEX1RZUEUgPSBCVUlMRF9GTEFHX19CVUlMRF9UWVBFO1xuZy5MTVZfUkVTT1VSQ0VfUk9PVCA9IFwiXCI7XG5cbi8qKiBBbGxvd3MgZm9yIGV4dGVybmFsIGNvZGUsIGUuZy4gY29sbG9zc2V1bSB0ZXN0cywgdG8gY2hlY2sgd2hpY2ggdmVyc2lvbiBpcyB1c2VkLiAqL1xuZy5MTVZfSVNfRkxVRU5UX0JVSUxEID0gQlVJTERfRkxBR19fRkxVRU5UX1BST0ZJTEU7XG5cbi8qKlxuICogV2hlbiB0cnVlLCBub24tT1RHIHJlc291cmNlcyAoaS5lLiAyRCBkb2N1bWVudHMsIGltYWdlIGZpbGVzKSB3aWxsIGdldCBmZXRjaGVkIGRpcmVjdGx5IGZyb20gRFMuXG4gKiBXaGVuIGZhbHNlLCBub24tT1RHIHJlc291cmNlcyB3aWxsIGdldCBmZXRjaGVkIHVzaW5nIE9URy1EUyBwcm94eS5cbiAqIFxuICogaHR0cHM6Ly9naXQuYXV0b2Rlc2suY29tL0EzNjAvZmlyZWZseS5qcy9wdWxsLzQzMTlcbiAqL1xuZy5VU0VfT1RHX0RTX1BST1hZID0gQlVJTERfRkxBR19fVVNFX09UR19EU19QUk9YWTtcblxuLyoqXG4gKiBXaGVuIHRydWUsIHJlcXVlc3RzIHRvIEFQUyBhcmUgYXV0aGVudGljYXRlZCB3aXRoIGEgY29va2llLiBcbiAqIFdoZW4gZmFsc2UsIHJlcXVlc3RzIHRvIEFQUyBhcmUgYXV0aGVudGljYXRlZCB3aXRoIGFuIEF1dGhlbnRpY2F0aW9uIGhlYWRlci5cbiAqIFdoZW4gdW5kZWZpbmVkLCB0aGUgdmlld2VyIHdpbGwgZmlyc3QgdHJ5IGF1dGhlbnRpY2F0aW9uIHZpYSBjb29raWUsIGlmIFxuICogdGhhdCBkb2Vzbid0IHdvcmsgaXQgd2lsbCBmYWxsYmFjayB0byB1c2luZyBhbiBBdXRoZW50aWNhdGlvbiBoZWFkZXIuXG4gKlxuICogQHR5cGUge2Jvb2xlYW58dW5kZWZpbmVkfVxuICogQGdsb2JhbFxuICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gKi9cbmcuTE1WX1RISVJEX1BBUlRZX0NPT0tJRSA9IGlzTm9kZUpTKCkgPyBmYWxzZSA6IHVuZGVmaW5lZDtcblxuaWYgKGcuTE1WX1ZJRVdFUl9WRVJTSU9OLmNoYXJBdCgwKSA9PT0gJ3YnKXtcbiAgICAvLyByZW1vdmUgcHJlZml4ZWQgJ3YnXG4gICAgLy8gUmVxdWlyZWQgZHVlIHRvIFRlYW1DaXR5IGJ1aWxkIHBpcGVsaW5lIChMTVYtMTM2MSlcbiAgICBnLkxNVl9WSUVXRVJfVkVSU0lPTiA9IGcuTE1WX1ZJRVdFUl9WRVJTSU9OLnN1YnN0cigxKTtcbn1cblxuXG4vKipcbiAqIFdoZW4gdHJ1ZSwgdGhlIHZpZXdlciB3aWxsIGZhdm9yIGxvYWRpbmcgdGhlIFBERiBmaWxlIG92ZXIgdGhlIExlYWZsZXQgZGVyaXZhdGl2ZSwgXG4gKiBpZ25vcmluZyB0aGUgbWFuaWZlc3QgdmFsdWUgZm9yIGB0b3RhbFJhc3RlclBpeGVsc2AuIEEgdHJ1ZSB2YWx1ZSB3aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIHtAbGluayBMTVZfUkFTVEVSX1BERn0uXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAZGVmYXVsdCBcbiAqIEBnbG9iYWxcbiAqL1xuZy5MTVZfVkVDVE9SX1BERiA9IGZhbHNlO1xuXG4vKipcbiAqIFdoZW4gdHJ1ZSwgdGhlIHZpZXdlciB3aWxsIGZhdm9yIGxvYWRpbmcgdGhlIExlYWZsZXQgZGVyaXZhdGl2ZSBvdmVyIHRoZSBQREYgZmlsZSxcbiAqIGlnbm9yaW5nIHRoZSBtYW5pZmVzdCB2YWx1ZSBmb3IgYHRvdGFsUmFzdGVyUGl4ZWxzYC4gV2hlbiB7QGxpbmsgTE1WX1JBU1RFUl9QREZ9IGlzIHRydWUsIHRoaXMgdmFsdWUgaXMgaWdub3JlZC4gXG4gKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKiBAZGVmYXVsdCBcbiAqIEBnbG9iYWxcbiAqL1xuZy5MTVZfUkFTVEVSX1BERiA9IHRydWU7XG5cbi8qKlxuICogV2hlbiB0cnVlLCBMTVYgd2lsbCByZW1vdmUgdGhlIEFQUyBMb2dvIHNwaW5uZXIgYW5kIHRoZSBpbiBjYW52YXMgQVBTIGxvZ29cbiAqIE5vdGU6IFdlIGRpc2FibGUgdGhlIGJyYW5kaW5nIGZvciB0aGUgZmx1ZW50IGJ1aWxkLiBGb3IgdGhlIHJlZ3VsYXIgYnVpbGQgdGhpcyB3aWxsIGJlIGVuYWJsZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGxldCBESVNBQkxFX0ZPUkdFX0xPR08gPSBCVUlMRF9GTEFHX19GTFVFTlRfUFJPRklMRTtcblxuXG4vKipcbiAqIFdoZW4gdHJ1ZSwgTE1WIHdpbGwgcmVtb3ZlIHRoZSBpbiBjYW52YXMgQVBTIGxvZ28uIFRvIHJlbW92ZSBib3RoIHRoZSBpbiBjYW52YXMgYW5kIHRoZSBzcGlubmVyIGxvZ29zIHVzZSBESVNBQkxFX0ZPUkdFX0xPR1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBsZXQgRElTQUJMRV9GT1JHRV9DQU5WQVNfTE9HTyA9IHRydWU7IC8vIFN3aXRjaCB0byBmYWxzZSB0byBlbmFibGUgdGhlIGluLWNhbnZhcyBsb2dvXG5cblxuLy8gVE9ETzogIFRoaXMgaXMgaGVyZSBmb3Igbm93LCB1bnRpbCB3ZSBmaW5kIGEgYmV0dGVyIHBsYWNlIGZvciBpdC5cbi8vXG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IHNvdXJjZSB1cmwgZm91bmQgY29udGFpbmluZyB0aGUgZ2l2ZW4gc2NyaXB0IG5hbWUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JpcHROYW1lIC0gU2NyaXB0IG5hbWUuXG4gKiBAcmV0dXJucyB7SFRNTFNjcmlwdEVsZW1lbnR9IFRoZSBzY3JpcHQgZWxlbWVudCB3aG9zZSBzb3VyY2UgbG9jYXRpb24gbWF0Y2hlcyB0aGUgaW5wdXQgcGFyYW1ldGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyaXB0KHNjcmlwdE5hbWUpIHtcbiAgICBzY3JpcHROYW1lID0gc2NyaXB0TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBzY3JpcHRzID0gX2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdTQ1JJUFQnKTtcbiAgICBpZiAoc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0c1tpXS5zcmMgJiYgc2NyaXB0c1tpXS5zcmMudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNjcmlwdE5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEluamVjdCBhIGNzcyBmaWxlIGludG8gdGhlIHBhZ2UuXG4gKiBUaGVyZSdzIGEgY2FsbGJhY2sgaWYgeW91IG5lZWQgdG8ga25vdyB3aGVuIGl0IGdldHMgZG93bmxvYWRlZCAocmFyZSkuXG4gKiBBY2NlcHRzIGJvdGggcmVsYXRpdmUgYW5kIGFic29sdXRlIFVSTHMuXG4gKlxuICogQHBhcmFtIGNzc1VybFxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcGFyYW0gb25FcnJvclxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENTUyhjc3NVcmwsIGNhbGxiYWNrLCBvbkVycm9yKSB7XG4gICAgdmFyIGhyZWYgPSBjc3NVcmwuaW5kZXhPZignOi8vJykgPiAwID8gY3NzVXJsIDogZ2V0UmVzb3VyY2VVcmwoY3NzVXJsKTtcblxuICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmVuJ3QgZG93bmxvYWRlZCBpdCBhbHJlYWR5XG4gICAgdmFyIHJlc3VsdHMgPSBfZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKTtcbiAgICBmb3IgKHZhciBpPTAsIGxlbj1yZXN1bHRzLmxlbmd0aDsgaTxsZW47IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0c1tpXS5ocmVmID09PSBocmVmKSB7XG4gICAgICAgICAgICAvLyBBbHJlYWR5IGRvd25sb2FkZWRcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbHNlLCBkb3dubG9hZCBpdFxuICAgIHZhciBzID0gX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuICAgIHMuc2V0QXR0cmlidXRlKCdyZWwnLFwic3R5bGVzaGVldFwiKTtcbiAgICBzLnNldEF0dHJpYnV0ZSgndHlwZScsXCJ0ZXh0L2Nzc1wiKTtcbiAgICBzLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBzLm9ubG9hZCA9IGNhbGxiYWNrO1xuICAgIH1cbiAgICBpZiAob25FcnJvcikge1xuICAgICAgICBzLm9uZXJyb3IgPSBvbkVycm9yO1xuICAgIH1cbiAgICBfZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcbn1cblxuLyoqXG4gKiBEb3dubG9hZCBhbiBIVE1MIHRlbXBsYXRlLlxuICogSWYgc3VjY2Vzc2Z1bCwgd2lsbCBpbnZva2UgY2FsbGJhY2sobnVsbCwgdGVtcGxhdGVTdHJpbmcpXG4gKiBJZiBmYWlsdXJlLCB3aWxsIGludm9rZSBjYWxsYmFjayhcInNvbWUgZXJyb3JcIiwgbnVsbClcbiAqXG4gKiBAcGFyYW0gdGVtcGxhdGVVcmxcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHByaXZhdGVcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdG1sVGVtcGxhdGUodGVtcGxhdGVVcmwsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGhyZWYgPSB0ZW1wbGF0ZVVybC5pbmRleE9mKCc6Ly8nKSA+IDAgPyB0ZW1wbGF0ZVVybCA6IGdldFJlc291cmNlVXJsKHRlbXBsYXRlVXJsKTtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHJlcXVlc3Qub25sb2FkID0gcmVxdWVzdExvYWQ7XG4gICAgcmVxdWVzdC5vbmVycm9yID0gcmVxdWVzdEVycm9yO1xuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gcmVxdWVzdEVycm9yO1xuICAgIHJlcXVlc3Qub3BlbignR0VUJywgaHJlZiwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZXJyXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXF1ZXN0RXJyb3IoZXJyKSB7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVxdWVzdExvYWQoZXZlbnQpIHtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0LnJlc3BvbnNlVGV4dDtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgY29udGVudCk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZXhwZXJpbWVudGFsIGZsYWcgaGFzIGJlZW4gc2V0IGludG8gdGhlIHZpZXdlcidzJyBgY29uZmlnYFxuICogb2JqZWN0LCB3aGljaCBoYXBwZW5zIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBleHRlbnNpb24ncyBgb3B0aW9uc2Agb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBmbGFnTmFtZVxuICogQHBhcmFtIGNvbmZpZzNkXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeHBlcmltZW50YWxGbGFnRW5hYmxlZChmbGFnTmFtZSwgY29uZmlnM2QpIHtcbiAgICBpZiAoIWNvbmZpZzNkIHx8ICFBcnJheS5pc0FycmF5KGNvbmZpZzNkLmV4cGVyaW1lbnRhbCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29uZmlnM2QuZXhwZXJpbWVudGFsLmluZGV4T2YoZmxhZ05hbWUpICE9PSAtMTtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGZ1bGwgdXJsIG9mIGEgcmVzb3VyY2Ugd2l0aCB2ZXJzaW9uLlxuICogVGhlIHZlcnNpb24gd2lsbCBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIExNVl9WSUVXRVJfVkVSU0lPTiB2YXJpYWJsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlUmVsYXRpdmVQYXRoIC0gVGhlIHBhdGggb2YgdGhlIHJlc291cmNlIHJlbGF0aXZlIHRvIExNVl9SRVNPVVJDRV9ST09ULlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGwgcmVzb3VyY2UgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlVXJsKHJlc291cmNlUmVsYXRpdmVQYXRoKSB7XG4gICAgcmV0dXJuIGcuTE1WX1JFU09VUkNFX1JPT1QgKyByZXNvdXJjZVJlbGF0aXZlUGF0aDtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgdGhlIHF1ZXJ5IHBhcmFtZXRlciB2YWx1ZSBmcm9tIHdpbmRvdyB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gUGFyYW1ldGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUGFyYW1ldGVyIHZhbHVlXG4gKiBAYWxpYXMgQXV0b2Rlc2suVmlld2luZy5nZXRQYXJhbWV0ZXJCeU5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBnZXRQYXJhbWV0ZXJCeU5hbWVGcm9tUGF0aChuYW1lLCBfd2luZG93LmxvY2F0aW9uLmhyZWYpO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlciBmcm9tIHVybFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBQYXJhbWV0ZXIgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gLSBQYXJhbWV0ZXIgdmFsdWVcbiAqIEBhbGlhcyBBdXRvZGVzay5WaWV3aW5nLmdldFBhcmFtZXRlckJ5TmFtZUZyb21QYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbWV0ZXJCeU5hbWVGcm9tUGF0aChuYW1lLCB1cmwpIHtcbiAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9bW10vLCBcIlxcXFxbXCIpLnJlcGxhY2UoL1tcXF1dLywgXCJcXFxcXVwiKTtcbiAgICB2YXIgcmVnZXhTID0gXCJbXFxcXD8mXVwiICsgbmFtZSArIFwiPShbXiYjXSopXCI7XG4gICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFMpO1xuICAgIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyh1cmwpO1xuICAgIGlmIChyZXN1bHRzID09IG51bGwpXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRzWzFdLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikpO1xufVxuXG5cbi8qKlxuICogQ3JlYWUgYSBkb20gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFN0cmluZyB0byBnZW5lcmF0ZSBET00gb2JqZWN0XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9ET00oc3RyKSB7XG4gICAgdmFyIGQgPSBfZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkLmlubmVySFRNTCA9IHN0cjtcbiAgICByZXR1cm4gZC5maXJzdENoaWxkO1xufVxuXG4vKipcbiAqIENvbnZlcnQgdG8gdXJsLXNhZmUgYmFzZSA2NCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBTdHJpbmcgdG8gY29udmVydFxuICogQHJldHVybnMgLSBVcmwtc2FmZSBiYXNlNjQgc3RyaW5nXG4gKiBAYWxpYXMgQXV0b2Rlc2suVmlld2luZy50b1VybFNhZmVCYXNlNjRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVXJsU2FmZUJhc2U2NChzdHIpIHtcbiAgICBjb25zdCBiYXNlNjQgPSBidG9hKHN0cilcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpIC8vIENvbnZlcnQgJysnIHRvICctJyAoZGFzaClcbiAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpIC8vIENvbnZlcnQgJy8nIHRvICdfJyAodW5kZXJzY29yZSlcbiAgICAgICAgLnJlcGxhY2UoLz0rJC8sICcnKTsgLy8gUmVtb3ZlIHRyYWlsaW5nICc9J1xuXG4gICAgcmV0dXJuIGJhc2U2NDtcbn1cblxuLyoqXG4gKiBEZWNvZGUgYmFzZTY0IHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBzdHJpbmcgYWZ0ZXIgZGVjb2RpbmcgZnJvbSBiYXNlNjRcbiAqIEBhbGlhcyBBdXRvZGVzay5WaWV3aW5nLmZyb21VcmxTYWZlQmFzZTY0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVXJsU2FmZUJhc2U2NChzdHIpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvLS9nLCAnKycpOyAgICAgICAgIC8vIENvbnZlcnQgJy0nIChkYXNoKSB0byAnKydcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXy9nLCAnLycpOyAgICAgICAgIC8vIENvbnZlcnQgJ18nICh1bmRlcnNjb3JlKSB0byAnLydcbiAgICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQpIHsgc3RyICs9ICc9JzsgfSAvLyBBZGQgcGFkZGluZyAnPSdcblxuICAgIGlmIChpc05vZGVKUygpKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF0b2Ioc3RyKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiZ2V0R2xvYmFsIiwiaXNOb2RlSlMiLCJnIiwiX3dpbmRvdyIsIl9kb2N1bWVudCIsImRvY3VtZW50IiwiVVNFX0ZFVENIX0FQSSIsIkxPQ0FMSVpBVElPTl9SRUxfUEFUSCIsIkxNVl9WSUVXRVJfVkVSU0lPTiIsIkJVSUxEX0ZMQUdfX0JVSUxEX1ZFUlNJT04iLCJMTVZfQlVJTERfVFlQRSIsIkJVSUxEX0ZMQUdfX0JVSUxEX1RZUEUiLCJMTVZfUkVTT1VSQ0VfUk9PVCIsIkxNVl9JU19GTFVFTlRfQlVJTEQiLCJCVUlMRF9GTEFHX19GTFVFTlRfUFJPRklMRSIsIlVTRV9PVEdfRFNfUFJPWFkiLCJCVUlMRF9GTEFHX19VU0VfT1RHX0RTX1BST1hZIiwiTE1WX1RISVJEX1BBUlRZX0NPT0tJRSIsInVuZGVmaW5lZCIsImNoYXJBdCIsInN1YnN0ciIsIkxNVl9WRUNUT1JfUERGIiwiTE1WX1JBU1RFUl9QREYiLCJESVNBQkxFX0ZPUkdFX0xPR08iLCJESVNBQkxFX0ZPUkdFX0NBTlZBU19MT0dPIiwiZ2V0U2NyaXB0Iiwic2NyaXB0TmFtZSIsInRvTG93ZXJDYXNlIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGVuZ3RoIiwiaSIsInNyYyIsImluZGV4T2YiLCJpbmplY3RDU1MiLCJjc3NVcmwiLCJjYWxsYmFjayIsIm9uRXJyb3IiLCJocmVmIiwiZ2V0UmVzb3VyY2VVcmwiLCJyZXN1bHRzIiwibGVuIiwicyIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJvbmxvYWQiLCJvbmVycm9yIiwiaGVhZCIsImFwcGVuZENoaWxkIiwiZ2V0SHRtbFRlbXBsYXRlIiwidGVtcGxhdGVVcmwiLCJyZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3QiLCJyZXF1ZXN0TG9hZCIsInJlcXVlc3RFcnJvciIsIm9udGltZW91dCIsIm9wZW4iLCJzZW5kIiwiZXJyIiwiZXZlbnQiLCJjb250ZW50IiwiY3VycmVudFRhcmdldCIsInJlc3BvbnNlVGV4dCIsImlzRXhwZXJpbWVudGFsRmxhZ0VuYWJsZWQiLCJmbGFnTmFtZSIsImNvbmZpZzNkIiwiQXJyYXkiLCJpc0FycmF5IiwiZXhwZXJpbWVudGFsIiwicmVzb3VyY2VSZWxhdGl2ZVBhdGgiLCJnZXRQYXJhbWV0ZXJCeU5hbWUiLCJuYW1lIiwid2luZG93IiwiZ2V0UGFyYW1ldGVyQnlOYW1lRnJvbVBhdGgiLCJsb2NhdGlvbiIsInVybCIsInJlcGxhY2UiLCJyZWdleFMiLCJyZWdleCIsIlJlZ0V4cCIsImV4ZWMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzdHJpbmdUb0RPTSIsInN0ciIsImQiLCJpbm5lckhUTUwiLCJmaXJzdENoaWxkIiwidG9VcmxTYWZlQmFzZTY0IiwiYmFzZTY0IiwiYnRvYSIsImZyb21VcmxTYWZlQmFzZTY0IiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwiYXRvYiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/globals.js\n"); /***/ }), /***/ "./src/logger/Logger.js": /*!******************************!*\ !*** ./src/logger/Logger.js ***! \******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LogLevels: () => (/* binding */ LogLevels),\n/* harmony export */ Logger: () => (/* binding */ Logger),\n/* harmony export */ logger: () => (/* binding */ logger),\n/* harmony export */ setLogger: () => (/* binding */ setLogger)\n/* harmony export */ });\n/* harmony import */ var _compat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../compat */ \"./src/compat.js\");\n/* harmony import */ var _file_loaders_net_endpoints__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../file-loaders/net/endpoints */ \"./src/file-loaders/net/endpoints.js\");\n/* harmony import */ var _analytics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../analytics */ \"./src/analytics/index.js\");\n\n\n\n\n\nconst global = (0,_compat__WEBPACK_IMPORTED_MODULE_0__.getGlobal)();\nconst _window = global;\n\n/**\n * Logging levels. Higher number means more verbose logs,\n * for example, with level 3, `info`, `warn`, or `error`\n * logs will show up in the console but `debug` and `log` won't.\n *\n * Semantics of specific levels:\n * - debug: low-level debugging logs\n * - log: common, higher-level debugging logs\n * - info: helpful runtime information (even for stag/prod environments)\n * - warn: potentially problematic situations; handled exceptions\n * - error: definitely problematic situations; unhandled exceptions\n * @readonly\n * @enum {number}\n */\nconst LogLevels = {\n DEBUG: 5,\n LOG: 4,\n INFO: 3,\n WARNING: 2,\n ERROR: 1,\n NONE: 0\n};\n\n\n/**\n * Logger class. \n * Depending on options.logLevel setting in initilize function, corresponding functions would be activated.\n */\nfunction Logger() {\n this.runtimeStats = {};\n this.level = -1;\n this.setLevel(LogLevels.ERROR);\n this._reportError = this._reportError.bind(this);\n}\n\n/**\n * Initialize Logger object with options. \n * \n * @param {object} [options] - Options object to configure the Logger.\n * @param {function} [options.eventCallback] - An optional callback used for processing the log entry with properties like \"category\", \"timestamp\", etc. \n It can be used as for analytics tracking by filtering and listening to specific category users are interested. \n The expected argument is the user supplied entry object instrumented with \"timestamp\" and \"sessionId\" properties. \n * @param {string} [options.sessionId] - An optional id for each browser session. Default gets generated based on current time stamp if not specified. \n * @param {number} [options.logLevel] - An optional level to define the log level. Default is LogLevels.ERROR if not specified.\n *\n */\n\nLogger.prototype.initialize = function (options) {\n\n if (options.eventCallback)\n this.callback = options.eventCallback;\n\n this.sessionId = options.sessionId;\n if (!this.sessionId) {\n var now = Date.now() + \"\";\n this.sessionId = parseFloat((Math.random() * 10000 | 0) + \"\" + now.substring(4));\n }\n\n // Initialize log level is passed in\n if (typeof options.logLevel === 'number') {\n this.setLevel(options.logLevel);\n }\n\n this.environmentInfo = {\n touch: (0,_compat__WEBPACK_IMPORTED_MODULE_0__.isTouchDevice)(),\n env: (0,_file_loaders_net_endpoints__WEBPACK_IMPORTED_MODULE_1__.getEnv)(),\n referer: getReferer(),\n version: global.LMV_VIEWER_VERSION,\n build_type: global.LMV_BUILD_TYPE\n };\n\n //Kick off with a viewer start event\n var startEvent = {\n category: \"viewer_start\",\n touch: this.environmentInfo.touch,\n env: this.environmentInfo.env,\n referer: this.environmentInfo.referer,\n version: this.environmentInfo.version,\n build_type: this.environmentInfo.build_type\n };\n this.track(startEvent);\n\n var _this = this;\n this.interval = setInterval(function () {\n _this.reportRuntimeStats();\n }, 60000);\n};\n\n/**\n * Stop the runtime stats reporting every min.\n */\nLogger.prototype.shutdown = function () {\n clearInterval(this.interval);\n this.interval = undefined;\n};\n\n\n/**\n * Track the user inputted entry by appending additional info \"timestamp\", \"sessionId\"\n * @param {object} [entry] - User object to define the track object, \n e.g. {\n category : \"load_document\",\n urn: \"xyz\"\n } \n */\nLogger.prototype.track = function (entry) {\n\n this.updateRuntimeStats(entry);\n\n if ((0,_file_loaders_net_endpoints__WEBPACK_IMPORTED_MODULE_1__.isOffline)() || !this.sessionId) {\n return;\n }\n\n if (this.callback) {\n\n entry.timestamp = Date.now();\n entry.sessionId = this.sessionId;\n\n this.callback(entry);\n }\n\n if ((entry === null || entry === void 0 ? void 0 : entry.category) === 'error') {\n trackError('viewer.error.tracked', entry);\n }\n};\n\nLogger.prototype.updateRuntimeStats = function (entry) {\n if (Object.prototype.hasOwnProperty.call(entry, 'aggregate')) {\n switch (entry.aggregate) {\n case 'count':\n if (this.runtimeStats[entry.name] > 0) {\n this.runtimeStats[entry.name]++;\n } else {\n this.runtimeStats[entry.name] = 1;\n }\n this.runtimeStats._nonempty = true;\n break;\n case 'last':\n this.runtimeStats[entry.name] = entry.value;\n this.runtimeStats._nonempty = true;\n break;\n default:\n this.warn('unknown log aggregate type');\n }\n }\n};\n\nLogger.prototype.reportRuntimeStats = function () {\n if (this.runtimeStats._nonempty) {\n delete this.runtimeStats._nonempty;\n\n this.runtimeStats.category = 'misc_stats';\n this.track(this.runtimeStats);\n this.runtimeStats = {};\n }\n};\n\nLogger.prototype.setLevel = function (level) {\n if (this.level === level)\n return;\n\n this.level = level;\n\n // Bind to console\n this.debug = level >= LogLevels.DEBUG ? console.log : consoleNothing;\n this.log = level >= LogLevels.LOG ? console.log : consoleNothing;\n this.info = level >= LogLevels.INFO ? console.info : consoleNothing;\n this.warn = level >= LogLevels.WARNING ? console.warn : consoleNothing;\n this.error = level >= LogLevels.ERROR ? this._reportError : consoleNothing;\n};\n\n\n/**\n * Reports an error to the browser console and to the logger's callback.\n * Invoked by developers when method `logger.error()` is used. \n * Forwards the arguments directly into `console.error()`. \n * @private\n */\nLogger.prototype._reportError = function () {\n console.error.apply(console, arguments);\n\n const msg = Array.prototype.slice.call(arguments).join(' ');\n if (this.callback) {\n this.callback({ category: 'error', message: msg });\n }\n\n trackError('viewer.error.logged', msg);\n};\n\nfunction trackError(name, content) {\n let value;\n if (typeof content === 'string') {\n value = {\n message: content\n };\n } else if (typeof content === 'object') {\n value = content;\n }\n _analytics__WEBPACK_IMPORTED_MODULE_2__.analytics.track(name, value);\n}\n\n/**\n * @private\n */\nfunction getReferer() {\n // Wrapping href retrieval due to Fortify complains\n if (typeof window !== 'undefined') {\n return encodeURI(_window.location.href);\n }\n return '';\n}\n\n\n\n/**\n * Swallows log/debug/info/warn/error calls when the logLevel disallows it.\n * @private\n */\nfunction consoleNothing() {\n\n}\n\n\nlet logger = new Logger();\n\nfunction setLogger(l) {\n logger = l;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbG9nZ2VyL0xvZ2dlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNxRDtBQUNhO0FBQ3pCOztBQUV6QyxNQUFNSyxNQUFNLEdBQUdKLGtEQUFTLENBQUMsQ0FBQztBQUMxQixNQUFNSyxPQUFPLEdBQUdELE1BQU07O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNRSxTQUFTLEdBQUc7RUFDckJDLEtBQUssRUFBRyxDQUFDO0VBQ1RDLEdBQUcsRUFBRyxDQUFDO0VBQ1BDLElBQUksRUFBRyxDQUFDO0VBQ1JDLE9BQU8sRUFBRyxDQUFDO0VBQ1hDLEtBQUssRUFBRyxDQUFDO0VBQ1RDLElBQUksRUFBRztBQUNYLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBTUEsQ0FBQSxFQUFHO0VBQ3JCLElBQUksQ0FBQ0MsWUFBWSxHQUFHLENBQUMsQ0FBQztFQUN0QixJQUFJLENBQUNDLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDZixJQUFJLENBQUNDLFFBQVEsQ0FBQ1YsU0FBUyxDQUFDSyxLQUFLLENBQUM7RUFDOUIsSUFBSSxDQUFDTSxZQUFZLEdBQUcsSUFBSSxDQUFDQSxZQUFZLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQUwsTUFBTSxDQUFDTSxTQUFTLENBQUNDLFVBQVUsR0FBRyxVQUFTQyxPQUFPLEVBQUU7O0VBRTVDLElBQUlBLE9BQU8sQ0FBQ0MsYUFBYTtFQUNyQixJQUFJLENBQUNDLFFBQVEsR0FBR0YsT0FBTyxDQUFDQyxhQUFhOztFQUV6QyxJQUFJLENBQUNFLFNBQVMsR0FBR0gsT0FBTyxDQUFDRyxTQUFTO0VBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUNBLFNBQVMsRUFBRTtJQUNqQixJQUFJQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFO0lBQ3pCLElBQUksQ0FBQ0QsU0FBUyxHQUFHRyxVQUFVLENBQUMsQ0FBRUMsSUFBSSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBSSxDQUFDLElBQUksRUFBRSxHQUFHSixHQUFHLENBQUNLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN0Rjs7RUFFQTtFQUNBLElBQUksT0FBT1QsT0FBTyxDQUFDVSxRQUFRLEtBQUssUUFBUSxFQUFFO0lBQ3RDLElBQUksQ0FBQ2YsUUFBUSxDQUFDSyxPQUFPLENBQUNVLFFBQVEsQ0FBQztFQUNuQzs7RUFFQSxJQUFJLENBQUNDLGVBQWUsR0FBRztJQUNuQkMsS0FBSyxFQUFFbEMsc0RBQWEsQ0FBQyxDQUFDO0lBQ3RCbUMsR0FBRyxFQUFFaEMsbUVBQU0sQ0FBQyxDQUFDO0lBQ2JpQyxPQUFPLEVBQUVDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JCQyxPQUFPLEVBQUVqQyxNQUFNLENBQUNrQyxrQkFBa0I7SUFDbENDLFVBQVUsRUFBRW5DLE1BQU0sQ0FBQ29DO0VBQ3ZCLENBQUM7O0VBRUQ7RUFDQSxJQUFJQyxVQUFVLEdBQUc7SUFDYkMsUUFBUSxFQUFFLGNBQWM7SUFDeEJULEtBQUssRUFBRSxJQUFJLENBQUNELGVBQWUsQ0FBQ0MsS0FBSztJQUNqQ0MsR0FBRyxFQUFFLElBQUksQ0FBQ0YsZUFBZSxDQUFDRSxHQUFHO0lBQzdCQyxPQUFPLEVBQUUsSUFBSSxDQUFDSCxlQUFlLENBQUNHLE9BQU87SUFDckNFLE9BQU8sRUFBRSxJQUFJLENBQUNMLGVBQWUsQ0FBQ0ssT0FBTztJQUNyQ0UsVUFBVSxFQUFFLElBQUksQ0FBQ1AsZUFBZSxDQUFDTztFQUNyQyxDQUFDO0VBQ0QsSUFBSSxDQUFDSSxLQUFLLENBQUNGLFVBQVUsQ0FBQzs7RUFFdEIsSUFBSUcsS0FBSyxHQUFHLElBQUk7RUFDaEIsSUFBSSxDQUFDQyxRQUFRLEdBQUdDLFdBQVcsQ0FBQyxZQUFXO0lBQ25DRixLQUFLLENBQUNHLGtCQUFrQixDQUFDLENBQUM7RUFDOUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUNiLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0FsQyxNQUFNLENBQUNNLFNBQVMsQ0FBQzZCLFFBQVEsR0FBRyxZQUFXO0VBQ25DQyxhQUFhLENBQUMsSUFBSSxDQUFDSixRQUFRLENBQUM7RUFDNUIsSUFBSSxDQUFDQSxRQUFRLEdBQUdLLFNBQVM7QUFDN0IsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBckMsTUFBTSxDQUFDTSxTQUFTLENBQUN3QixLQUFLLEdBQUcsVUFBVVEsS0FBSyxFQUFFOztFQUV0QyxJQUFJLENBQUNDLGtCQUFrQixDQUFDRCxLQUFLLENBQUM7O0VBRTlCLElBQUlsRCxzRUFBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ3VCLFNBQVMsRUFBRTtJQUNoQztFQUNKOztFQUVBLElBQUksSUFBSSxDQUFDRCxRQUFRLEVBQUU7O0lBRWY0QixLQUFLLENBQUNFLFNBQVMsR0FBRzNCLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUM7SUFDNUIwQixLQUFLLENBQUMzQixTQUFTLEdBQUcsSUFBSSxDQUFDQSxTQUFTOztJQUVoQyxJQUFJLENBQUNELFFBQVEsQ0FBQzRCLEtBQUssQ0FBQztFQUN4Qjs7RUFFQSxJQUFJLENBQUFBLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFVCxRQUFRLE1BQUssT0FBTyxFQUFFO0lBQzdCWSxVQUFVLENBQUMsc0JBQXNCLEVBQUVILEtBQUssQ0FBQztFQUM3QztBQUNKLENBQUM7O0FBRUR0QyxNQUFNLENBQUNNLFNBQVMsQ0FBQ2lDLGtCQUFrQixHQUFHLFVBQVNELEtBQUssRUFBRTtFQUNsRCxJQUFJSSxNQUFNLENBQUNwQyxTQUFTLENBQUNxQyxjQUFjLENBQUNDLElBQUksQ0FBQ04sS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFO0lBQzFELFFBQVFBLEtBQUssQ0FBQ08sU0FBUztNQUNuQixLQUFLLE9BQU87UUFDUixJQUFJLElBQUksQ0FBQzVDLFlBQVksQ0FBQ3FDLEtBQUssQ0FBQ1EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ25DLElBQUksQ0FBQzdDLFlBQVksQ0FBQ3FDLEtBQUssQ0FBQ1EsSUFBSSxDQUFDLEVBQUU7UUFDbkMsQ0FBQyxNQUFNO1VBQ0gsSUFBSSxDQUFDN0MsWUFBWSxDQUFDcUMsS0FBSyxDQUFDUSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JDO1FBQ0EsSUFBSSxDQUFDN0MsWUFBWSxDQUFDOEMsU0FBUyxHQUFHLElBQUk7UUFDbEM7TUFDSixLQUFLLE1BQU07UUFDUCxJQUFJLENBQUM5QyxZQUFZLENBQUNxQyxLQUFLLENBQUNRLElBQUksQ0FBQyxHQUFHUixLQUFLLENBQUNVLEtBQUs7UUFDM0MsSUFBSSxDQUFDL0MsWUFBWSxDQUFDOEMsU0FBUyxHQUFHLElBQUk7UUFDbEM7TUFDSjtRQUNJLElBQUksQ0FBQ0UsSUFBSSxDQUFDLDRCQUE0QixDQUFDO0lBQy9DO0VBQ0o7QUFDSixDQUFDOztBQUVEakQsTUFBTSxDQUFDTSxTQUFTLENBQUM0QixrQkFBa0IsR0FBRyxZQUFXO0VBQzdDLElBQUksSUFBSSxDQUFDakMsWUFBWSxDQUFDOEMsU0FBUyxFQUFFO0lBQzdCLE9BQU8sSUFBSSxDQUFDOUMsWUFBWSxDQUFDOEMsU0FBUzs7SUFFbEMsSUFBSSxDQUFDOUMsWUFBWSxDQUFDNEIsUUFBUSxHQUFHLFlBQVk7SUFDekMsSUFBSSxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDN0IsWUFBWSxDQUFDO0lBQzdCLElBQUksQ0FBQ0EsWUFBWSxHQUFHLENBQUMsQ0FBQztFQUMxQjtBQUNKLENBQUM7O0FBRURELE1BQU0sQ0FBQ00sU0FBUyxDQUFDSCxRQUFRLEdBQUcsVUFBU0QsS0FBSyxFQUFFO0VBQ3hDLElBQUksSUFBSSxDQUFDQSxLQUFLLEtBQUtBLEtBQUs7RUFDcEI7O0VBRUosSUFBSSxDQUFDQSxLQUFLLEdBQUdBLEtBQUs7O0VBRWxCO0VBQ0EsSUFBSSxDQUFDZ0QsS0FBSyxHQUFHaEQsS0FBSyxJQUFJVCxTQUFTLENBQUNDLEtBQUssR0FBS3lELE9BQU8sQ0FBQ0MsR0FBRyxHQUFJQyxjQUFjO0VBQ3ZFLElBQUksQ0FBQ0QsR0FBRyxHQUFLbEQsS0FBSyxJQUFJVCxTQUFTLENBQUNFLEdBQUcsR0FBT3dELE9BQU8sQ0FBQ0MsR0FBRyxHQUFJQyxjQUFjO0VBQ3ZFLElBQUksQ0FBQ0MsSUFBSSxHQUFJcEQsS0FBSyxJQUFJVCxTQUFTLENBQUNHLElBQUksR0FBTXVELE9BQU8sQ0FBQ0csSUFBSSxHQUFHRCxjQUFjO0VBQ3ZFLElBQUksQ0FBQ0osSUFBSSxHQUFJL0MsS0FBSyxJQUFJVCxTQUFTLENBQUNJLE9BQU8sR0FBR3NELE9BQU8sQ0FBQ0YsSUFBSSxHQUFHSSxjQUFjO0VBQ3ZFLElBQUksQ0FBQ0UsS0FBSyxHQUFHckQsS0FBSyxJQUFJVCxTQUFTLENBQUNLLEtBQUssR0FBSyxJQUFJLENBQUNNLFlBQVksR0FBR2lELGNBQWM7QUFDaEYsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FyRCxNQUFNLENBQUNNLFNBQVMsQ0FBQ0YsWUFBWSxHQUFHLFlBQVc7RUFDdkMrQyxPQUFPLENBQUNJLEtBQUssQ0FBQ0MsS0FBSyxDQUFDTCxPQUFPLEVBQUVNLFNBQVMsQ0FBQzs7RUFFdkMsTUFBTUMsR0FBRyxHQUFHQyxLQUFLLENBQUNyRCxTQUFTLENBQUNzRCxLQUFLLENBQUNoQixJQUFJLENBQUNhLFNBQVMsQ0FBQyxDQUFDSSxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQzNELElBQUksSUFBSSxDQUFDbkQsUUFBUSxFQUFFO0lBQ2YsSUFBSSxDQUFDQSxRQUFRLENBQUMsRUFBRW1CLFFBQVEsRUFBRSxPQUFPLEVBQUVpQyxPQUFPLEVBQUVKLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEQ7O0VBRUFqQixVQUFVLENBQUMscUJBQXFCLEVBQUVpQixHQUFHLENBQUM7QUFDMUMsQ0FBQzs7QUFFRCxTQUFTakIsVUFBVUEsQ0FBQ0ssSUFBSSxFQUFFaUIsT0FBTyxFQUFDO0VBQzlCLElBQUlmLEtBQUs7RUFDVCxJQUFJLE9BQU9lLE9BQU8sS0FBSyxRQUFRLEVBQUU7SUFDN0JmLEtBQUssR0FBRztNQUNKYyxPQUFPLEVBQUVDO0lBQ2IsQ0FBQztFQUNMLENBQUMsTUFBTSxJQUFJLE9BQU9BLE9BQU8sS0FBSyxRQUFRLEVBQUU7SUFDcENmLEtBQUssR0FBR2UsT0FBTztFQUNuQjtFQUNBekUsaURBQVMsQ0FBQ3dDLEtBQUssQ0FBQ2dCLElBQUksRUFBRUUsS0FBSyxDQUFDO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVN6QixVQUFVQSxDQUFBLEVBQUU7RUFDakI7RUFDQSxJQUFJLE9BQU95QyxNQUFNLEtBQUssV0FBVyxFQUFFO0lBQy9CLE9BQU9DLFNBQVMsQ0FBQ3pFLE9BQU8sQ0FBQzBFLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDO0VBQzNDO0VBQ0EsT0FBTyxFQUFFO0FBQ2I7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNkLGNBQWNBLENBQUEsRUFBRzs7QUFFMUI7OztBQUdPLElBQUllLE1BQU0sR0FBRyxJQUFJcEUsTUFBTSxDQUFDLENBQUM7O0FBRXpCLFNBQVNxRSxTQUFTQSxDQUFDQyxDQUFDLEVBQUU7RUFDekJGLE1BQU0sR0FBR0UsQ0FBQztBQUNkIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2xvZ2dlci9Mb2dnZXIuanM/NDU5YSJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IGlzVG91Y2hEZXZpY2UsIGdldEdsb2JhbCB9IGZyb20gXCIuLi9jb21wYXRcIjtcbmltcG9ydCB7IGlzT2ZmbGluZSwgZ2V0RW52IH0gZnJvbSBcIi4uL2ZpbGUtbG9hZGVycy9uZXQvZW5kcG9pbnRzXCI7XG5pbXBvcnQgeyBhbmFseXRpY3MgfSBmcm9tICcuLi9hbmFseXRpY3MnO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmNvbnN0IF93aW5kb3cgPSBnbG9iYWw7XG5cbi8qKlxuICogTG9nZ2luZyBsZXZlbHMuIEhpZ2hlciBudW1iZXIgbWVhbnMgbW9yZSB2ZXJib3NlIGxvZ3MsXG4gKiBmb3IgZXhhbXBsZSwgd2l0aCBsZXZlbCAzLCBgaW5mb2AsIGB3YXJuYCwgb3IgYGVycm9yYFxuICogbG9ncyB3aWxsIHNob3cgdXAgaW4gdGhlIGNvbnNvbGUgYnV0IGBkZWJ1Z2AgYW5kIGBsb2dgIHdvbid0LlxuICpcbiAqIFNlbWFudGljcyBvZiBzcGVjaWZpYyBsZXZlbHM6XG4gKiAgLSBkZWJ1ZzogbG93LWxldmVsIGRlYnVnZ2luZyBsb2dzXG4gKiAgLSBsb2c6IGNvbW1vbiwgaGlnaGVyLWxldmVsIGRlYnVnZ2luZyBsb2dzXG4gKiAgLSBpbmZvOiBoZWxwZnVsIHJ1bnRpbWUgaW5mb3JtYXRpb24gKGV2ZW4gZm9yIHN0YWcvcHJvZCBlbnZpcm9ubWVudHMpXG4gKiAgLSB3YXJuOiBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzaXR1YXRpb25zOyBoYW5kbGVkIGV4Y2VwdGlvbnNcbiAqICAtIGVycm9yOiBkZWZpbml0ZWx5IHByb2JsZW1hdGljIHNpdHVhdGlvbnM7IHVuaGFuZGxlZCBleGNlcHRpb25zXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMb2dMZXZlbHMgPSB7XG4gICAgREVCVUcgOiA1LFxuICAgIExPRyA6IDQsXG4gICAgSU5GTyA6IDMsXG4gICAgV0FSTklORyA6IDIsXG4gICAgRVJST1IgOiAxLFxuICAgIE5PTkUgOiAwXG59O1xuXG5cbi8qKlxuICogTG9nZ2VyIGNsYXNzLiBcbiAqIERlcGVuZGluZyBvbiBvcHRpb25zLmxvZ0xldmVsIHNldHRpbmcgaW4gaW5pdGlsaXplIGZ1bmN0aW9uLCBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyB3b3VsZCBiZSBhY3RpdmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dnZXIoKSB7XG4gICAgdGhpcy5ydW50aW1lU3RhdHMgPSB7fTtcbiAgICB0aGlzLmxldmVsID0gLTE7XG4gICAgdGhpcy5zZXRMZXZlbChMb2dMZXZlbHMuRVJST1IpO1xuICAgIHRoaXMuX3JlcG9ydEVycm9yID0gdGhpcy5fcmVwb3J0RXJyb3IuYmluZCh0aGlzKTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIExvZ2dlciBvYmplY3Qgd2l0aCBvcHRpb25zLiBcbiAqIFxuICogQHBhcmFtIHtvYmplY3R9ICAgW29wdGlvbnNdIC0gT3B0aW9ucyBvYmplY3QgdG8gY29uZmlndXJlIHRoZSBMb2dnZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbb3B0aW9ucy5ldmVudENhbGxiYWNrXSAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHVzZWQgZm9yIHByb2Nlc3NpbmcgdGhlIGxvZyBlbnRyeSB3aXRoIHByb3BlcnRpZXMgbGlrZSBcImNhdGVnb3J5XCIsIFwidGltZXN0YW1wXCIsIGV0Yy4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGNhbiBiZSB1c2VkIGFzIGZvciBhbmFseXRpY3MgdHJhY2tpbmcgYnkgZmlsdGVyaW5nIGFuZCBsaXN0ZW5pbmcgdG8gc3BlY2lmaWMgY2F0ZWdvcnkgdXNlcnMgYXJlIGludGVyZXN0ZWQuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXhwZWN0ZWQgYXJndW1lbnQgaXMgdGhlIHVzZXIgc3VwcGxpZWQgZW50cnkgb2JqZWN0IGluc3RydW1lbnRlZCB3aXRoIFwidGltZXN0YW1wXCIgYW5kIFwic2Vzc2lvbklkXCIgcHJvcGVydGllcy4gXG4gKiBAcGFyYW0ge3N0cmluZ30gICBbb3B0aW9ucy5zZXNzaW9uSWRdIC0gQW4gb3B0aW9uYWwgaWQgZm9yIGVhY2ggYnJvd3NlciBzZXNzaW9uLiBEZWZhdWx0IGdldHMgZ2VuZXJhdGVkIGJhc2VkIG9uIGN1cnJlbnQgdGltZSBzdGFtcCBpZiBub3Qgc3BlY2lmaWVkLiBcbiAqIEBwYXJhbSB7bnVtYmVyfSAgIFtvcHRpb25zLmxvZ0xldmVsXSAtIEFuIG9wdGlvbmFsIGxldmVsIHRvIGRlZmluZSB0aGUgbG9nIGxldmVsLiBEZWZhdWx0IGlzIExvZ0xldmVscy5FUlJPUiBpZiBub3Qgc3BlY2lmaWVkLlxuICpcbiAqL1xuXG5Mb2dnZXIucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cbiAgICBpZiAob3B0aW9ucy5ldmVudENhbGxiYWNrKVxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5ldmVudENhbGxiYWNrO1xuXG4gICAgdGhpcy5zZXNzaW9uSWQgPSBvcHRpb25zLnNlc3Npb25JZDtcbiAgICBpZiAoIXRoaXMuc2Vzc2lvbklkKSB7XG4gICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpICsgXCJcIjtcbiAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBwYXJzZUZsb2F0KCgoTWF0aC5yYW5kb20oKSAqIDEwMDAwKSB8IDApICsgXCJcIiArIG5vdy5zdWJzdHJpbmcoNCkpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgbG9nIGxldmVsIGlzIHBhc3NlZCBpblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2dMZXZlbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5zZXRMZXZlbChvcHRpb25zLmxvZ0xldmVsKTtcbiAgICB9XG5cbiAgICB0aGlzLmVudmlyb25tZW50SW5mbyA9IHtcbiAgICAgICAgdG91Y2g6IGlzVG91Y2hEZXZpY2UoKSxcbiAgICAgICAgZW52OiBnZXRFbnYoKSxcbiAgICAgICAgcmVmZXJlcjogZ2V0UmVmZXJlcigpLFxuICAgICAgICB2ZXJzaW9uOiBnbG9iYWwuTE1WX1ZJRVdFUl9WRVJTSU9OLFxuICAgICAgICBidWlsZF90eXBlOiBnbG9iYWwuTE1WX0JVSUxEX1RZUEVcbiAgICB9O1xuXG4gICAgLy9LaWNrIG9mZiB3aXRoIGEgdmlld2VyIHN0YXJ0IGV2ZW50XG4gICAgdmFyIHN0YXJ0RXZlbnQgPSB7XG4gICAgICAgIGNhdGVnb3J5OiBcInZpZXdlcl9zdGFydFwiLFxuICAgICAgICB0b3VjaDogdGhpcy5lbnZpcm9ubWVudEluZm8udG91Y2gsXG4gICAgICAgIGVudjogdGhpcy5lbnZpcm9ubWVudEluZm8uZW52LFxuICAgICAgICByZWZlcmVyOiB0aGlzLmVudmlyb25tZW50SW5mby5yZWZlcmVyLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLmVudmlyb25tZW50SW5mby52ZXJzaW9uLFxuICAgICAgICBidWlsZF90eXBlOiB0aGlzLmVudmlyb25tZW50SW5mby5idWlsZF90eXBlXG4gICAgfTtcbiAgICB0aGlzLnRyYWNrKHN0YXJ0RXZlbnQpO1xuXG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgIF90aGlzLnJlcG9ydFJ1bnRpbWVTdGF0cygpO1xuICAgIH0sIDYwMDAwKTtcbn07XG5cbi8qKlxuICogU3RvcCB0aGUgcnVudGltZSBzdGF0cyByZXBvcnRpbmcgZXZlcnkgbWluLlxuICovXG5Mb2dnZXIucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICB0aGlzLmludGVydmFsID0gdW5kZWZpbmVkO1xufTtcblxuXG4vKipcbiAqIFRyYWNrIHRoZSB1c2VyIGlucHV0dGVkIGVudHJ5IGJ5IGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm8gXCJ0aW1lc3RhbXBcIiwgXCJzZXNzaW9uSWRcIlxuICogQHBhcmFtIHtvYmplY3R9IFtlbnRyeV0gLSBVc2VyIG9iamVjdCB0byBkZWZpbmUgdGhlIHRyYWNrIG9iamVjdCwgXG4gICAgICAgIGUuZy4ge1xuICAgICAgICAgICAgY2F0ZWdvcnkgOiBcImxvYWRfZG9jdW1lbnRcIixcbiAgICAgICAgICAgIHVybjogXCJ4eXpcIlxuICAgICAgICB9ICAgXG4gKi9cbkxvZ2dlci5wcm90b3R5cGUudHJhY2sgPSBmdW5jdGlvbiAoZW50cnkpIHtcblxuICAgIHRoaXMudXBkYXRlUnVudGltZVN0YXRzKGVudHJ5KTtcblxuICAgIGlmIChpc09mZmxpbmUoKSB8fCAhdGhpcy5zZXNzaW9uSWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gXG5cbiAgICBpZiAodGhpcy5jYWxsYmFjaykge1xuXG4gICAgICAgIGVudHJ5LnRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIGVudHJ5LnNlc3Npb25JZCA9IHRoaXMuc2Vzc2lvbklkO1xuXG4gICAgICAgIHRoaXMuY2FsbGJhY2soZW50cnkpO1xuICAgIH1cblxuICAgIGlmIChlbnRyeT8uY2F0ZWdvcnkgPT09ICdlcnJvcicpIHtcbiAgICAgICAgdHJhY2tFcnJvcigndmlld2VyLmVycm9yLnRyYWNrZWQnLCBlbnRyeSk7XG4gICAgfVxufTtcblxuTG9nZ2VyLnByb3RvdHlwZS51cGRhdGVSdW50aW1lU3RhdHMgPSBmdW5jdGlvbihlbnRyeSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZW50cnksICdhZ2dyZWdhdGUnKSkge1xuICAgICAgICBzd2l0Y2ggKGVudHJ5LmFnZ3JlZ2F0ZSkge1xuICAgICAgICAgICAgY2FzZSAnY291bnQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJ1bnRpbWVTdGF0c1tlbnRyeS5uYW1lXSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW50aW1lU3RhdHNbZW50cnkubmFtZV0rKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bnRpbWVTdGF0c1tlbnRyeS5uYW1lXSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucnVudGltZVN0YXRzLl9ub25lbXB0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsYXN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bnRpbWVTdGF0c1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucnVudGltZVN0YXRzLl9ub25lbXB0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMud2FybigndW5rbm93biBsb2cgYWdncmVnYXRlIHR5cGUnKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkxvZ2dlci5wcm90b3R5cGUucmVwb3J0UnVudGltZVN0YXRzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMucnVudGltZVN0YXRzLl9ub25lbXB0eSkge1xuICAgICAgICBkZWxldGUgdGhpcy5ydW50aW1lU3RhdHMuX25vbmVtcHR5O1xuXG4gICAgICAgIHRoaXMucnVudGltZVN0YXRzLmNhdGVnb3J5ID0gJ21pc2Nfc3RhdHMnO1xuICAgICAgICB0aGlzLnRyYWNrKHRoaXMucnVudGltZVN0YXRzKTtcbiAgICAgICAgdGhpcy5ydW50aW1lU3RhdHMgPSB7fTtcbiAgICB9XG59O1xuXG5Mb2dnZXIucHJvdG90eXBlLnNldExldmVsID0gZnVuY3Rpb24obGV2ZWwpIHtcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gbGV2ZWwpXG4gICAgICAgIHJldHVybjtcblxuICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcblxuICAgIC8vIEJpbmQgdG8gY29uc29sZVxuICAgIHRoaXMuZGVidWcgPSBsZXZlbCA+PSBMb2dMZXZlbHMuREVCVUcgICA/IGNvbnNvbGUubG9nICA6IGNvbnNvbGVOb3RoaW5nO1xuICAgIHRoaXMubG9nICAgPSBsZXZlbCA+PSBMb2dMZXZlbHMuTE9HICAgICA/IGNvbnNvbGUubG9nICA6IGNvbnNvbGVOb3RoaW5nO1xuICAgIHRoaXMuaW5mbyAgPSBsZXZlbCA+PSBMb2dMZXZlbHMuSU5GTyAgICA/IGNvbnNvbGUuaW5mbyA6IGNvbnNvbGVOb3RoaW5nO1xuICAgIHRoaXMud2FybiAgPSBsZXZlbCA+PSBMb2dMZXZlbHMuV0FSTklORyA/IGNvbnNvbGUud2FybiA6IGNvbnNvbGVOb3RoaW5nO1xuICAgIHRoaXMuZXJyb3IgPSBsZXZlbCA+PSBMb2dMZXZlbHMuRVJST1IgICA/IHRoaXMuX3JlcG9ydEVycm9yIDogY29uc29sZU5vdGhpbmc7XG59O1xuXG5cbi8qKlxuICogUmVwb3J0cyBhbiBlcnJvciB0byB0aGUgYnJvd3NlciBjb25zb2xlIGFuZCB0byB0aGUgbG9nZ2VyJ3MgY2FsbGJhY2suXG4gKiBJbnZva2VkIGJ5IGRldmVsb3BlcnMgd2hlbiBtZXRob2QgYGxvZ2dlci5lcnJvcigpYCBpcyB1c2VkLiBcbiAqIEZvcndhcmRzIHRoZSBhcmd1bWVudHMgZGlyZWN0bHkgaW50byBgY29uc29sZS5lcnJvcigpYC4gXG4gKiBAcHJpdmF0ZVxuICovXG5Mb2dnZXIucHJvdG90eXBlLl9yZXBvcnRFcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKTtcblxuICAgIGNvbnN0IG1zZyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbignICcpO1xuICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2soeyBjYXRlZ29yeTogJ2Vycm9yJywgbWVzc2FnZTogbXNnIH0pO1xuICAgIH1cblxuICAgIHRyYWNrRXJyb3IoJ3ZpZXdlci5lcnJvci5sb2dnZWQnLCBtc2cpO1xufTtcblxuZnVuY3Rpb24gdHJhY2tFcnJvcihuYW1lLCBjb250ZW50KXtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZSA9IGNvbnRlbnQ7XG4gICAgfVxuICAgIGFuYWx5dGljcy50cmFjayhuYW1lLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0UmVmZXJlcigpe1xuICAgIC8vIFdyYXBwaW5nIGhyZWYgcmV0cmlldmFsIGR1ZSB0byBGb3J0aWZ5IGNvbXBsYWluc1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZW5jb2RlVVJJKF93aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cblxuXG5cbi8qKlxuICogU3dhbGxvd3MgbG9nL2RlYnVnL2luZm8vd2Fybi9lcnJvciBjYWxscyB3aGVuIHRoZSBsb2dMZXZlbCBkaXNhbGxvd3MgaXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb25zb2xlTm90aGluZygpIHtcblxufVxuXG5cbmV4cG9ydCBsZXQgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nZ2VyKGwpIHtcbiAgICBsb2dnZXIgPSBsO1xufVxuIl0sIm5hbWVzIjpbImlzVG91Y2hEZXZpY2UiLCJnZXRHbG9iYWwiLCJpc09mZmxpbmUiLCJnZXRFbnYiLCJhbmFseXRpY3MiLCJnbG9iYWwiLCJfd2luZG93IiwiTG9nTGV2ZWxzIiwiREVCVUciLCJMT0ciLCJJTkZPIiwiV0FSTklORyIsIkVSUk9SIiwiTk9ORSIsIkxvZ2dlciIsInJ1bnRpbWVTdGF0cyIsImxldmVsIiwic2V0TGV2ZWwiLCJfcmVwb3J0RXJyb3IiLCJiaW5kIiwicHJvdG90eXBlIiwiaW5pdGlhbGl6ZSIsIm9wdGlvbnMiLCJldmVudENhbGxiYWNrIiwiY2FsbGJhY2siLCJzZXNzaW9uSWQiLCJub3ciLCJEYXRlIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJyYW5kb20iLCJzdWJzdHJpbmciLCJsb2dMZXZlbCIsImVudmlyb25tZW50SW5mbyIsInRvdWNoIiwiZW52IiwicmVmZXJlciIsImdldFJlZmVyZXIiLCJ2ZXJzaW9uIiwiTE1WX1ZJRVdFUl9WRVJTSU9OIiwiYnVpbGRfdHlwZSIsIkxNVl9CVUlMRF9UWVBFIiwic3RhcnRFdmVudCIsImNhdGVnb3J5IiwidHJhY2siLCJfdGhpcyIsImludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJyZXBvcnRSdW50aW1lU3RhdHMiLCJzaHV0ZG93biIsImNsZWFySW50ZXJ2YWwiLCJ1bmRlZmluZWQiLCJlbnRyeSIsInVwZGF0ZVJ1bnRpbWVTdGF0cyIsInRpbWVzdGFtcCIsInRyYWNrRXJyb3IiLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhZ2dyZWdhdGUiLCJuYW1lIiwiX25vbmVtcHR5IiwidmFsdWUiLCJ3YXJuIiwiZGVidWciLCJjb25zb2xlIiwibG9nIiwiY29uc29sZU5vdGhpbmciLCJpbmZvIiwiZXJyb3IiLCJhcHBseSIsImFyZ3VtZW50cyIsIm1zZyIsIkFycmF5Iiwic2xpY2UiLCJqb2luIiwibWVzc2FnZSIsImNvbnRlbnQiLCJ3aW5kb3ciLCJlbmNvZGVVUkkiLCJsb2NhdGlvbiIsImhyZWYiLCJsb2dnZXIiLCJzZXRMb2dnZXIiLCJsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/logger/Logger.js\n"); /***/ }), /***/ "./src/wgs/scene/BVHBuilder.js": /*!*************************************!*\ !*** ./src/wgs/scene/BVHBuilder.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BVHBuilder: () => (/* binding */ BVHBuilder),\n/* harmony export */ NodeArray: () => (/* binding */ NodeArray)\n/* harmony export */ });\n/**\n * BVH definitions:\n *\n * BVH Node: if this was C (the only real programming language), it would go something like this,\n * but with better alignment.\n *\n * This is definition for \"fat\" nodes (for rasterization),\n * i.e. when inner nodes also contain primitives.\n * struct Node { byte/short/int offset\n * float worldBox[6]; //world box of the node node 0/0/0\n * int leftChildIndex; //pointer to left child node (right is left+1) 24/12/6\n * ushort primCount; //how many fragments are at this node 28/14/7\n * ushort flags; //bitfield of good stuff 30/15/7.5\n *\n * int primStart; //start of node's own primitives (fragments) list 32/16/8\n * };\n * => sizeof(Node) = 36 bytes\n\n * Definition for lean nodes (for ray casting): when a node is either inner node (just children, no primitives)\n * or leaf (just primitives, no children).\n * struct Node {\n * float worldBox[6]; //world box of the node\n * union {\n * int leftChildIndex; //pointer to left child node (right is left+1)\n * int primStart; //start of node's own primitives (fragments) list\n * };\n * ushort primCount; //how many fragments are at this node\n * ushort flags; //bitfield of good stuff\n * };\n * => sizeof(Node) = 32 bytes\n *\n * The class below encapsulates an array of such nodes using ArrayBuffer as backing store.\n *\n * @param {ArrayBuffer|number} initialData Initial content of the NodeArray, or initial allocation of empty nodes\n * @param {boolean} useLeanNode Use minimal node structure size. Currently this parameter must be set to false.\n * @constructor\n */\nfunction NodeArray(initialData, useLeanNode) {\n 'use strict';\n\n if (useLeanNode) {\n this.bytes_per_node = 32;\n } else {\n this.bytes_per_node = 36;\n }\n\n var initialCount;\n var initialBuffer;\n\n if (initialData instanceof ArrayBuffer) {\n initialCount = initialData.byteLength / this.bytes_per_node;\n initialBuffer = initialData;\n this.nodeCount = initialCount;\n } else\n {\n initialCount = initialData | 0;\n initialBuffer = new ArrayBuffer(this.bytes_per_node * initialCount);\n this.nodeCount = 0;\n }\n\n this.nodeCapacity = initialCount;\n this.nodesRaw = initialBuffer;\n\n this.is_lean_node = useLeanNode;\n this.node_stride = this.bytes_per_node / 4;\n this.node_stride_short = this.bytes_per_node / 2;\n\n //Allocate memory buffer for all tree nodes\n this.nodesF = new Float32Array(this.nodesRaw);\n this.nodesI = new Int32Array(this.nodesRaw);\n this.nodesS = new Uint16Array(this.nodesRaw);\n}\n\nNodeArray.prototype.setLeftChild = function (nodeidx, childidx) {\n this.nodesI[nodeidx * this.node_stride + 6] = childidx;\n};\nNodeArray.prototype.getLeftChild = function (nodeidx) {\n return this.nodesI[nodeidx * this.node_stride + 6];\n};\n\nNodeArray.prototype.setPrimStart = function (nodeidx, start) {\n if (this.is_lean_node)\n this.nodesI[nodeidx * this.node_stride + 6] = start;else\n\n this.nodesI[nodeidx * this.node_stride + 8] = start;\n};\nNodeArray.prototype.getPrimStart = function (nodeidx) {\n if (this.is_lean_node)\n return this.nodesI[nodeidx * this.node_stride + 6];else\n\n return this.nodesI[nodeidx * this.node_stride + 8];\n};\n\nNodeArray.prototype.setPrimCount = function (nodeidx, count) {\n this.nodesS[nodeidx * this.node_stride_short + 14] = count;\n};\nNodeArray.prototype.getPrimCount = function (nodeidx) {\n return this.nodesS[nodeidx * this.node_stride_short + 14];\n};\n\nNodeArray.prototype.setFlags = function (nodeidx, axis, isFirst, isTransparent) {\n this.nodesS[nodeidx * this.node_stride_short + 15] = isTransparent << 3 | isFirst << 2 | axis & 0x3;\n};\nNodeArray.prototype.getFlags=f unction (nodeidx) {\n return this.nodesS[nodeidx * this.node_stride_short + 15];\n};\n\nNodeArray.prototype.setBox0=f unction (nodeidx, src) {\n var off=n odeidx * this.node_stride;\n var dst=t his.nodesF;\n dst[off]=s rc[0];\n dst[off + 1]=s rc[1];\n dst[off + 2]=s rc[2];\n dst[off + 3]=s rc[3];\n dst[off + 4]=s rc[4];\n dst[off + 5]=s rc[5];\n};\nNodeArray.prototype.getBoxThree=f unction (nodeidx, dst) {\n var off=n odeidx * this.node_stride;\n var src=t his.nodesF;\n dst.min.x=s rc[off];\n dst.min.y=s rc[off + 1];\n dst.min.z=s rc[off + 2];\n dst.max.x=s rc[off + 3];\n dst.max.y=s rc[off + 4];\n dst.max.z=s rc[off + 5];\n};\nNodeArray.prototype.getBoxArray=f unction (nodeidx, dst, offset) {\n var off=n odeidx * this.node_stride;\n var src=t his.nodesF;\n offset=o ffset || 0;\n dst[0 + offset]=s rc[off];\n dst[1 + offset]=s rc[off + 1];\n dst[2 + offset]=s rc[off + 2];\n dst[3 + offset]=s rc[off + 3];\n dst[4 + offset]=s rc[off + 4];\n dst[5 + offset]=s rc[off + 5];\n};\nNodeArray.prototype.setBoxThree=f unction (nodeidx, src) {\n var off=n odeidx * this.node_stride;\n var dst=t his.nodesF;\n dst[off]=s rc.min.x;\n dst[off + 1]=s rc.min.y;\n dst[off + 2]=s rc.min.z;\n dst[off + 3]=s rc.max.x;\n dst[off + 4]=s rc.max.y;\n dst[off + 5]=s rc.max.z;\n};\n\n\n\n\nNodeArray.prototype.makeEmpty=f unction (nodeidx) {\n\n var off=n odeidx * this.node_stride;\n var dst=t his.nodesI;\n\n //No point to makeEmpty here, because the box gets set\n //directly when the node is initialized in bvh_subdivide.\n //box_make_empty(this.nodesF, off);\n\n //_this.setLeftChild(nodeidx,-1);\n dst[off + 6]=- 1;\n\n //both prim count and flags to 0\n dst[off + 7]=0 ;\n\n //_this.setPrimStart(nodeidx, -1);\n if (!this.is_lean_node)\n dst[off + 8]=- 1;\n\n};\n\nNodeArray.prototype.realloc=f unction (extraSize) {\n if (this.nodeCount + extraSize> this.nodeCapacity) {\n var nsz = 0 | this.nodeCapacity * 3 / 2;\n if (nsz < this.nodeCount + extraSize)\n nsz=t his.nodeCount + extraSize;\n\n var nnodes=n ew ArrayBuffer(nsz * this.bytes_per_node);\n var nnodesI=n ew Int32Array(nnodes);\n nnodesI.set(this.nodesI);\n\n this.nodeCapacity=n sz;\n this.nodesRaw=n nodes;\n this.nodesF=n ew Float32Array(nnodes);\n this.nodesI=n nodesI;\n this.nodesS=n ew Uint16Array(nnodes);\n }\n};\n\nNodeArray.prototype.nextNodes=f unction (howMany) {\n\n this.realloc(howMany);\n\n var res=t his.nodeCount;\n this.nodeCount +=h owMany;\n\n for (var i=0 ; i < howMany; i++) {\n this.makeEmpty(res + i);\n }\n\n return res;\n};\n\nNodeArray.prototype.getRawData=f unction () {\n return this.nodesRaw.slice(0, this.nodeCount * this.bytes_per_node);\n};\n\nvar POINT_STRIDE=3 ;\nvar BOX_EPSILON=1 e-5;\nvar BOX_SCALE_EPSILON=1 e-5;\nvar MAX_DEPTH=1 5; /* max tree depth */\nvar MAX_BINS=1 6;\n\n/**\n* Bounding Volume Hierarchy build algorithm.\n* Uses top down binning -- see \ "On fast Construction of SAH-based Bounding Volume Hierarchies\" by I.Wald\n* Ported from the C version here: https://git.autodesk.com/stanevt/t-ray/blob/master/render3d/t-ray/t-core/t-bvh.c\n* Optimized for JavaScript.\n*/\nvar BVHModule=f unction () {\n //There be dragons in this closure.\n\n \ "use strict\";\n\n\n /**\n * Utilities for manipulating bounding boxes stored\n * in external array (as sextuplets of float32)\n */\n\n\n function box_get_centroid(dst, dst_off, src, src_off) {\n dst[dst_off]=0 .5 * (src[src_off] + src[src_off + 3]);\n dst[dst_off + 1]=0 .5 * (src[src_off + 1] + src[src_off + 4]);\n dst[dst_off + 2]=0 .5 * (src[src_off + 2] + src[src_off + 5]);\n }\n\n function box_add_point_0(dst, src, src_off) {\n\n if (dst[0]> src[src_off]) dst[0] = src[src_off];\n if (dst[3] < src[src_off]) dst[3]=s rc[src_off];\n\n if (dst[1]> src[src_off + 1]) dst[1] = src[src_off + 1];\n if (dst[4] < src[src_off + 1]) dst[4]=s rc[src_off + 1];\n\n if (dst[2]> src[src_off + 2]) dst[2] = src[src_off + 2];\n if (dst[5] < src[src_off + 2]) dst[5]=s rc[src_off + 2];\n\n }\n\n function box_add_box_0(dst, src, src_off) {\n\n if (dst[0]> src[src_off]) dst[0] = src[src_off];\n if (dst[1] > src[src_off + 1]) dst[1] = src[src_off + 1];\n if (dst[2] > src[src_off + 2]) dst[2] = src[src_off + 2];\n\n if (dst[3] < src[src_off + 3]) dst[3]=s rc[src_off + 3];\n if (dst[4] < src[src_off + 4]) dst[4]=s rc[src_off + 4];\n if (dst[5] < src[src_off + 5]) dst[5]=s rc[src_off + 5];\n }\n\n function box_add_box_00(dst, src) {\n if (dst[0]> src[0]) dst[0] = src[0];\n if (dst[1] > src[1]) dst[1] = src[1];\n if (dst[2] > src[2]) dst[2] = src[2];\n\n if (dst[3] < src[3]) dst[3]=s rc[3];\n if (dst[4] < src[4]) dst[4]=s rc[4];\n if (dst[5] < src[5]) dst[5]=s rc[5];\n }\n\n function box_get_size(dst, dst_off, src, src_off) {\n for (var i=0 ; i < 3; i++) {\n dst[dst_off + i]=s rc[src_off + 3 + i] - src[src_off + i];\n }\n }\n\n //function box_copy(dst, dst_off, src, src_off) {\n // for (var i=0; i<6; i++) {\n // dst[dst_off+i]=s rc[src_off+i];\n // }\n //}\n\n // unwound version of box_copy\n function box_copy_00(dst, src) {\n dst[0]=s rc[0];\n dst[1]=s rc[1];\n dst[2]=s rc[2];\n dst[3]=s rc[3];\n dst[4]=s rc[4];\n dst[5]=s rc[5];\n }\n\n var dbl_max=I nfinity;\n\n //function box_make_empty(dst, dst_off) {\n // dst[dst_off]=d bl_max;\n // dst[dst_off+1]=d bl_max;\n // dst[dst_off+2]=d bl_max;\n // dst[dst_off+3]=- dbl_max;\n // dst[dst_off+4]=- dbl_max;\n // dst[dst_off+5]=- dbl_max;\n //}\n\n function box_make_empty_0(dst) {\n dst[0]=d bl_max;\n dst[1]=d bl_max;\n dst[2]=d bl_max;\n dst[3]=- dbl_max;\n dst[4]=- dbl_max;\n dst[5]=- dbl_max;\n }\n\n function box_area(src, src_off) {\n\n var dx=s rc[src_off + 3] - src[src_off];\n var dy=s rc[src_off + 4] - src[src_off + 1];\n var dz=s rc[src_off + 5] - src[src_off + 2];\n\n if (dx < 0 || dy < 0 || dz < 0)\n return 0;\n\n return 2.0 * (dx * dy + dy * dz + dz * dx);\n }\n\n function box_area_0(src) {\n\n var dx=s rc[3] - src[0];\n var dy=s rc[4] - src[1];\n var dz=s rc[5] - src[2];\n\n if (dx < 0 || dy < 0 || dz < 0)\n return 0;\n\n return 2.0 * (dx * dy + dy * dz + dz * dx);\n }\n\n\n\n\n\n function bvh_split_info() {\n this.vb_left=n ew Float32Array(6);\n this.vb_right=n ew Float32Array(6);\n this.cb_left=n ew Float32Array(6);\n this.cb_right=n ew Float32Array(6);\n this.num_left=0 ;\n this.best_split=- 1;\n this.best_cost=- 1;\n this.num_bins=- 1;\n }\n\n bvh_split_info.prototype.reset=f unction () {\n this.num_left=0 ;\n this.best_split=- 1;\n this.best_cost=- 1;\n this.num_bins=- 1;\n };\n\n\n function bvh_bin() {\n this.box_bbox=n ew Float32Array(6); // bbox of all primitive bboxes\n this.box_centroid=n ew Float32Array(6); // bbox of all primitive centroids\n this.num_prims=0 ; // number of primitives in the bin\n }\n\n bvh_bin.prototype.reset=f unction () {\n this.num_prims=0 ; // number of primitives in the bin\n box_make_empty_0(this.box_bbox);\n box_make_empty_0(this.box_centroid);\n };\n\n function accum_bin_info() {\n this.BL=n ew Float32Array(6);\n this.CL=n ew Float32Array(6);\n this.NL=0 ;\n this.AL=0 ;\n }\n\n accum_bin_info.prototype.reset=f unction () {\n this.NL=0 ;\n this.AL=0 ;\n\n box_make_empty_0(this.BL);\n box_make_empty_0(this.CL);\n };\n\n\n //Scratch variables used by bvh_bin_axis\n //TODO: can be replaced by a flat ArrayBuffer\n var bins=[ ];\n var i;\n for (i=0 ; i < MAX_BINS; i++) {\n bins.push(new bvh_bin());\n }\n\n //TODO: can be replaced by a flat ArrayBuffer\n var ai=[ ];\n for (i=0 ; i < MAX_BINS - 1; i++)\n ai.push(new accum_bin_info());\n\n var BR=n ew Float32Array(6);\n var CR=n ew Float32Array(6);\n\n\n function assign_bins(bvh, start, end, axis, cb, cbdiag, num_bins) {\n\n var centroids=b vh.centroids;\n var primitives=b vh.primitives;\n var boxes=b vh.finfo.boxes;\n var boxStride=b vh.finfo.boxStride;\n\n /* bin assignment */\n var k1=n um_bins * (1.0 - BOX_SCALE_EPSILON) / cbdiag[axis];\n var cbaxis=c b[axis];\n var sp=b vh.sort_prims;\n\n for (var j=s tart; j <=e nd; j++)\n {\n /* map array index to primitive index -- since primitive index array gets reordered by the BVH build*/\n /* while the primitive info array is not reordered */\n var iprim=p rimitives[j] | 0;\n\n var fpbin=k 1 * (centroids[iprim * 3 /*POINT_STRIDE*/ + axis] - cbaxis);\n var binid=f pbin | 0; //Truncate to int is algorithmic -> not an optimization thing!\n\n /* possible floating point problems */\n if (binid < 0)\n {\n binid=0 ;\n //debug(\ "Bin index out of range \" + fpbin);\n } else\n if (binid>= num_bins)\n {\n binid = num_bins - 1;\n //debug(\"Bin index out of range. \" + fpbin);\n }\n\n /* Store the bin index for the partitioning step, so we don't recompute it there */\n sp[j] = binid;\n\n /* update other bin data with the new primitive */\n //var bin = bins[binid];\n bins[binid].num_prims++;\n\n box_add_box_0(bins[binid].box_bbox, boxes, iprim * boxStride);\n box_add_point_0(bins[binid].box_centroid, centroids, iprim * 3 /*POINT_STRIDE*/);\n }\n /* at this point all primitves are assigned to a bin */\n }\n\n\n function bvh_bin_axis(bvh, start, end, axis, cb, cbdiag, split_info) {\n\n /* if size is near 0 on this axis, cost of split is infinite */\n if (cbdiag[axis] < bvh.scene_epsilon)\n {\n split_info.best_cost=I nfinity;\n return;\n }\n\n var num_bins=M AX_BINS;\n if (num_bins> end - start + 1)\n num_bins = end - start + 1;\n\n var i;\n for (i = 0; i < num_bins; i++)\n bins[i].reset();\n\n for (i=0 ; i < num_bins - 1; i++)\n ai[i].reset();\n\n split_info.num_bins=n um_bins;\n\n assign_bins(bvh, start, end, axis, cb, cbdiag, num_bins);\n\n\n /* now do the accumulation sweep from left to right */\n box_copy_00(ai[0].BL, bins[0].box_bbox);\n box_copy_00(ai[0].CL, bins[0].box_centroid);\n ai[0].AL=b ox_area_0(ai[0].BL);\n ai[0].NL=b ins[0].num_prims;\n var bin;\n for (i=1 ; i < num_bins - 1; i++)\n {\n bin=b ins[i];\n var aii=a i[i];\n box_copy_00(aii.BL, ai[i - 1].BL);\n box_add_box_00(aii.BL, bin.box_bbox);\n aii.AL=b ox_area_0(aii.BL);\n\n box_copy_00(aii.CL, ai[i - 1].CL);\n box_add_box_00(aii.CL, bin.box_centroid);\n\n aii.NL=a i[i - 1].NL + bin.num_prims;\n }\n\n /* sweep from right to left, keeping track of lowest cost and split */\n i=n um_bins - 1;\n box_copy_00(BR, bins[i].box_bbox);\n box_copy_00(CR, bins[i].box_centroid);\n var AR=b ox_area_0(BR);\n var NR=b ins[i].num_prims;\n\n var best_split=i ;\n var best_cost=A R * NR + ai[i - 1].AL * ai[i - 1].NL;\n box_copy_00(split_info.vb_right, BR);\n box_copy_00(split_info.cb_right, bins[i].box_centroid);\n box_copy_00(split_info.vb_left, ai[i - 1].BL);\n box_copy_00(split_info.cb_left, ai[i - 1].CL);\n split_info.num_left=a i[i - 1].NL;\n\n for (i=i - 1; i>= 1; i--)\n {\n bin = bins[i];\n box_add_box_00(BR, bin.box_bbox);\n box_add_box_00(CR, bin.box_centroid);\n AR = box_area_0(BR);\n NR += bin.num_prims;\n\n var cur_cost = AR * NR + ai[i - 1].AL * ai[i - 1].NL;\n\n if (cur_cost <=b est_cost)\n {\n best_cost=c ur_cost;\n best_split=i ;\n\n box_copy_00(split_info.vb_right, BR);\n box_copy_00(split_info.cb_right, CR);\n box_copy_00(split_info.vb_left, ai[i - 1].BL);\n box_copy_00(split_info.cb_left, ai[i - 1].CL);\n split_info.num_left=a i[i - 1].NL;\n }\n }\n\n split_info.best_split=b est_split;\n split_info.best_cost=b est_cost;\n }\n\n function bvh_partition(bvh, start, end, axis, cb, cbdiag, split_info) {\n\n //At this point, the original algorithm does an in-place NON-STABLE partition\n //to move primitives to the left and right sides of the split plane\n //into contiguous location of the primitives list for use by\n //the child nodes. But, we want to preserve the ordering by size\n //without having to do another sort, so we have to use\n //a temporary storage location to copy into. We place right-side primitives\n //in temporary storage, then copy back into the original storage in the right order.\n //Left-side primitives are still put directly into the destination location.\n var primitives=b vh.primitives;\n //var centroids=b vh.centroids;\n var i, j;\n\n //sort_prims contains bin indices computed during the split step.\n //Here we read those and also use sort_prims as temporary holding\n //of primitive indices. Hopefully the read happens before the write. :)\n //In C it was cheap enough to compute this again...\n //var k1=s plit_info.num_bins * (1.0 - BOX_SCALE_EPSILON) / cbdiag[axis];\n //var cbaxis=c b[axis];\n var sp=b vh.sort_prims;\n\n var right=0 ;\n var left=s tart | 0;\n var best_split=s plit_info.best_split | 0;\n\n for (i=s tart; i <=e nd; i++) {\n var iprim=p rimitives[i] | 0;\n //var fpbin=( k1 * (centroids[3/*POINT_STRIDE*/ * iprim + axis] - cbaxis));\n var binid=s p[i]; /* fpbin|0; */\n\n if (binid < best_split) {\n primitives[left++]=i prim;\n } else {\n sp[right++]=i prim;\n }\n }\n\n //if ((left-start) !=s plit_info.num_left)\n // debug(\ "Mismatch between binning and partitioning.\");\n\n //Copy back the right-side primitives into main primitives array, while\n //maintaining order\n for (j=0 ; j < right; j++) {\n primitives[left + j]=s p[j];\n }\n /* at this point the binning is complete and we have computed a split */\n }\n\n\n function bvh_fatten_inner_node(bvh, nodes, nodeidx, start, end, cb, cbdiag, poly_cut_off) {\n\n var primitives=b vh.primitives;\n var centroids=b vh.centroids;\n\n //Take the first few items to place into the inner node,\n //but do not go over the max item or polygon count.\n var prim_count=e nd - start + 1;\n\n if (prim_count> bvh.frags_per_inner_node)\n prim_count = bvh.frags_per_inner_node;\n\n if (prim_count > poly_cut_off)\n prim_count = poly_cut_off;\n\n\n nodes.setPrimStart(nodeidx, start);\n nodes.setPrimCount(nodeidx, prim_count);\n start += prim_count;\n\n //Because we take some primitives off the input, we have to recompute\n //the bounding box used for computing the node split.\n box_make_empty_0(cb);\n for (var i = start; i <=e nd; i++) {\n box_add_point_0(cb, centroids, 3 /*POINT_STRIDE*/ * primitives[i]);\n }\n\n //Also update the split axis -- it could possibly change too.\n box_get_size(cbdiag, 0, cb, 0);\n //Decide which axis to split on. Done purely by longest.\n var axis=0 ;\n if (cbdiag[1]> cbdiag[0])\n axis = 1;\n if (cbdiag[2] > cbdiag[axis])\n axis = 2;\n\n return axis;\n }\n\n\n var cbdiag = new Float32Array(3); //scratch variable used in bvh_subdivide\n\n function bvh_subdivide(bvh,\n nodeidx, /* current parent node to consider splitting */\n start, end, /* primitive sub-range to be considered at this recursion step */\n vb, /* bounding volume of the primitives' bounds in the sub-range */\n cb, /* bounding box of primitive centroids in this range */\n transparent, /* does the node contain opaque or transparent objects */\n depth /* recursion depth */)\n\n {\n box_get_size(cbdiag, 0, cb, 0);\n var nodes = bvh.nodes;\n var frags_per_leaf = transparent ? bvh.frags_per_leaf_node_transparent : bvh.frags_per_leaf_node;\n var frags_per_inner = transparent ? bvh.frags_per_inner_node_transparent : bvh.frags_per_inner_node;\n var polys_per_node = bvh.max_polys_per_node;\n\n //Decide which axis to split on.\n var axis = 0;\n if (cbdiag[1] > cbdiag[0])\n axis = 1;\n if (cbdiag[2] > cbdiag[axis])\n axis = 2;\n\n //Whether the node gets split or not, it gets\n //the same overall bounding box.\n nodes.setBox0(nodeidx, vb);\n\n //Check the expected polygon count of the node. This figures out the maximum number of fragments\n // we can put at the node as determined by polys_per_node\n var poly_count = 0;\n var poly_cut_off = 0;\n var prim_count = end - start + 1;\n\n // If we have the number of triangles in each mesh, limit the number of primitives in an inner node.\n if (bvh.finfo.hasPolygonCounts && bvh.frags_per_inner_node) {\n // Walk through primitives, add up the counts until we reach polys_per_node (10000), or run through\n // frags_per_inner_node (usually 32).\n // We know that later on we'll limit the number to frags_per_inner_node, so also do it here.\n var shorten_end = prim_count <=b vh.frags_per_inner_node ? end : start + bvh.frags_per_inner_node - 1;\n for (var i=s tart; i <=s horten_end; i++) {\n poly_count +=b vh.finfo.getPolygonCount(bvh.primitives[i]);\n poly_cut_off++;\n if (poly_count> polys_per_node)\n break;\n }\n }\n\n var isSmall = prim_count <=f rags_per_leaf && poly_count < polys_per_node ||\n prim_count===1 ;\n\n //Decide whether to terminate recursion\n if (isSmall ||\n depth> MAX_DEPTH || //max recursion depth\n cbdiag[axis] < bvh.scene_epsilon) //node would be way too tiny for math to make sense (a point)\n {\n nodes.setLeftChild(nodeidx, -1);\n nodes.setPrimStart(nodeidx, start);\n nodes.setPrimCount(nodeidx, end - start + 1);\n nodes.setFlags(nodeidx, 0, 0, transparent ? 1 : 0);\n return;\n }\n\n //Pick the largest (first) primitives to live in this node\n //NOTE: this assumes primitives are sorted by size.\n //NOTE: This step is an optional departure from the original, and we also do a check for it above\n // to compute poly_cut_off.\n if (frags_per_inner) {\n axis=b vh_fatten_inner_node(bvh, nodes, nodeidx, start, end, cb, cbdiag, poly_cut_off);\n start=s tart + nodes.getPrimCount(nodeidx);\n }\n\n var split_info=n ew bvh_split_info();\n\n //Do the binning of the remaining primitives to go into child nodes\n bvh_bin_axis(bvh, start, end, axis, cb, cbdiag, split_info);\n\n if (split_info.num_bins < 0) {\n //Split was too costly, so add all objects to the current node and bail\n nodes.setPrimCount(nodeidx, nodes.getPrimCount(nodeidx) + end - start + 1);\n return;\n }\n\n bvh_partition(bvh, start, end, axis, cb, cbdiag, split_info);\n\n var child_idx=n odes.nextNodes(2);\n\n /* set info about split into the node */\n var cleft=( split_info.vb_left[3 + axis] + split_info.vb_left[axis]) * 0.5;\n var cright=( split_info.vb_right[3 + axis] + split_info.vb_right[axis]) * 0.5;\n\n nodes.setFlags(nodeidx, axis, cleft < cright ? 0 : 1, transparent ? 1 : 0);\n nodes.setLeftChild(nodeidx, child_idx);\n\n\n /* validate split */\n /*\n if (true) {\n for (var i=start; i< start+num_left; i++)\n {\n //int binid=( int)(k1 * (info->prim_info[info->bvh->iprims[i]].centroid.v[axis] - cb->min.v[axis]));\n var cen = primitives[i] * POINT_STRIDE;\n if ( centroids[cen] < split_info.cb_left[0]\n || centroids[cen]> split_info.cb_left[3]\n || centroids[cen+1] < split_info.cb_left[1]\n || centroids[cen+1]> split_info.cb_left[4]\n || centroids[cen+2] < split_info.cb_left[2]\n || centroids[cen+2]> split_info.cb_left[5])\n {\n debug (\"wrong centroid box\");\n }\n }\n for (i=start+num_left; i <=end; i++)\n {\n //int binid=( int)(k1 * (info->prim_info[info->bvh->iprims[i]].centroid.v[axis] - cb->min.v[axis]));\n var cen = primitives[i] * POINT_STRIDE;\n if ( centroids[cen] < split_info.cb_right[0]\n || centroids[cen]> split_info.cb_right[3]\n || centroids[cen+1] < split_info.cb_right[1]\n || centroids[cen+1]> split_info.cb_right[4]\n || centroids[cen+2] < split_info.cb_right[2]\n || centroids[cen+2]> split_info.cb_right[5])\n {\n debug (\"wrong centroid box\");\n }\n }\n }\n */\n\n\n /* recurse */\n //bvh_subdivide(bvh, child_idx, start, start + split_info.num_left - 1, split_info.vb_left, split_info.cb_left, transparent, depth+1);\n //bvh_subdivide(bvh, child_idx + 1, start + split_info.num_left, end, split_info.vb_right, split_info.cb_right, transparent, depth+1);\n\n //Iterative stack-based recursion for easier profiling\n bvh.recursion_stack.push([bvh, child_idx + 1, start + split_info.num_left, end, split_info.vb_right, split_info.cb_right, transparent, depth + 1]);\n bvh.recursion_stack.push([bvh, child_idx, start, start + split_info.num_left - 1, split_info.vb_left, split_info.cb_left, transparent, depth + 1]);\n\n }\n\n\n function compute_boxes(bvh) {\n\n var boxv_o = bvh.boxv_o;\n var boxc_o = bvh.boxc_o;\n var boxv_t = bvh.boxv_t;\n var boxc_t = bvh.boxc_t;\n\n box_make_empty_0(boxv_o);\n box_make_empty_0(boxc_o);\n box_make_empty_0(boxv_t);\n box_make_empty_0(boxc_t);\n\n var c = bvh.centroids;\n var b = bvh.finfo.boxes;\n var boxStride = bvh.finfo.boxStride;\n\n for (var i = 0, iEnd = bvh.prim_count; i < iEnd; i++) {\n\n // find which primitive in the sorted list to use next\n var p=b vh.primitives[i];\n box_get_centroid(c, 3 /*POINT_STRIDE*/ * p, b, boxStride * p);\n\n if (i>= bvh.first_transparent) {\n\n box_add_point_0(boxc_t, c, 3 /*POINT_STRIDE*/ * p);\n box_add_box_0(boxv_t, b, boxStride * p);\n\n } else {\n\n box_add_point_0(boxc_o, c, 3 /*POINT_STRIDE*/ * p);\n box_add_box_0(boxv_o, b, boxStride * p);\n\n }\n }\n\n box_get_size(cbdiag, 0, bvh.boxv_o, 0);\n var maxsz = Math.max(cbdiag[0], cbdiag[1], cbdiag[2]);\n bvh.scene_epsilon = BOX_EPSILON * maxsz;\n }\n\n\n\n\n //Module exports\n return {\n bvh_subdivide: bvh_subdivide,\n compute_boxes: compute_boxes,\n box_area: box_area\n };\n\n}();\n\n\nfunction FragInfo(fragments, materialDefs) {\n //Invariants\n this.boxes = fragments.boxes; //Array of Float32, each bbox is a sextuplet\n this.polygonCounts = fragments.polygonCounts;\n this.hasPolygonCounts = !!this.polygonCounts;\n this.materials = fragments.materials; //material indices (we need to know which fragments are transparent)\n this.materialDefs = materialDefs;\n this.count = fragments.length;\n this.boxStride = 6;\n this.wantSort = true;\n}\n\nFragInfo.prototype.getCount = function () {\n return this.count;\n};\n\nFragInfo.prototype.isTransparent = function (i) {\n return this.materialDefs && this.materialDefs[this.materials[i]] ? this.materialDefs[this.materials[i]].transparent : false;\n};\n\nFragInfo.prototype.getPolygonCount = function (i) {\n return this.polygonCounts[i];\n};\n\n/**\n * Given a list of LMV fragments, builds a spatial index for view-dependent traversal and hit testing.\n * @constructor\n */\nfunction BVHBuilder(fragments, materialDefs, finfo) {\n\n //Initialize the inputs (bboxes, transparent flags, polygon counts)\n this.finfo = finfo || new FragInfo(fragments, materialDefs);\n\n this.prim_count = this.finfo.getCount();\n\n //To be initialized by build() function based on build options\n this.frags_per_leaf_node = -1;\n this.frags_per_inner_node = -1;\n this.nodes = null;\n\n this.work_buf = new ArrayBuffer(this.prim_count * 4);\n this.sort_prims = new Int32Array(this.work_buf);\n\n //Allocate memory buffer for re-ordered fragment primitive indices,\n //which will be sorted by node ownership and point to the index\n //of the fragment data.\n this.primitives = new Int32Array(this.prim_count);\n\n //The BVH split algorithm works based on centroids of the bboxes.\n this.centroids = new Float32Array(POINT_STRIDE * this.prim_count);\n\n //BBoxes and centroid bboxes for opaque and transparent primitive sets\n this.boxv_o = new Float32Array(6);\n this.boxc_o = new Float32Array(6);\n this.boxv_t = new Float32Array(6);\n this.boxc_t = new Float32Array(6);\n\n\n this.recursion_stack = [];\n}\n\nBVHBuilder.prototype.sortPrimitives = function (wantSort) {\n\n var prim_sizes = new Float32Array(this.work_buf);\n var primitives = this.primitives;\n var numTransparent = 0;\n\n //Sort the input objects by size\n //We assume all LMV SVF files come\n //sorted by draw priority already, so in theory we can skip this step.\n //This turns out to not be the case - some fragments are badly sorted.\n //Part of the reason may be that the surface area of the geometry itself,\n //not its bounding box, is used to sort by physical size in LMVTK.\n //In any case, the transparent objects do not always come last (bug in LMVTK?),\n //so we still have to pull them out to the end of the list, so some sorting\n //takes place no matter how this value is set.\n // Turning this option on will mean that the BVH building process as a whole\n // will be 45% to 75% longer, for large models - full sorting takes awhile.\n // In absolute terms this is an increase of a maximum of 1.15 seconds for a\n // very large model (one with over 1 million fragments, i.e., mesh instances).\n // This cost may be acceptable. For smaller models - \"only\" 70K instances -\n // the cost is 0.05 seconds. For 130k instances, 0.1 seconds. The rise is\n // slightly more than linear, but not excessively slow. I think it's acceptable,\n // given that the cost is still much less than loading even a small part of the\n // model.\n var doSort = wantSort;\n\n // console.log(\"BVH sort is \" + WANT_SORT);\n\n var i, iEnd;\n for (i = 0, iEnd = this.prim_count; i < iEnd; i++) {\n\n //Start with trivial 1:1 order of the indices array\n primitives[i]=i ;\n\n var transparent=t his.finfo.isTransparent(i);\n\n if (transparent)\n numTransparent++;\n\n if (doSort) {\n prim_sizes[i]=B VHModule.box_area(this.finfo.boxes, this.finfo.boxStride * i);\n\n //In order to make transparent objects appear last,\n //we give them a negative size, so that they are naturally\n //sorted last in the sort by size.\n if (transparent)\n prim_sizes[i]=- prim_sizes[i];\n } else {\n //We still need the transparency flag for the loop below\n //where we find the last opaque item, but we can\n //short-cut the size computation.\n prim_sizes[i]=t ransparent ? -1 : 1;\n }\n }\n\n\n if (doSort) {\n Array.prototype.sort.call(this.primitives, function (a, b) {\n return prim_sizes[b] - prim_sizes[a];\n });\n } else {\n if (numTransparent && numTransparent < this.prim_count) {\n\n var tmpTransparent=n ew Int32Array(numTransparent);\n var oidx=0 ,tidx=0 ;\n\n for (i=0 , iEnd=t his.prim_count; i < iEnd; i++) {\n if (prim_sizes[i]>= 0)\n primitives[oidx++] = primitives[i];else\n\n tmpTransparent[tidx++] = primitives[i];\n }\n\n primitives.set(tmpTransparent, this.prim_count - numTransparent);\n }\n }\n\n this.first_transparent = this.prim_count - numTransparent;\n};\n\n\nBVHBuilder.prototype.build = function (options) {\n //Kick off the BVH build.\n\n var useSlimNodes = options && !!options.useSlimNodes;\n\n var self = this;\n function assign_option(name, defaultVal) {\n if (Object.prototype.hasOwnProperty.call(options, name))\n self[name] = options[name];else\n\n self[name] = defaultVal;\n }\n\n // note: frags_per_leaf_node does *not* make an upper limit for the number of frags per node.\n\n //options for build optimized for rasterization renderer scenes\n if (useSlimNodes) {\n assign_option(\"frags_per_leaf_node\", 1);\n assign_option(\"frags_per_inner_node\", 0);\n assign_option(\"frags_per_leaf_node_transparent\", 1);\n assign_option(\"frags_per_inner_node_transparent\", 0);\n assign_option(\"max_polys_per_node\", Infinity);\n } else {\n var multiplier = options.isWeakDevice ? 0.5 : 1.0;\n\n //TODO: tune these constants\n assign_option(\"frags_per_leaf_node\", 0 | 256 * multiplier);\n //Placing fragments at inner nodes places more emphasis on bigger objects during tree traversal\n //but it can only be done for opaque objects. Transparent objects have to be strictly back to front\n //traversal regardless of size, unless a unified traversal\n assign_option(\"frags_per_inner_node\", 0 | this.frags_per_leaf_node);\n assign_option(\"frags_per_leaf_node_transparent\", this.frags_per_leaf_node);\n assign_option(\"frags_per_inner_node_transparent\", 0);\n assign_option(\"max_polys_per_node\", 0 | 20000 * multiplier);\n }\n\n //Reuse existing node array if there\n if (this.nodes && this.nodes.is_lean_node == useSlimNodes)\n this.nodes.nodeCount = 0;else\n {\n var est_nodes = this.prim_count / this.frags_per_leaf_node;\n var num_nodes = 1;\n while (num_nodes < est_nodes)\n num_nodes *=2 ;\n\n this.nodes=n ew NodeArray(num_nodes, options ? options.useSlimNodes : false);\n }\n\n this.sortPrimitives(this.finfo.wantSort);\n\n BVHModule.compute_boxes(this);\n\n //Init the root nodes at 0 for opaque\n //and 1 for transparent objects\n var root=t his.nodes.nextNodes(2);\n\n //Now kick off the recursive tree build\n\n //Opaque\n BVHModule.bvh_subdivide(this, root, 0, this.first_transparent - 1, this.boxv_o, this.boxc_o, false, 0);\n\n var a;\n while (this.recursion_stack.length) {\n a=t his.recursion_stack.pop();\n BVHModule.bvh_subdivide(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);\n }\n\n //Transparent\n BVHModule.bvh_subdivide(this, root + 1, this.first_transparent, this.prim_count - 1, this.boxv_t, this.boxc_t, true, 0);\n\n while (this.recursion_stack.length) {\n a=t his.recursion_stack.pop();\n BVHModule.bvh_subdivide(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLENBQUMsRUFBRUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVBLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNFO0FBQ0osQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy93Z3Mvc2NlbmUvQlZIQnVpbGRlci5qcz9hNDEwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQlZIIGRlZmluaXRpb25zOlxuICpcbiAqIEJWSCBOb2RlOiBpZiB0aGlzIHdhcyBDICh0aGUgb25seSByZWFsIHByb2dyYW1taW5nIGxhbmd1YWdlKSwgaXQgd291bGQgZ28gc29tZXRoaW5nIGxpa2UgdGhpcyxcbiAqIGJ1dCB3aXRoIGJldHRlciBhbGlnbm1lbnQuXG4gKlxuICogVGhpcyBpcyBkZWZpbml0aW9uIGZvciBcImZhdFwiIG5vZGVzIChmb3IgcmFzdGVyaXphdGlvbiksXG4gKiBpLmUuIHdoZW4gaW5uZXIgbm9kZXMgYWxzbyBjb250YWluIHByaW1pdGl2ZXMuXG4gKiBzdHJ1Y3QgTm9kZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZS9zaG9ydC9pbnQgb2Zmc2V0XG4gKiAgICAgIGZsb2F0IHdvcmxkQm94WzZdOyAvL3dvcmxkIGJveCBvZiB0aGUgbm9kZSBub2RlICAgICAgICAgICAgICAgICAgICAgICAgIDAvMC8wXG4gKiAgICAgIGludCBsZWZ0Q2hpbGRJbmRleDsgLy9wb2ludGVyIHRvIGxlZnQgY2hpbGQgbm9kZSAocmlnaHQgaXMgbGVmdCsxKSAgICAgMjQvMTIvNlxuICogICAgICB1c2hvcnQgcHJpbUNvdW50OyAvL2hvdyBtYW55IGZyYWdtZW50cyBhcmUgYXQgdGhpcyBub2RlICAgICAgICAgICAgICAgIDI4LzE0LzdcbiAqICAgICAgdXNob3J0IGZsYWdzOyAvL2JpdGZpZWxkIG9mIGdvb2Qgc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMC8xNS83LjVcbiAqXG4gKiAgICAgIGludCBwcmltU3RhcnQ7IC8vc3RhcnQgb2Ygbm9kZSdzIG93biBwcmltaXRpdmVzIChmcmFnbWVudHMpIGxpc3QgICAgICAgMzIvMTYvOFxuICogfTtcbiAqID0+IHNpemVvZihOb2RlKSA9IDM2IGJ5dGVzXG5cbiAqIERlZmluaXRpb24gZm9yIGxlYW4gbm9kZXMgKGZvciByYXkgY2FzdGluZyk6IHdoZW4gYSBub2RlIGlzIGVpdGhlciBpbm5lciBub2RlIChqdXN0IGNoaWxkcmVuLCBubyBwcmltaXRpdmVzKVxuICogb3IgbGVhZiAoanVzdCBwcmltaXRpdmVzLCBubyBjaGlsZHJlbikuXG4gKiBzdHJ1Y3QgTm9kZSB7XG4gKiAgICAgIGZsb2F0IHdvcmxkQm94WzZdOyAvL3dvcmxkIGJveCBvZiB0aGUgbm9kZVxuICogICAgICB1bmlvbiB7XG4gKiAgICAgICAgICBpbnQgbGVmdENoaWxkSW5kZXg7IC8vcG9pbnRlciB0byBsZWZ0IGNoaWxkIG5vZGUgKHJpZ2h0IGlzIGxlZnQrMSlcbiAqICAgICAgICAgIGludCBwcmltU3RhcnQ7IC8vc3RhcnQgb2Ygbm9kZSdzIG93biBwcmltaXRpdmVzIChmcmFnbWVudHMpIGxpc3RcbiAqICAgICAgfTtcbiAqICAgICAgdXNob3J0IHByaW1Db3VudDsgLy9ob3cgbWFueSBmcmFnbWVudHMgYXJlIGF0IHRoaXMgbm9kZVxuICogICAgICB1c2hvcnQgZmxhZ3M7IC8vYml0ZmllbGQgb2YgZ29vZCBzdHVmZlxuICogfTtcbiAqID0+IHNpemVvZihOb2RlKSA9IDMyIGJ5dGVzXG4gKlxuICogVGhlIGNsYXNzIGJlbG93IGVuY2Fwc3VsYXRlcyBhbiBhcnJheSBvZiBzdWNoIG5vZGVzIHVzaW5nIEFycmF5QnVmZmVyIGFzIGJhY2tpbmcgc3RvcmUuXG4gKlxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcnxudW1iZXJ9IGluaXRpYWxEYXRhICBJbml0aWFsIGNvbnRlbnQgb2YgdGhlIE5vZGVBcnJheSwgb3IgaW5pdGlhbCBhbGxvY2F0aW9uIG9mIGVtcHR5IG5vZGVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZUxlYW5Ob2RlIFVzZSBtaW5pbWFsIG5vZGUgc3RydWN0dXJlIHNpemUuIEN1cnJlbnRseSB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBmYWxzZS5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gTm9kZUFycmF5KGluaXRpYWxEYXRhLCB1c2VMZWFuTm9kZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGlmICh1c2VMZWFuTm9kZSkge1xuICAgICAgICB0aGlzLmJ5dGVzX3Blcl9ub2RlID0gMzI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ieXRlc19wZXJfbm9kZSA9IDM2O1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsQ291bnQ7XG4gICAgdmFyIGluaXRpYWxCdWZmZXI7XG5cbiAgICBpZiAoaW5pdGlhbERhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBpbml0aWFsQ291bnQgPSBpbml0aWFsRGF0YS5ieXRlTGVuZ3RoIC8gdGhpcy5ieXRlc19wZXJfbm9kZTtcbiAgICAgICAgaW5pdGlhbEJ1ZmZlciA9IGluaXRpYWxEYXRhO1xuICAgICAgICB0aGlzLm5vZGVDb3VudCA9IGluaXRpYWxDb3VudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGluaXRpYWxDb3VudCA9IGluaXRpYWxEYXRhIHwgMDtcbiAgICAgICAgaW5pdGlhbEJ1ZmZlciA9ICBuZXcgQXJyYXlCdWZmZXIodGhpcy5ieXRlc19wZXJfbm9kZSAqIGluaXRpYWxDb3VudCk7XG4gICAgICAgIHRoaXMubm9kZUNvdW50ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLm5vZGVDYXBhY2l0eSA9IGluaXRpYWxDb3VudDtcbiAgICB0aGlzLm5vZGVzUmF3ID0gaW5pdGlhbEJ1ZmZlcjtcblxuICAgIHRoaXMuaXNfbGVhbl9ub2RlID0gdXNlTGVhbk5vZGU7XG4gICAgdGhpcy5ub2RlX3N0cmlkZSA9IHRoaXMuYnl0ZXNfcGVyX25vZGUgIC8gNDtcbiAgICB0aGlzLm5vZGVfc3RyaWRlX3Nob3J0ID0gdGhpcy5ieXRlc19wZXJfbm9kZSAvIDI7XG5cbiAgICAvL0FsbG9jYXRlIG1lbW9yeSBidWZmZXIgZm9yIGFsbCB0cmVlIG5vZGVzXG4gICAgdGhpcy5ub2Rlc0YgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMubm9kZXNSYXcpO1xuICAgIHRoaXMubm9kZXNJID0gbmV3IEludDMyQXJyYXkodGhpcy5ub2Rlc1Jhdyk7XG4gICAgdGhpcy5ub2Rlc1MgPSBuZXcgVWludDE2QXJyYXkodGhpcy5ub2Rlc1Jhdyk7XG59XG5cbk5vZGVBcnJheS5wcm90b3R5cGUuc2V0TGVmdENoaWxkID0gZnVuY3Rpb24obm9kZWlkeCwgY2hpbGRpZHgpIHtcbiAgICB0aGlzLm5vZGVzSVtub2RlaWR4ICogdGhpcy5ub2RlX3N0cmlkZSArIDZdID0gY2hpbGRpZHg7XG59O1xuTm9kZUFycmF5LnByb3RvdHlwZS5nZXRMZWZ0Q2hpbGQgPSBmdW5jdGlvbihub2RlaWR4KSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNJW25vZGVpZHggKiB0aGlzLm5vZGVfc3RyaWRlICsgNl07XG59O1xuXG5Ob2RlQXJyYXkucHJvdG90eXBlLnNldFByaW1TdGFydCA9IGZ1bmN0aW9uKG5vZGVpZHgsIHN0YXJ0KSB7XG4gICAgaWYgKHRoaXMuaXNfbGVhbl9ub2RlKVxuICAgICAgICB0aGlzLm5vZGVzSVtub2RlaWR4ICogdGhpcy5ub2RlX3N0cmlkZSArIDZdID0gc3RhcnQ7XG4gICAgZWxzZVxuICAgICAgICB0aGlzLm5vZGVzSVtub2RlaWR4ICogdGhpcy5ub2RlX3N0cmlkZSArIDhdID0gc3RhcnQ7XG59O1xuTm9kZUFycmF5LnByb3RvdHlwZS5nZXRQcmltU3RhcnQgPSBmdW5jdGlvbihub2RlaWR4KSB7XG4gICAgaWYgKHRoaXMuaXNfbGVhbl9ub2RlKVxuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlc0lbbm9kZWlkeCAqIHRoaXMubm9kZV9zdHJpZGUgKyA2XTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzSVtub2RlaWR4ICogdGhpcy5ub2RlX3N0cmlkZSArIDhdO1xufTtcblxuTm9kZUFycmF5LnByb3RvdHlwZS5zZXRQcmltQ291bnQgPSBmdW5jdGlvbihub2RlaWR4LCBjb3VudCkge1xuICAgIHRoaXMubm9kZXNTW25vZGVpZHggKiB0aGlzLm5vZGVfc3RyaWRlX3Nob3J0ICsgMTRdID0gY291bnQ7XG59O1xuTm9kZUFycmF5LnByb3RvdHlwZS5nZXRQcmltQ291bnQgPSBmdW5jdGlvbihub2RlaWR4KSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNTW25vZGVpZHggKiB0aGlzLm5vZGVfc3RyaWRlX3Nob3J0ICsgMTRdO1xufTtcblxuTm9kZUFycmF5LnByb3RvdHlwZS5zZXRGbGFncyA9IGZ1bmN0aW9uKG5vZGVpZHgsIGF4aXMsIGlzRmlyc3QsIGlzVHJhbnNwYXJlbnQpIHtcbiAgICB0aGlzLm5vZGVzU1tub2RlaWR4ICogdGhpcy5ub2RlX3N0cmlkZV9zaG9ydCArIDE1XSA9IChpc1RyYW5zcGFyZW50IDw8IDMpIHwgKGlzRmlyc3QgPDwgMikgfCAoYXhpcyAmIDB4Myk7XG59O1xuTm9kZUFycmF5LnByb3RvdHlwZS5nZXRGbGFncyA9IGZ1bmN0aW9uKG5vZGVpZHgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2Rlc1Nbbm9kZWlkeCAqIHRoaXMubm9kZV9zdHJpZGVfc2hvcnQgKyAxNV07XG59O1xuXG5Ob2RlQXJyYXkucHJvdG90eXBlLnNldEJveDAgPSBmdW5jdGlvbihub2RlaWR4LCBzcmMpIHtcbiAgICB2YXIgb2ZmID0gbm9kZWlkeCAqIHRoaXMubm9kZV9zdHJpZGU7XG4gICAgdmFyIGRzdCA9IHRoaXMubm9kZXNGO1xuICAgIGRzdFtvZmZdID0gc3JjWzBdO1xuICAgIGRzdFtvZmYrMV0gPSBzcmNbMV07XG4gICAgZHN0W29mZisyXSA9IHNyY1syXTtcbiAgICBkc3Rbb2ZmKzNdID0gc3JjWzNdO1xuICAgIGRzdFtvZmYrNF0gPSBzcmNbNF07XG4gICAgZHN0W29mZis1XSA9IHNyY1s1XTtcbn07XG5Ob2RlQXJyYXkucHJvdG90eXBlLmdldEJveFRocmVlID0gZnVuY3Rpb24obm9kZWlkeCwgZHN0KSB7XG4gICAgdmFyIG9mZiA9IG5vZGVpZHggKiB0aGlzLm5vZGVfc3RyaWRlO1xuICAgIHZhciBzcmMgPSB0aGlzLm5vZGVzRjtcbiAgICBkc3QubWluLnggPSBzcmNbb2ZmXTtcbiAgICBkc3QubWluLnkgPSBzcmNbb2ZmKzFdO1xuICAgIGRzdC5taW4ueiA9IHNyY1tvZmYrMl07XG4gICAgZHN0Lm1heC54ID0gc3JjW29mZiszXTtcbiAgICBkc3QubWF4LnkgPSBzcmNbb2ZmKzRdO1xuICAgIGRzdC5tYXgueiA9IHNyY1tvZmYrNV07XG59O1xuTm9kZUFycmF5LnByb3RvdHlwZS5nZXRCb3hBcnJheSA9IGZ1bmN0aW9uKG5vZGVpZHgsIGRzdCwgb2Zmc2V0KSB7XG4gICAgdmFyIG9mZiA9IG5vZGVpZHggKiB0aGlzLm5vZGVfc3RyaWRlO1xuICAgIHZhciBzcmMgPSB0aGlzLm5vZGVzRjtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcbiAgICBkc3RbMCtvZmZzZXRdID0gc3JjW29mZl07XG4gICAgZHN0WzErb2Zmc2V0XSA9IHNyY1tvZmYrMV07XG4gICAgZHN0WzIrb2Zmc2V0XSA9IHNyY1tvZmYrMl07XG4gICAgZHN0WzMrb2Zmc2V0XSA9IHNyY1tvZmYrM107XG4gICAgZHN0WzQrb2Zmc2V0XSA9IHNyY1tvZmYrNF07XG4gICAgZHN0WzUrb2Zmc2V0XSA9IHNyY1tvZmYrNV07XG59O1xuTm9kZUFycmF5LnByb3RvdHlwZS5zZXRCb3hUaHJlZSA9IGZ1bmN0aW9uKG5vZGVpZHgsIHNyYykge1xuICAgIHZhciBvZmYgPSBub2RlaWR4ICogdGhpcy5ub2RlX3N0cmlkZTtcbiAgICB2YXIgZHN0ID0gdGhpcy5ub2Rlc0Y7XG4gICAgZHN0W29mZl0gPSBzcmMubWluLng7XG4gICAgZHN0W29mZisxXSA9IHNyYy5taW4ueTtcbiAgICBkc3Rbb2ZmKzJdID0gc3JjLm1pbi56O1xuICAgIGRzdFtvZmYrM10gPSBzcmMubWF4Lng7XG4gICAgZHN0W29mZis0XSA9IHNyYy5tYXgueTtcbiAgICBkc3Rbb2ZmKzVdID0gc3JjLm1heC56O1xufTtcblxuXG5cblxuTm9kZUFycmF5LnByb3RvdHlwZS5tYWtlRW1wdHkgPSBmdW5jdGlvbihub2RlaWR4KSB7XG5cbiAgICB2YXIgb2ZmID0gbm9kZWlkeCAqIHRoaXMubm9kZV9zdHJpZGU7XG4gICAgdmFyIGRzdCA9IHRoaXMubm9kZXNJO1xuXG4gICAgLy9ObyBwb2ludCB0byBtYWtlRW1wdHkgaGVyZSwgYmVjYXVzZSB0aGUgYm94IGdldHMgc2V0XG4gICAgLy9kaXJlY3RseSB3aGVuIHRoZSBub2RlIGlzIGluaXRpYWxpemVkIGluIGJ2aF9zdWJkaXZpZGUuXG4gICAgLy9ib3hfbWFrZV9lbXB0eSh0aGlzLm5vZGVzRiwgb2ZmKTtcblxuICAgIC8vX3RoaXMuc2V0TGVmdENoaWxkKG5vZGVpZHgsLTEpO1xuICAgIGRzdFtvZmYgKyA2XSA9IC0xO1xuXG4gICAgLy9ib3RoIHByaW0gY291bnQgYW5kIGZsYWdzIHRvIDBcbiAgICBkc3Rbb2ZmICsgN10gPSAwO1xuXG4gICAgLy9fdGhpcy5zZXRQcmltU3RhcnQobm9kZWlkeCwgLTEpO1xuICAgIGlmICghdGhpcy5pc19sZWFuX25vZGUpXG4gICAgICAgIGRzdFtvZmYgKyA4XSA9IC0xO1xuXG59O1xuXG5Ob2RlQXJyYXkucHJvdG90eXBlLnJlYWxsb2MgPSBmdW5jdGlvbihleHRyYVNpemUpIHtcbiAgICBpZiAodGhpcy5ub2RlQ291bnQgKyBleHRyYVNpemUgPiB0aGlzLm5vZGVDYXBhY2l0eSkge1xuICAgICAgICB2YXIgbnN6ID0gMCB8ICh0aGlzLm5vZGVDYXBhY2l0eSAqIDMgLyAyKTtcbiAgICAgICAgaWYgKG5zeiA8IHRoaXMubm9kZUNvdW50ICsgZXh0cmFTaXplKVxuICAgICAgICAgICAgbnN6ID0gdGhpcy5ub2RlQ291bnQgKyBleHRyYVNpemU7XG5cbiAgICAgICAgdmFyIG5ub2RlcyA9IG5ldyBBcnJheUJ1ZmZlcihuc3ogKiB0aGlzLmJ5dGVzX3Blcl9ub2RlKTtcbiAgICAgICAgdmFyIG5ub2Rlc0kgPSBuZXcgSW50MzJBcnJheShubm9kZXMpO1xuICAgICAgICBubm9kZXNJLnNldCh0aGlzLm5vZGVzSSk7XG5cbiAgICAgICAgdGhpcy5ub2RlQ2FwYWNpdHkgPSBuc3o7XG4gICAgICAgIHRoaXMubm9kZXNSYXcgPSBubm9kZXM7XG4gICAgICAgIHRoaXMubm9kZXNGID0gbmV3IEZsb2F0MzJBcnJheShubm9kZXMpO1xuICAgICAgICB0aGlzLm5vZGVzSSA9IG5ub2Rlc0k7XG4gICAgICAgIHRoaXMubm9kZXNTID0gbmV3IFVpbnQxNkFycmF5KG5ub2Rlcyk7XG4gICAgfVxufTtcblxuTm9kZUFycmF5LnByb3RvdHlwZS5uZXh0Tm9kZXMgPSBmdW5jdGlvbihob3dNYW55KSB7XG5cbiAgICB0aGlzLnJlYWxsb2MoaG93TWFueSk7XG5cbiAgICB2YXIgcmVzID0gdGhpcy5ub2RlQ291bnQ7XG4gICAgdGhpcy5ub2RlQ291bnQgKz0gaG93TWFueTtcblxuICAgIGZvciAodmFyIGk9MDsgaTxob3dNYW55OyBpKyspIHtcbiAgICAgICAgdGhpcy5tYWtlRW1wdHkocmVzK2kpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG59O1xuXG5Ob2RlQXJyYXkucHJvdG90eXBlLmdldFJhd0RhdGEgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5ub2Rlc1Jhdy5zbGljZSgwLCB0aGlzLm5vZGVDb3VudCAqIHRoaXMuYnl0ZXNfcGVyX25vZGUpO1xufTtcblxudmFyIFBPSU5UX1NUUklERSA9IDM7XG52YXIgQk9YX0VQU0lMT04gPSAxZS01O1xudmFyIEJPWF9TQ0FMRV9FUFNJTE9OID0gMWUtNTtcbnZhciBNQVhfREVQVEggPSAxNTsgLyogbWF4IHRyZWUgZGVwdGggKi9cbnZhciBNQVhfQklOUyA9IDE2O1xuXG4vKipcbiogQm91bmRpbmcgVm9sdW1lIEhpZXJhcmNoeSBidWlsZCBhbGdvcml0aG0uXG4qIFVzZXMgdG9wIGRvd24gYmlubmluZyAtLSBzZWUgXCJPbiBmYXN0IENvbnN0cnVjdGlvbiBvZiBTQUgtYmFzZWQgQm91bmRpbmcgVm9sdW1lIEhpZXJhcmNoaWVzXCIgYnkgSS5XYWxkXG4qIFBvcnRlZCBmcm9tIHRoZSBDIHZlcnNpb24gaGVyZTogaHR0cHM6Ly9naXQuYXV0b2Rlc2suY29tL3N0YW5ldnQvdC1yYXkvYmxvYi9tYXN0ZXIvcmVuZGVyM2QvdC1yYXkvdC1jb3JlL3QtYnZoLmNcbiogT3B0aW1pemVkIGZvciBKYXZhU2NyaXB0LlxuKi9cbnZhciBCVkhNb2R1bGUgPSBmdW5jdGlvbigpIHtcbiAgICAvL1RoZXJlIGJlIGRyYWdvbnMgaW4gdGhpcyBjbG9zdXJlLlxuXG5cInVzZSBzdHJpY3RcIjtcblxuXG4vKipcbiAqIFV0aWxpdGllcyBmb3IgbWFuaXB1bGF0aW5nIGJvdW5kaW5nIGJveGVzIHN0b3JlZFxuICogaW4gZXh0ZXJuYWwgYXJyYXkgKGFzIHNleHR1cGxldHMgb2YgZmxvYXQzMilcbiAqL1xuXG5cbmZ1bmN0aW9uIGJveF9nZXRfY2VudHJvaWQoZHN0LCBkc3Rfb2ZmLCBzcmMsIHNyY19vZmYpIHtcbiAgICBkc3RbZHN0X29mZl0gPSAwLjUqKHNyY1tzcmNfb2ZmXSArIHNyY1tzcmNfb2ZmICsgM10pO1xuICAgIGRzdFtkc3Rfb2ZmKzFdID0gMC41KihzcmNbc3JjX29mZiArIDFdICsgc3JjW3NyY19vZmYgKyA0XSk7XG4gICAgZHN0W2RzdF9vZmYrMl0gPSAwLjUqKHNyY1tzcmNfb2ZmICsgMl0gKyBzcmNbc3JjX29mZiArIDVdKTtcbn1cblxuZnVuY3Rpb24gYm94X2FkZF9wb2ludF8wKGRzdCwgc3JjLCBzcmNfb2ZmKSB7XG5cbiAgICBpZiAoZHN0WzBdID4gc3JjW3NyY19vZmZdKSAgIGRzdFswXSA9IHNyY1tzcmNfb2ZmXTtcbiAgICBpZiAoZHN0WzNdIDwgc3JjW3NyY19vZmZdKSAgIGRzdFszXSA9IHNyY1tzcmNfb2ZmXTtcblxuICAgIGlmIChkc3RbMV0gPiBzcmNbc3JjX29mZisxXSkgZHN0WzFdID0gc3JjW3NyY19vZmYrMV07XG4gICAgaWYgKGRzdFs0XSA8IHNyY1tzcmNfb2ZmKzFdKSBkc3RbNF0gPSBzcmNbc3JjX29mZisxXTtcblxuICAgIGlmIChkc3RbMl0gPiBzcmNbc3JjX29mZisyXSkgZHN0WzJdID0gc3JjW3NyY19vZmYrMl07XG4gICAgaWYgKGRzdFs1XSA8IHNyY1tzcmNfb2ZmKzJdKSBkc3RbNV0gPSBzcmNbc3JjX29mZisyXTtcblxufVxuXG5mdW5jdGlvbiBib3hfYWRkX2JveF8wKGRzdCwgc3JjLCBzcmNfb2ZmKSB7XG5cbiAgICBpZiAoZHN0WzBdID4gc3JjW3NyY19vZmZdKSBkc3RbMF0gPSBzcmNbc3JjX29mZl07XG4gICAgaWYgKGRzdFsxXSA+IHNyY1tzcmNfb2ZmKzFdKSBkc3RbMV0gPSBzcmNbc3JjX29mZisxXTtcbiAgICBpZiAoZHN0WzJdID4gc3JjW3NyY19vZmYrMl0pIGRzdFsyXSA9IHNyY1tzcmNfb2ZmKzJdO1xuXG4gICAgaWYgKGRzdFszXSA8IHNyY1tzcmNfb2ZmKzNdKSBkc3RbM10gPSBzcmNbc3JjX29mZiszXTtcbiAgICBpZiAoZHN0WzRdIDwgc3JjW3NyY19vZmYrNF0pIGRzdFs0XSA9IHNyY1tzcmNfb2ZmKzRdO1xuICAgIGlmIChkc3RbNV0gPCBzcmNbc3JjX29mZis1XSkgZHN0WzVdID0gc3JjW3NyY19vZmYrNV07XG59XG5cbmZ1bmN0aW9uIGJveF9hZGRfYm94XzAwKGRzdCwgc3JjKSB7XG4gICAgaWYgKGRzdFswXSA+IHNyY1swXSkgZHN0WzBdID0gc3JjWzBdO1xuICAgIGlmIChkc3RbMV0gPiBzcmNbMV0pIGRzdFsxXSA9IHNyY1sxXTtcbiAgICBpZiAoZHN0WzJdID4gc3JjWzJdKSBkc3RbMl0gPSBzcmNbMl07XG5cbiAgICBpZiAoZHN0WzNdIDwgc3JjWzNdKSBkc3RbM10gPSBzcmNbM107XG4gICAgaWYgKGRzdFs0XSA8IHNyY1s0XSkgZHN0WzRdID0gc3JjWzRdO1xuICAgIGlmIChkc3RbNV0gPCBzcmNbNV0pIGRzdFs1XSA9IHNyY1s1XTtcbn1cblxuZnVuY3Rpb24gYm94X2dldF9zaXplKGRzdCwgZHN0X29mZiwgc3JjLCBzcmNfb2ZmKSB7XG4gICAgZm9yICh2YXIgaT0wOyBpPDM7IGkrKykge1xuICAgICAgICBkc3RbZHN0X29mZitpXSA9IHNyY1tzcmNfb2ZmKzMraV0gLSBzcmNbc3JjX29mZitpXTtcbiAgICB9XG59XG5cbi8vZnVuY3Rpb24gYm94X2NvcHkoZHN0LCBkc3Rfb2ZmLCBzcmMsIHNyY19vZmYpIHtcbi8vICAgIGZvciAodmFyIGk9MDsgaTw2OyBpKyspIHtcbi8vICAgICAgICBkc3RbZHN0X29mZitpXSA9IHNyY1tzcmNfb2ZmK2ldO1xuLy8gICAgfVxuLy99XG5cbi8vIHVud291bmQgdmVyc2lvbiBvZiBib3hfY29weVxuZnVuY3Rpb24gYm94X2NvcHlfMDAoZHN0LCBzcmMpIHtcbiAgICBkc3RbMF0gPSBzcmNbMF07XG4gICAgZHN0WzFdID0gc3JjWzFdO1xuICAgIGRzdFsyXSA9IHNyY1syXTtcbiAgICBkc3RbM10gPSBzcmNbM107XG4gICAgZHN0WzRdID0gc3JjWzRdO1xuICAgIGRzdFs1XSA9IHNyY1s1XTtcbn1cblxudmFyIGRibF9tYXggPSBJbmZpbml0eTtcblxuLy9mdW5jdGlvbiBib3hfbWFrZV9lbXB0eShkc3QsIGRzdF9vZmYpIHtcbi8vICAgICAgICBkc3RbZHN0X29mZl0gICA9ICBkYmxfbWF4O1xuLy8gICAgICAgIGRzdFtkc3Rfb2ZmKzFdID0gIGRibF9tYXg7XG4vLyAgICAgICAgZHN0W2RzdF9vZmYrMl0gPSAgZGJsX21heDtcbi8vICAgICAgICBkc3RbZHN0X29mZiszXSA9IC1kYmxfbWF4O1xuLy8gICAgICAgIGRzdFtkc3Rfb2ZmKzRdID0gLWRibF9tYXg7XG4vLyAgICAgICAgZHN0W2RzdF9vZmYrNV0gPSAtZGJsX21heDtcbi8vfVxuXG5mdW5jdGlvbiBib3hfbWFrZV9lbXB0eV8wKGRzdCkge1xuICAgIGRzdFswXSA9ICBkYmxfbWF4O1xuICAgIGRzdFsxXSA9ICBkYmxfbWF4O1xuICAgIGRzdFsyXSA9ICBkYmxfbWF4O1xuICAgIGRzdFszXSA9IC1kYmxfbWF4O1xuICAgIGRzdFs0XSA9IC1kYmxfbWF4O1xuICAgIGRzdFs1XSA9IC1kYmxfbWF4O1xufVxuXG5mdW5jdGlvbiBib3hfYXJlYShzcmMsIHNyY19vZmYpIHtcblxuICAgIHZhciBkeCA9IHNyY1tzcmNfb2ZmKzNdIC0gc3JjW3NyY19vZmZdO1xuICAgIHZhciBkeSA9IHNyY1tzcmNfb2ZmKzRdIC0gc3JjW3NyY19vZmYrMV07XG4gICAgdmFyIGR6ID0gc3JjW3NyY19vZmYrNV0gLSBzcmNbc3JjX29mZisyXTtcblxuICAgIGlmIChkeCA8IDAgfHwgZHkgPCAwIHx8IGR6IDwgMClcbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gMi4wICogKGR4ICogZHkgKyBkeSAqIGR6ICsgZHogKiBkeCk7XG59XG5cbmZ1bmN0aW9uIGJveF9hcmVhXzAoc3JjKSB7XG5cbiAgICB2YXIgZHggPSBzcmNbM10gLSBzcmNbMF07XG4gICAgdmFyIGR5ID0gc3JjWzRdIC0gc3JjWzFdO1xuICAgIHZhciBkeiA9IHNyY1s1XSAtIHNyY1syXTtcblxuICAgIGlmIChkeCA8IDAgfHwgZHkgPCAwIHx8IGR6IDwgMClcbiAgICAgICAgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gMi4wICogKGR4ICogZHkgKyBkeSAqIGR6ICsgZHogKiBkeCk7XG59XG5cblxuXG5cblxuZnVuY3Rpb24gYnZoX3NwbGl0X2luZm8oKSB7XG4gICAgdGhpcy52Yl9sZWZ0ID0gbmV3IEZsb2F0MzJBcnJheSg2KTtcbiAgICB0aGlzLnZiX3JpZ2h0ID0gbmV3IEZsb2F0MzJBcnJheSg2KTtcbiAgICB0aGlzLmNiX2xlZnQgPSBuZXcgRmxvYXQzMkFycmF5KDYpO1xuICAgIHRoaXMuY2JfcmlnaHQgPSBuZXcgRmxvYXQzMkFycmF5KDYpO1xuICAgIHRoaXMubnVtX2xlZnQgPSAwO1xuICAgIHRoaXMuYmVzdF9zcGxpdCA9IC0xO1xuICAgIHRoaXMuYmVzdF9jb3N0ID0gLTE7XG4gICAgdGhpcy5udW1fYmlucyA9IC0xO1xufVxuXG5idmhfc3BsaXRfaW5mby5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5udW1fbGVmdCA9IDA7XG4gICAgdGhpcy5iZXN0X3NwbGl0ID0gLTE7XG4gICAgdGhpcy5iZXN0X2Nvc3QgPSAtMTtcbiAgICB0aGlzLm51bV9iaW5zID0gLTE7XG59O1xuXG5cbmZ1bmN0aW9uIGJ2aF9iaW4oKSB7XG4gICAgdGhpcy5ib3hfYmJveCA9IG5ldyBGbG9hdDMyQXJyYXkoNik7IC8vIGJib3ggb2YgYWxsIHByaW1pdGl2ZSBiYm94ZXNcbiAgICB0aGlzLmJveF9jZW50cm9pZCA9IG5ldyBGbG9hdDMyQXJyYXkoNik7IC8vIGJib3ggb2YgYWxsIHByaW1pdGl2ZSBjZW50cm9pZHNcbiAgICB0aGlzLm51bV9wcmltcyA9IDA7IC8vIG51bWJlciBvZiBwcmltaXRpdmVzIGluIHRoZSBiaW5cbn1cblxuYnZoX2Jpbi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm51bV9wcmltcyA9IDA7IC8vIG51bWJlciBvZiBwcmltaXRpdmVzIGluIHRoZSBiaW5cbiAgICBib3hfbWFrZV9lbXB0eV8wKHRoaXMuYm94X2Jib3gpO1xuICAgIGJveF9tYWtlX2VtcHR5XzAodGhpcy5ib3hfY2VudHJvaWQpO1xufTtcblxuZnVuY3Rpb24gYWNjdW1fYmluX2luZm8oKSB7XG4gICAgdGhpcy5CTCA9IG5ldyBGbG9hdDMyQXJyYXkoNik7XG4gICAgdGhpcy5DTCA9IG5ldyBGbG9hdDMyQXJyYXkoNik7XG4gICAgdGhpcy5OTCA9IDA7XG4gICAgdGhpcy5BTCA9IDA7XG59XG5cbmFjY3VtX2Jpbl9pbmZvLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuTkwgPSAwO1xuICAgIHRoaXMuQUwgPSAwO1xuXG4gICAgYm94X21ha2VfZW1wdHlfMCh0aGlzLkJMKTtcbiAgICBib3hfbWFrZV9lbXB0eV8wKHRoaXMuQ0wpO1xufTtcblxuXG4vL1NjcmF0Y2ggdmFyaWFibGVzIHVzZWQgYnkgYnZoX2Jpbl9heGlzXG4vL1RPRE86IGNhbiBiZSByZXBsYWNlZCBieSBhIGZsYXQgQXJyYXlCdWZmZXJcbnZhciBiaW5zID0gW107XG52YXIgaTtcbmZvciAoaT0wOyBpPE1BWF9CSU5TOyBpKyspIHtcbiAgICBiaW5zLnB1c2gobmV3IGJ2aF9iaW4oKSk7XG59XG5cbi8vVE9ETzogY2FuIGJlIHJlcGxhY2VkIGJ5IGEgZmxhdCBBcnJheUJ1ZmZlclxudmFyIGFpID0gW107XG5mb3IgKGk9MDsgaTxNQVhfQklOUy0xOyBpKyspXG4gICAgYWkucHVzaChuZXcgYWNjdW1fYmluX2luZm8oKSk7XG5cbnZhciBCUiA9IG5ldyBGbG9hdDMyQXJyYXkoNik7XG52YXIgQ1IgPSBuZXcgRmxvYXQzMkFycmF5KDYpO1xuXG5cbmZ1bmN0aW9uIGFzc2lnbl9iaW5zKGJ2aCwgc3RhcnQsIGVuZCwgYXhpcywgY2IsIGNiZGlhZywgbnVtX2JpbnMpIHtcblxuICAgIHZhciBjZW50cm9pZHMgPSBidmguY2VudHJvaWRzO1xuICAgIHZhciBwcmltaXRpdmVzID0gYnZoLnByaW1pdGl2ZXM7XG4gICAgdmFyIGJveGVzID0gYnZoLmZpbmZvLmJveGVzO1xuICAgIHZhciBib3hTdHJpZGUgPSBidmguZmluZm8uYm94U3RyaWRlO1xuXG4gICAgLyogYmluIGFzc2lnbm1lbnQgKi9cbiAgICB2YXIgazEgPSBudW1fYmlucyAqICgxLjAgLSBCT1hfU0NBTEVfRVBTSUxPTikgLyBjYmRpYWdbYXhpc107XG4gICAgdmFyIGNiYXhpcyA9IGNiW2F4aXNdO1xuICAgIHZhciBzcCA9IGJ2aC5zb3J0X3ByaW1zO1xuXG4gICAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKVxuICAgIHtcbiAgICAgICAgLyogbWFwIGFycmF5IGluZGV4IHRvIHByaW1pdGl2ZSBpbmRleCAtLSBzaW5jZSBwcmltaXRpdmUgaW5kZXggYXJyYXkgZ2V0cyByZW9yZGVyZWQgYnkgdGhlIEJWSCBidWlsZCovXG4gICAgICAgIC8qIHdoaWxlIHRoZSBwcmltaXRpdmUgaW5mbyBhcnJheSBpcyBub3QgcmVvcmRlcmVkICovXG4gICAgICAgIHZhciBpcHJpbSA9IHByaW1pdGl2ZXNbal18MDtcblxuICAgICAgICB2YXIgZnBiaW4gPSBrMSAqIChjZW50cm9pZHNbaXByaW0gKiAzLypQT0lOVF9TVFJJREUqLyArIGF4aXNdIC0gY2JheGlzKTtcbiAgICAgICAgdmFyIGJpbmlkID0gZnBiaW58MDsgLy9UcnVuY2F0ZSB0byBpbnQgaXMgYWxnb3JpdGhtaWMgLT4gbm90IGFuIG9wdGltaXphdGlvbiB0aGluZyFcblxuICAgICAgICAvKiBwb3NzaWJsZSBmbG9hdGluZyBwb2ludCBwcm9ibGVtcyAqL1xuICAgICAgICBpZiAoYmluaWQgPCAwKVxuICAgICAgICB7XG4gICAgICAgICAgICBiaW5pZCA9IDA7XG4gICAgICAgICAgICAvL2RlYnVnKFwiQmluIGluZGV4IG91dCBvZiByYW5nZSBcIiArIGZwYmluKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiaW5pZCA+PSBudW1fYmlucylcbiAgICAgICAge1xuICAgICAgICAgICAgYmluaWQgPSBudW1fYmlucy0xO1xuICAgICAgICAgICAgLy9kZWJ1ZyhcIkJpbiBpbmRleCBvdXQgb2YgcmFuZ2UuIFwiICsgZnBiaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogU3RvcmUgdGhlIGJpbiBpbmRleCBmb3IgdGhlIHBhcnRpdGlvbmluZyBzdGVwLCBzbyB3ZSBkb24ndCByZWNvbXB1dGUgaXQgdGhlcmUgKi9cbiAgICAgICAgc3Bbal0gPSBiaW5pZDtcblxuICAgICAgICAvKiB1cGRhdGUgb3RoZXIgYmluIGRhdGEgd2l0aCB0aGUgbmV3IHByaW1pdGl2ZSAqL1xuICAgICAgICAvL3ZhciBiaW4gPSBiaW5zW2JpbmlkXTtcbiAgICAgICAgYmluc1tiaW5pZF0ubnVtX3ByaW1zICsrO1xuXG4gICAgICAgIGJveF9hZGRfYm94XzAoYmluc1tiaW5pZF0uYm94X2Jib3gsIGJveGVzLCBpcHJpbSAqIGJveFN0cmlkZSk7XG4gICAgICAgIGJveF9hZGRfcG9pbnRfMChiaW5zW2JpbmlkXS5ib3hfY2VudHJvaWQsIGNlbnRyb2lkcywgaXByaW0gKiAzIC8qUE9JTlRfU1RSSURFKi8pO1xuICAgIH1cbiAgICAvKiBhdCB0aGlzIHBvaW50IGFsbCBwcmltaXR2ZXMgYXJlIGFzc2lnbmVkIHRvIGEgYmluICovXG59XG5cblxuZnVuY3Rpb24gYnZoX2Jpbl9heGlzKGJ2aCwgc3RhcnQsIGVuZCwgYXhpcywgY2IsIGNiZGlhZywgc3BsaXRfaW5mbykge1xuXG4gICAgLyogaWYgc2l6ZSBpcyBuZWFyIDAgb24gdGhpcyBheGlzLCBjb3N0IG9mIHNwbGl0IGlzIGluZmluaXRlICovXG4gICAgaWYgKGNiZGlhZ1theGlzXSA8IGJ2aC5zY2VuZV9lcHNpbG9uKVxuICAgIHtcbiAgICAgICAgc3BsaXRfaW5mby5iZXN0X2Nvc3QgPSBJbmZpbml0eTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBudW1fYmlucyA9IE1BWF9CSU5TO1xuICAgIGlmIChudW1fYmlucyA+IGVuZC1zdGFydCsxKVxuICAgICAgICBudW1fYmlucyA9IGVuZC1zdGFydCsxO1xuXG4gICAgdmFyIGk7XG4gICAgZm9yIChpPTA7IGk8bnVtX2JpbnM7IGkrKylcbiAgICAgICAgYmluc1tpXS5yZXNldCgpO1xuXG4gICAgZm9yIChpPTA7IGk8bnVtX2JpbnMtMTsgaSsrKVxuICAgICAgICBhaVtpXS5yZXNldCgpO1xuXG4gICAgc3BsaXRfaW5mby5udW1fYmlucyA9IG51bV9iaW5zO1xuXG4gICAgYXNzaWduX2JpbnMoYnZoLCBzdGFydCwgZW5kLCBheGlzLCBjYiwgY2JkaWFnLCBudW1fYmlucyk7XG5cblxuICAgIC8qIG5vdyBkbyB0aGUgYWNjdW11bGF0aW9uIHN3ZWVwIGZyb20gbGVmdCB0byByaWdodCAqL1xuICAgIGJveF9jb3B5XzAwKGFpWzBdLkJMLCBiaW5zWzBdLmJveF9iYm94KTtcbiAgICBib3hfY29weV8wMChhaVswXS5DTCwgYmluc1swXS5ib3hfY2VudHJvaWQpO1xuICAgIGFpWzBdLkFMID0gYm94X2FyZWFfMChhaVswXS5CTCk7XG4gICAgYWlbMF0uTkwgPSBiaW5zWzBdLm51bV9wcmltcztcbiAgICB2YXIgYmluO1xuICAgIGZvciAoaT0xOyBpPG51bV9iaW5zLTE7IGkrKylcbiAgICB7XG4gICAgICAgIGJpbiA9IGJpbnNbaV07XG4gICAgICAgIHZhciBhaWkgPSBhaVtpXTtcbiAgICAgICAgYm94X2NvcHlfMDAoYWlpLkJMLCBhaVtpLTFdLkJMKTtcbiAgICAgICAgYm94X2FkZF9ib3hfMDAoYWlpLkJMLCBiaW4uYm94X2Jib3gpO1xuICAgICAgICBhaWkuQUwgPSBib3hfYXJlYV8wKGFpaS5CTCk7XG5cbiAgICAgICAgYm94X2NvcHlfMDAoYWlpLkNMLCBhaVtpLTFdLkNMKTtcbiAgICAgICAgYm94X2FkZF9ib3hfMDAoYWlpLkNMLCBiaW4uYm94X2NlbnRyb2lkKTtcblxuICAgICAgICBhaWkuTkwgPSBhaVtpLTFdLk5MICsgYmluLm51bV9wcmltcztcbiAgICB9XG5cbiAgICAvKiBzd2VlcCBmcm9tIHJpZ2h0IHRvIGxlZnQsIGtlZXBpbmcgdHJhY2sgb2YgbG93ZXN0IGNvc3QgYW5kIHNwbGl0ICovXG4gICAgaSA9IG51bV9iaW5zIC0gMTtcbiAgICBib3hfY29weV8wMChCUiwgYmluc1tpXS5ib3hfYmJveCk7XG4gICAgYm94X2NvcHlfMDAoQ1IsIGJpbnNbaV0uYm94X2NlbnRyb2lkKTtcbiAgICB2YXIgQVIgPSBib3hfYXJlYV8wKEJSKTtcbiAgICB2YXIgTlIgPSBiaW5zW2ldLm51bV9wcmltcztcblxuICAgIHZhciBiZXN0X3NwbGl0ID0gaTtcbiAgICB2YXIgYmVzdF9jb3N0ID0gQVIgKiBOUiArIGFpW2ktMV0uQUwgKiBhaVtpLTFdLk5MO1xuICAgIGJveF9jb3B5XzAwKHNwbGl0X2luZm8udmJfcmlnaHQsIEJSKTtcbiAgICBib3hfY29weV8wMChzcGxpdF9pbmZvLmNiX3JpZ2h0LCBiaW5zW2ldLmJveF9jZW50cm9pZCk7XG4gICAgYm94X2NvcHlfMDAoc3BsaXRfaW5mby52Yl9sZWZ0LCBhaVtpLTFdLkJMKTtcbiAgICBib3hfY29weV8wMChzcGxpdF9pbmZvLmNiX2xlZnQsIGFpW2ktMV0uQ0wpO1xuICAgIHNwbGl0X2luZm8ubnVtX2xlZnQgPSBhaVtpLTFdLk5MO1xuXG4gICAgZm9yIChpPWktMTsgaT49MTsgaS0tKVxuICAgIHtcbiAgICAgICAgYmluID0gYmluc1tpXTtcbiAgICAgICAgYm94X2FkZF9ib3hfMDAoQlIsIGJpbi5ib3hfYmJveCk7XG4gICAgICAgIGJveF9hZGRfYm94XzAwKENSLCBiaW4uYm94X2NlbnRyb2lkKTtcbiAgICAgICAgQVIgPSBib3hfYXJlYV8wKEJSKTtcbiAgICAgICAgTlIgKz0gYmluLm51bV9wcmltcztcblxuICAgICAgICB2YXIgY3VyX2Nvc3QgPSBBUiAqIE5SICsgYWlbaS0xXS5BTCAqIGFpW2ktMV0uTkw7XG5cbiAgICAgICAgaWYgKGN1cl9jb3N0IDw9IGJlc3RfY29zdClcbiAgICAgICAge1xuICAgICAgICAgICAgYmVzdF9jb3N0ID0gY3VyX2Nvc3Q7XG4gICAgICAgICAgICBiZXN0X3NwbGl0ID0gaTtcblxuICAgICAgICAgICAgYm94X2NvcHlfMDAoc3BsaXRfaW5mby52Yl9yaWdodCwgQlIpO1xuICAgICAgICAgICAgYm94X2NvcHlfMDAoc3BsaXRfaW5mby5jYl9yaWdodCwgQ1IpO1xuICAgICAgICAgICAgYm94X2NvcHlfMDAoc3BsaXRfaW5mby52Yl9sZWZ0LCBhaVtpLTFdLkJMKTtcbiAgICAgICAgICAgIGJveF9jb3B5XzAwKHNwbGl0X2luZm8uY2JfbGVmdCwgYWlbaS0xXS5DTCk7XG4gICAgICAgICAgICBzcGxpdF9pbmZvLm51bV9sZWZ0ID0gYWlbaS0xXS5OTDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNwbGl0X2luZm8uYmVzdF9zcGxpdCA9IGJlc3Rfc3BsaXQ7XG4gICAgc3BsaXRfaW5mby5iZXN0X2Nvc3QgPSBiZXN0X2Nvc3Q7XG59XG5cbmZ1bmN0aW9uIGJ2aF9wYXJ0aXRpb24oYnZoLCBzdGFydCwgZW5kLCBheGlzLCBjYiwgY2JkaWFnLCBzcGxpdF9pbmZvKSB7XG5cbiAgICAvL0F0IHRoaXMgcG9pbnQsIHRoZSBvcmlnaW5hbCBhbGdvcml0aG0gZG9lcyBhbiBpbi1wbGFjZSBOT04tU1RBQkxFIHBhcnRpdGlvblxuICAgIC8vdG8gbW92ZSBwcmltaXRpdmVzIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBzaWRlcyBvZiB0aGUgc3BsaXQgcGxhbmVcbiAgICAvL2ludG8gY29udGlndW91cyBsb2NhdGlvbiBvZiB0aGUgcHJpbWl0aXZlcyBsaXN0IGZvciB1c2UgYnlcbiAgICAvL3RoZSBjaGlsZCBub2Rlcy4gQnV0LCB3ZSB3YW50IHRvIHByZXNlcnZlIHRoZSBvcmRlcmluZyBieSBzaXplXG4gICAgLy93aXRob3V0IGhhdmluZyB0byBkbyBhbm90aGVyIHNvcnQsIHNvIHdlIGhhdmUgdG8gdXNlXG4gICAgLy9hIHRlbXBvcmFyeSBzdG9yYWdlIGxvY2F0aW9uIHRvIGNvcHkgaW50by4gV2UgcGxhY2UgcmlnaHQtc2lkZSBwcmltaXRpdmVzXG4gICAgLy9pbiB0ZW1wb3Jhcnkgc3RvcmFnZSwgdGhlbiBjb3B5IGJhY2sgaW50byB0aGUgb3JpZ2luYWwgc3RvcmFnZSBpbiB0aGUgcmlnaHQgb3JkZXIuXG4gICAgLy9MZWZ0LXNpZGUgcHJpbWl0aXZlcyBhcmUgc3RpbGwgcHV0IGRpcmVjdGx5IGludG8gdGhlIGRlc3RpbmF0aW9uIGxvY2F0aW9uLlxuICAgIHZhciBwcmltaXRpdmVzID0gYnZoLnByaW1pdGl2ZXM7XG4gICAgLy92YXIgY2VudHJvaWRzID0gYnZoLmNlbnRyb2lkcztcbiAgICB2YXIgaSxqO1xuXG4gICAgLy9zb3J0X3ByaW1zIGNvbnRhaW5zIGJpbiBpbmRpY2VzIGNvbXB1dGVkIGR1cmluZyB0aGUgc3BsaXQgc3RlcC5cbiAgICAvL0hlcmUgd2UgcmVhZCB0aG9zZSBhbmQgYWxzbyB1c2Ugc29ydF9wcmltcyBhcyB0ZW1wb3JhcnkgaG9sZGluZ1xuICAgIC8vb2YgcHJpbWl0aXZlIGluZGljZXMuIEhvcGVmdWxseSB0aGUgcmVhZCBoYXBwZW5zIGJlZm9yZSB0aGUgd3JpdGUuIDopXG4gICAgLy9JbiBDIGl0IHdhcyBjaGVhcCBlbm91Z2ggdG8gY29tcHV0ZSB0aGlzIGFnYWluLi4uXG4gICAgLy92YXIgazEgPSBzcGxpdF9pbmZvLm51bV9iaW5zICogKDEuMCAtIEJPWF9TQ0FMRV9FUFNJTE9OKSAvIGNiZGlhZ1theGlzXTtcbiAgICAvL3ZhciBjYmF4aXMgPSBjYltheGlzXTtcbiAgICB2YXIgc3AgPSBidmguc29ydF9wcmltcztcblxuICAgIHZhciByaWdodCA9IDA7XG4gICAgdmFyIGxlZnQgPSBzdGFydHwwO1xuICAgIHZhciBiZXN0X3NwbGl0ID0gc3BsaXRfaW5mby5iZXN0X3NwbGl0fDA7XG5cbiAgICBmb3IgKGk9c3RhcnQ7IGk8PWVuZDsgaSsrKSB7XG4gICAgICAgIHZhciBpcHJpbSA9IHByaW1pdGl2ZXNbaV18MDtcbiAgICAgICAgLy92YXIgZnBiaW4gPSAoazEgKiAoY2VudHJvaWRzWzMvKlBPSU5UX1NUUklERSovICogaXByaW0gKyBheGlzXSAtIGNiYXhpcykpO1xuICAgICAgICB2YXIgYmluaWQgPSBzcFtpXTsgLyogZnBiaW58MDsgKi9cblxuICAgICAgICBpZiAoYmluaWQgPCBiZXN0X3NwbGl0KSB7XG4gICAgICAgICAgICBwcmltaXRpdmVzW2xlZnQrK10gPSBpcHJpbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNwW3JpZ2h0KytdID0gaXByaW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvL2lmICgobGVmdC1zdGFydCkgIT0gc3BsaXRfaW5mby5udW1fbGVmdClcbiAgICAvLyAgICBkZWJ1ZyhcIk1pc21hdGNoIGJldHdlZW4gYmlubmluZyBhbmQgcGFydGl0aW9uaW5nLlwiKTtcblxuICAgIC8vQ29weSBiYWNrIHRoZSByaWdodC1zaWRlIHByaW1pdGl2ZXMgaW50byBtYWluIHByaW1pdGl2ZXMgYXJyYXksIHdoaWxlXG4gICAgLy9tYWludGFpbmluZyBvcmRlclxuICAgIGZvciAoaj0wOyBqPHJpZ2h0OyBqKyspIHtcbiAgICAgICAgcHJpbWl0aXZlc1tsZWZ0K2pdID0gc3Bbal07XG4gICAgfVxuICAgIC8qIGF0IHRoaXMgcG9pbnQgdGhlIGJpbm5pbmcgaXMgY29tcGxldGUgYW5kIHdlIGhhdmUgY29tcHV0ZWQgYSBzcGxpdCAqL1xufVxuXG5cbmZ1bmN0aW9uIGJ2aF9mYXR0ZW5faW5uZXJfbm9kZShidmgsIG5vZGVzLCBub2RlaWR4LCBzdGFydCwgZW5kLCBjYiwgY2JkaWFnLCBwb2x5X2N1dF9vZmYpIHtcblxuICAgIHZhciBwcmltaXRpdmVzID0gYnZoLnByaW1pdGl2ZXM7XG4gICAgdmFyIGNlbnRyb2lkcyA9IGJ2aC5jZW50cm9pZHM7XG5cbiAgICAvL1Rha2UgdGhlIGZpcnN0IGZldyBpdGVtcyB0byBwbGFjZSBpbnRvIHRoZSBpbm5lciBub2RlLFxuICAgIC8vYnV0IGRvIG5vdCBnbyBvdmVyIHRoZSBtYXggaXRlbSBvciBwb2x5Z29uIGNvdW50LlxuICAgIHZhciBwcmltX2NvdW50ID0gZW5kIC0gc3RhcnQgKyAxO1xuXG4gICAgaWYgKHByaW1fY291bnQgPiBidmguZnJhZ3NfcGVyX2lubmVyX25vZGUpXG4gICAgICAgIHByaW1fY291bnQgPSBidmguZnJhZ3NfcGVyX2lubmVyX25vZGU7XG5cbiAgICBpZiAocHJpbV9jb3VudCA+IHBvbHlfY3V0X29mZilcbiAgICAgICAgcHJpbV9jb3VudCA9IHBvbHlfY3V0X29mZjtcblxuXG4gICAgbm9kZXMuc2V0UHJpbVN0YXJ0KG5vZGVpZHgsIHN0YXJ0KTtcbiAgICBub2Rlcy5zZXRQcmltQ291bnQobm9kZWlkeCwgcHJpbV9jb3VudCk7XG4gICAgc3RhcnQgKz0gcHJpbV9jb3VudDtcblxuICAgIC8vQmVjYXVzZSB3ZSB0YWtlIHNvbWUgcHJpbWl0aXZlcyBvZmYgdGhlIGlucHV0LCB3ZSBoYXZlIHRvIHJlY29tcHV0ZVxuICAgIC8vdGhlIGJvdW5kaW5nIGJveCB1c2VkIGZvciBjb21wdXRpbmcgdGhlIG5vZGUgc3BsaXQuXG4gICAgYm94X21ha2VfZW1wdHlfMChjYik7XG4gICAgZm9yICh2YXIgaT1zdGFydDsgaTw9ZW5kOyBpKyspIHtcbiAgICAgICAgYm94X2FkZF9wb2ludF8wKGNiLCBjZW50cm9pZHMsIDMvKlBPSU5UX1NUUklERSovICogcHJpbWl0aXZlc1tpXSk7XG4gICAgfVxuXG4gICAgLy9BbHNvIHVwZGF0ZSB0aGUgc3BsaXQgYXhpcyAtLSBpdCBjb3VsZCBwb3NzaWJseSBjaGFuZ2UgdG9vLlxuICAgIGJveF9nZXRfc2l6ZShjYmRpYWcsIDAsIGNiLCAwKTtcbiAgICAvL0RlY2lkZSB3aGljaCBheGlzIHRvIHNwbGl0IG9uLiBEb25lIHB1cmVseSBieSBsb25nZXN0LlxuICAgIHZhciBheGlzID0gMDtcbiAgICBpZiAoY2JkaWFnWzFdID4gY2JkaWFnWzBdKVxuICAgICAgICBheGlzID0gMTtcbiAgICBpZiAoY2JkaWFnWzJdID4gY2JkaWFnW2F4aXNdKVxuICAgICAgICBheGlzID0gMjtcblxuICAgIHJldHVybiBheGlzO1xufVxuXG5cbnZhciBjYmRpYWcgPSBuZXcgRmxvYXQzMkFycmF5KDMpOyAvL3NjcmF0Y2ggdmFyaWFibGUgdXNlZCBpbiBidmhfc3ViZGl2aWRlXG5cbmZ1bmN0aW9uIGJ2aF9zdWJkaXZpZGUoYnZoLFxuICAgICAgICAgICAgICAgICAgICAgICBub2RlaWR4LCAvKiBjdXJyZW50IHBhcmVudCBub2RlIHRvIGNvbnNpZGVyIHNwbGl0dGluZyAqL1xuICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCAvKiBwcmltaXRpdmUgc3ViLXJhbmdlIHRvIGJlIGNvbnNpZGVyZWQgYXQgdGhpcyByZWN1cnNpb24gc3RlcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICB2YiwgLyogYm91bmRpbmcgdm9sdW1lIG9mIHRoZSBwcmltaXRpdmVzJyBib3VuZHMgaW4gdGhlIHN1Yi1yYW5nZSAqL1xuICAgICAgICAgICAgICAgICAgICAgICBjYiwgLyogYm91bmRpbmcgYm94IG9mIHByaW1pdGl2ZSBjZW50cm9pZHMgaW4gdGhpcyByYW5nZSAqL1xuICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCwgLyogZG9lcyB0aGUgbm9kZSBjb250YWluIG9wYXF1ZSBvciB0cmFuc3BhcmVudCBvYmplY3RzICovXG4gICAgICAgICAgICAgICAgICAgICAgIGRlcHRoIC8qIHJlY3Vyc2lvbiBkZXB0aCAqL1xuICAgICAgICAgICAgICAgICAgICAgICApXG57XG4gICAgYm94X2dldF9zaXplKGNiZGlhZywgMCwgY2IsIDApO1xuICAgIHZhciBub2RlcyA9IGJ2aC5ub2RlcztcbiAgICB2YXIgZnJhZ3NfcGVyX2xlYWYgPSB0cmFuc3BhcmVudCA/IGJ2aC5mcmFnc19wZXJfbGVhZl9ub2RlX3RyYW5zcGFyZW50IDogYnZoLmZyYWdzX3Blcl9sZWFmX25vZGU7XG4gICAgdmFyIGZyYWdzX3Blcl9pbm5lciA9IHRyYW5zcGFyZW50ID8gYnZoLmZyYWdzX3Blcl9pbm5lcl9ub2RlX3RyYW5zcGFyZW50IDogYnZoLmZyYWdzX3Blcl9pbm5lcl9ub2RlO1xuICAgIHZhciBwb2x5c19wZXJfbm9kZSA9IGJ2aC5tYXhfcG9seXNfcGVyX25vZGU7XG5cbiAgICAvL0RlY2lkZSB3aGljaCBheGlzIHRvIHNwbGl0IG9uLlxuICAgIHZhciBheGlzID0gMDtcbiAgICBpZiAoY2JkaWFnWzFdID4gY2JkaWFnWzBdKVxuICAgICAgICBheGlzID0gMTtcbiAgICBpZiAoY2JkaWFnWzJdID4gY2JkaWFnW2F4aXNdKVxuICAgICAgICBheGlzID0gMjtcblxuICAgIC8vV2hldGhlciB0aGUgbm9kZSBnZXRzIHNwbGl0IG9yIG5vdCwgaXQgZ2V0c1xuICAgIC8vdGhlIHNhbWUgb3ZlcmFsbCBib3VuZGluZyBib3guXG4gICAgbm9kZXMuc2V0Qm94MChub2RlaWR4LCB2Yik7XG5cbiAgICAvL0NoZWNrIHRoZSBleHBlY3RlZCBwb2x5Z29uIGNvdW50IG9mIHRoZSBub2RlLiBUaGlzIGZpZ3VyZXMgb3V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFnbWVudHNcbiAgICAvLyB3ZSBjYW4gcHV0IGF0IHRoZSBub2RlIGFzIGRldGVybWluZWQgYnkgcG9seXNfcGVyX25vZGVcbiAgICB2YXIgcG9seV9jb3VudCA9IDA7XG4gICAgdmFyIHBvbHlfY3V0X29mZiA9IDA7XG4gICAgdmFyIHByaW1fY291bnQgPSBlbmQgLSBzdGFydCArIDE7XG5cbiAgICAvLyBJZiB3ZSBoYXZlIHRoZSBudW1iZXIgb2YgdHJpYW5nbGVzIGluIGVhY2ggbWVzaCwgbGltaXQgdGhlIG51bWJlciBvZiBwcmltaXRpdmVzIGluIGFuIGlubmVyIG5vZGUuXG4gICAgaWYgKGJ2aC5maW5mby5oYXNQb2x5Z29uQ291bnRzICYmIGJ2aC5mcmFnc19wZXJfaW5uZXJfbm9kZSkge1xuICAgICAgICAvLyBXYWxrIHRocm91Z2ggcHJpbWl0aXZlcywgYWRkIHVwIHRoZSBjb3VudHMgdW50aWwgd2UgcmVhY2ggcG9seXNfcGVyX25vZGUgKDEwMDAwKSwgb3IgcnVuIHRocm91Z2hcbiAgICAgICAgLy8gZnJhZ3NfcGVyX2lubmVyX25vZGUgKHVzdWFsbHkgMzIpLlxuICAgICAgICAvLyBXZSBrbm93IHRoYXQgbGF0ZXIgb24gd2UnbGwgbGltaXQgdGhlIG51bWJlciB0byBmcmFnc19wZXJfaW5uZXJfbm9kZSwgc28gYWxzbyBkbyBpdCBoZXJlLlxuICAgICAgICB2YXIgc2hvcnRlbl9lbmQgPSAocHJpbV9jb3VudCA8PSBidmguZnJhZ3NfcGVyX2lubmVyX25vZGUpID8gZW5kIDogc3RhcnQgKyBidmguZnJhZ3NfcGVyX2lubmVyX25vZGUgLSAxO1xuICAgICAgICBmb3IgKHZhciBpPXN0YXJ0OyBpPD1zaG9ydGVuX2VuZDsgaSsrKSB7XG4gICAgICAgICAgICBwb2x5X2NvdW50ICs9IGJ2aC5maW5mby5nZXRQb2x5Z29uQ291bnQoYnZoLnByaW1pdGl2ZXNbaV0pO1xuICAgICAgICAgICAgcG9seV9jdXRfb2ZmKys7XG4gICAgICAgICAgICBpZiAocG9seV9jb3VudCA+IHBvbHlzX3Blcl9ub2RlKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzU21hbGwgPSAoKHByaW1fY291bnQgPD0gZnJhZ3NfcGVyX2xlYWYpICYmIChwb2x5X2NvdW50IDwgcG9seXNfcGVyX25vZGUpKSB8fFxuICAgICAgICAgICAgICAgICAgKHByaW1fY291bnQgPT09IDEpO1xuXG4gICAgLy9EZWNpZGUgd2hldGhlciB0byB0ZXJtaW5hdGUgcmVjdXJzaW9uXG4gICAgaWYgKGlzU21hbGwgfHxcbiAgICAgIGRlcHRoID4gTUFYX0RFUFRIIHx8IC8vbWF4IHJlY3Vyc2lvbiBkZXB0aFxuICAgICAgY2JkaWFnW2F4aXNdIDwgYnZoLnNjZW5lX2Vwc2lsb24pIC8vbm9kZSB3b3VsZCBiZSB3YXkgdG9vIHRpbnkgZm9yIG1hdGggdG8gbWFrZSBzZW5zZSAoYSBwb2ludClcbiAgICB7XG4gICAgICAgIG5vZGVzLnNldExlZnRDaGlsZChub2RlaWR4LCAtMSk7XG4gICAgICAgIG5vZGVzLnNldFByaW1TdGFydChub2RlaWR4LCBzdGFydCk7XG4gICAgICAgIG5vZGVzLnNldFByaW1Db3VudChub2RlaWR4LCBlbmQtc3RhcnQrMSk7XG4gICAgICAgIG5vZGVzLnNldEZsYWdzKG5vZGVpZHgsIDAsIDAsIHRyYW5zcGFyZW50ID8gMSA6IDApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9QaWNrIHRoZSBsYXJnZXN0IChmaXJzdCkgcHJpbWl0aXZlcyB0byBsaXZlIGluIHRoaXMgbm9kZVxuICAgIC8vTk9URTogdGhpcyBhc3N1bWVzIHByaW1pdGl2ZXMgYXJlIHNvcnRlZCBieSBzaXplLlxuICAgIC8vTk9URTogVGhpcyBzdGVwIGlzIGFuIG9wdGlvbmFsIGRlcGFydHVyZSBmcm9tIHRoZSBvcmlnaW5hbCwgYW5kIHdlIGFsc28gZG8gYSBjaGVjayBmb3IgaXQgYWJvdmVcbiAgICAvLyB0byBjb21wdXRlIHBvbHlfY3V0X29mZi5cbiAgICBpZiAoZnJhZ3NfcGVyX2lubmVyKSB7XG4gICAgICAgIGF4aXMgPSBidmhfZmF0dGVuX2lubmVyX25vZGUoYnZoLCBub2Rlcywgbm9kZWlkeCwgc3RhcnQsIGVuZCwgY2IsIGNiZGlhZywgcG9seV9jdXRfb2ZmKTtcbiAgICAgICAgc3RhcnQgPSBzdGFydCArIG5vZGVzLmdldFByaW1Db3VudChub2RlaWR4KTtcbiAgICB9XG5cbiAgICB2YXIgc3BsaXRfaW5mbyA9IG5ldyBidmhfc3BsaXRfaW5mbygpO1xuXG4gICAgLy9EbyB0aGUgYmlubmluZyBvZiB0aGUgcmVtYWluaW5nIHByaW1pdGl2ZXMgdG8gZ28gaW50byBjaGlsZCBub2Rlc1xuICAgIGJ2aF9iaW5fYXhpcyhidmgsIHN0YXJ0LCBlbmQsIGF4aXMsIGNiLCBjYmRpYWcsIHNwbGl0X2luZm8pO1xuXG4gICAgaWYgKHNwbGl0X2luZm8ubnVtX2JpbnMgPCAwKSB7XG4gICAgICAgIC8vU3BsaXQgd2FzIHRvbyBjb3N0bHksIHNvIGFkZCBhbGwgb2JqZWN0cyB0byB0aGUgY3VycmVudCBub2RlIGFuZCBiYWlsXG4gICAgICAgIG5vZGVzLnNldFByaW1Db3VudChub2RlaWR4LCBub2Rlcy5nZXRQcmltQ291bnQobm9kZWlkeCkgKyBlbmQgLSBzdGFydCArIDEpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnZoX3BhcnRpdGlvbihidmgsIHN0YXJ0LCBlbmQsIGF4aXMsIGNiLCBjYmRpYWcsIHNwbGl0X2luZm8pO1xuXG4gICAgdmFyIGNoaWxkX2lkeCA9IG5vZGVzLm5leHROb2RlcygyKTtcblxuICAgIC8qIHNldCBpbmZvIGFib3V0IHNwbGl0IGludG8gdGhlIG5vZGUgKi9cbiAgICB2YXIgY2xlZnQgPSAoc3BsaXRfaW5mby52Yl9sZWZ0WzMrYXhpc10gKyBzcGxpdF9pbmZvLnZiX2xlZnRbYXhpc10pICogMC41O1xuICAgIHZhciBjcmlnaHQgPSAoc3BsaXRfaW5mby52Yl9yaWdodFszK2F4aXNdICsgc3BsaXRfaW5mby52Yl9yaWdodFtheGlzXSkgKiAwLjU7XG5cbiAgICBub2Rlcy5zZXRGbGFncyhub2RlaWR4LCBheGlzLCBjbGVmdCA8IGNyaWdodCA/IDAgOiAxLCB0cmFuc3BhcmVudCA/IDEgOiAwKTtcbiAgICBub2Rlcy5zZXRMZWZ0Q2hpbGQobm9kZWlkeCwgY2hpbGRfaWR4KTtcblxuXG4gICAgLyogdmFsaWRhdGUgc3BsaXQgKi9cbiAgICAvKlxuICAgIGlmICh0cnVlKSB7XG4gICAgICAgIGZvciAodmFyIGk9c3RhcnQ7IGk8IHN0YXJ0K251bV9sZWZ0OyBpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vaW50IGJpbmlkID0gKGludCkoazEgKiAoaW5mby0+cHJpbV9pbmZvW2luZm8tPmJ2aC0+aXByaW1zW2ldXS5jZW50cm9pZC52W2F4aXNdIC0gY2ItPm1pbi52W2F4aXNdKSk7XG4gICAgICAgICAgICB2YXIgY2VuID0gcHJpbWl0aXZlc1tpXSAqIFBPSU5UX1NUUklERTtcbiAgICAgICAgICAgIGlmICggICBjZW50cm9pZHNbY2VuXSA8IHNwbGl0X2luZm8uY2JfbGVmdFswXVxuICAgICAgICAgICAgICAgIHx8IGNlbnRyb2lkc1tjZW5dID4gc3BsaXRfaW5mby5jYl9sZWZ0WzNdXG4gICAgICAgICAgICAgICAgfHwgY2VudHJvaWRzW2NlbisxXSA8IHNwbGl0X2luZm8uY2JfbGVmdFsxXVxuICAgICAgICAgICAgICAgIHx8IGNlbnRyb2lkc1tjZW4rMV0gPiBzcGxpdF9pbmZvLmNiX2xlZnRbNF1cbiAgICAgICAgICAgICAgICB8fCBjZW50cm9pZHNbY2VuKzJdIDwgc3BsaXRfaW5mby5jYl9sZWZ0WzJdXG4gICAgICAgICAgICAgICAgfHwgY2VudHJvaWRzW2NlbisyXSA+IHNwbGl0X2luZm8uY2JfbGVmdFs1XSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkZWJ1ZyAoXCJ3cm9uZyBjZW50cm9pZCBib3hcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGk9c3RhcnQrbnVtX2xlZnQ7IGk8PWVuZDsgaSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL2ludCBiaW5pZCA9IChpbnQpKGsxICogKGluZm8tPnByaW1faW5mb1tpbmZvLT5idmgtPmlwcmltc1tpXV0uY2VudHJvaWQudltheGlzXSAtIGNiLT5taW4udltheGlzXSkpO1xuICAgICAgICAgICAgdmFyIGNlbiA9IHByaW1pdGl2ZXNbaV0gKiBQT0lOVF9TVFJJREU7XG4gICAgICAgICAgICBpZiAoICAgY2VudHJvaWRzW2Nlbl0gPCBzcGxpdF9pbmZvLmNiX3JpZ2h0WzBdXG4gICAgICAgICAgICAgICAgfHwgY2VudHJvaWRzW2Nlbl0gPiBzcGxpdF9pbmZvLmNiX3JpZ2h0WzNdXG4gICAgICAgICAgICAgICAgfHwgY2VudHJvaWRzW2NlbisxXSA8IHNwbGl0X2luZm8uY2JfcmlnaHRbMV1cbiAgICAgICAgICAgICAgICB8fCBjZW50cm9pZHNbY2VuKzFdID4gc3BsaXRfaW5mby5jYl9yaWdodFs0XVxuICAgICAgICAgICAgICAgIHx8IGNlbnRyb2lkc1tjZW4rMl0gPCBzcGxpdF9pbmZvLmNiX3JpZ2h0WzJdXG4gICAgICAgICAgICAgICAgfHwgY2VudHJvaWRzW2NlbisyXSA+IHNwbGl0X2luZm8uY2JfcmlnaHRbNV0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGVidWcgKFwid3JvbmcgY2VudHJvaWQgYm94XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICovXG5cbiAgICAvKiByZWN1cnNlICovXG4gICAvL2J2aF9zdWJkaXZpZGUoYnZoLCBjaGlsZF9pZHgsIHN0YXJ0LCBzdGFydCArIHNwbGl0X2luZm8ubnVtX2xlZnQgLSAxLCBzcGxpdF9pbmZvLnZiX2xlZnQsIHNwbGl0X2luZm8uY2JfbGVmdCwgdHJhbnNwYXJlbnQsIGRlcHRoKzEpO1xuICAgLy9idmhfc3ViZGl2aWRlKGJ2aCwgY2hpbGRfaWR4ICsgMSwgc3RhcnQgKyBzcGxpdF9pbmZvLm51bV9sZWZ0LCBlbmQsIHNwbGl0X2luZm8udmJfcmlnaHQsIHNwbGl0X2luZm8uY2JfcmlnaHQsIHRyYW5zcGFyZW50LCBkZXB0aCsxKTtcblxuICAgIC8vSXRlcmF0aXZlIHN0YWNrLWJhc2VkIHJlY3Vyc2lvbiBmb3IgZWFzaWVyIHByb2ZpbGluZ1xuICAgYnZoLnJlY3Vyc2lvbl9zdGFjay5wdXNoKFtidmgsIGNoaWxkX2lkeCArIDEsIHN0YXJ0ICsgc3BsaXRfaW5mby5udW1fbGVmdCwgZW5kLCBzcGxpdF9pbmZvLnZiX3JpZ2h0LCBzcGxpdF9pbmZvLmNiX3JpZ2h0LCB0cmFuc3BhcmVudCwgZGVwdGgrMV0pO1xuICAgYnZoLnJlY3Vyc2lvbl9zdGFjay5wdXNoKFtidmgsIGNoaWxkX2lkeCwgc3RhcnQsIHN0YXJ0ICsgc3BsaXRfaW5mby5udW1fbGVmdCAtIDEsIHNwbGl0X2luZm8udmJfbGVmdCwgc3BsaXRfaW5mby5jYl9sZWZ0LCB0cmFuc3BhcmVudCwgZGVwdGgrMV0pO1xuXG59XG5cblxuZnVuY3Rpb24gY29tcHV0ZV9ib3hlcyhidmgpIHtcblxuICAgIHZhciBib3h2X28gPSBidmguYm94dl9vO1xuICAgIHZhciBib3hjX28gPSBidmguYm94Y19vO1xuICAgIHZhciBib3h2X3QgPSBidmguYm94dl90O1xuICAgIHZhciBib3hjX3QgPSBidmguYm94Y190O1xuXG4gICAgYm94X21ha2VfZW1wdHlfMChib3h2X28pO1xuICAgIGJveF9tYWtlX2VtcHR5XzAoYm94Y19vKTtcbiAgICBib3hfbWFrZV9lbXB0eV8wKGJveHZfdCk7XG4gICAgYm94X21ha2VfZW1wdHlfMChib3hjX3QpO1xuXG4gICAgdmFyIGMgPSBidmguY2VudHJvaWRzO1xuICAgIHZhciBiID0gYnZoLmZpbmZvLmJveGVzO1xuICAgIHZhciBib3hTdHJpZGUgPSBidmguZmluZm8uYm94U3RyaWRlO1xuXG4gICAgZm9yICh2YXIgaT0wLCBpRW5kPWJ2aC5wcmltX2NvdW50OyBpPGlFbmQ7IGkrKykge1xuXG4gICAgICAgIC8vIGZpbmQgd2hpY2ggcHJpbWl0aXZlIGluIHRoZSBzb3J0ZWQgbGlzdCB0byB1c2UgbmV4dFxuICAgICAgICB2YXIgcCA9IGJ2aC5wcmltaXRpdmVzW2ldO1xuICAgICAgICBib3hfZ2V0X2NlbnRyb2lkKGMsIDMvKlBPSU5UX1NUUklERSovKnAsIGIsIGJveFN0cmlkZSpwKTtcblxuICAgICAgICBpZiAoaSA+PSBidmguZmlyc3RfdHJhbnNwYXJlbnQpIHtcblxuICAgICAgICAgICAgYm94X2FkZF9wb2ludF8wKGJveGNfdCwgYywgMy8qUE9JTlRfU1RSSURFKi8qcCk7XG4gICAgICAgICAgICBib3hfYWRkX2JveF8wKGJveHZfdCwgYiwgYm94U3RyaWRlKnApO1xuXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGJveF9hZGRfcG9pbnRfMChib3hjX28sIGMsIDMvKlBPSU5UX1NUUklERSovKnApO1xuICAgICAgICAgICAgYm94X2FkZF9ib3hfMChib3h2X28sIGIsIGJveFN0cmlkZSpwKTtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYm94X2dldF9zaXplKGNiZGlhZywgMCwgYnZoLmJveHZfbywgMCk7XG4gICAgdmFyIG1heHN6ID0gTWF0aC5tYXgoY2JkaWFnWzBdLCBjYmRpYWdbMV0sIGNiZGlhZ1syXSk7XG4gICAgYnZoLnNjZW5lX2Vwc2lsb24gPSBCT1hfRVBTSUxPTiAqIG1heHN6O1xufVxuXG5cblxuXG4gICAgLy9Nb2R1bGUgZXhwb3J0c1xuICAgIHJldHVybiB7XG4gICAgICAgIGJ2aF9zdWJkaXZpZGUgOiBidmhfc3ViZGl2aWRlLFxuICAgICAgICBjb21wdXRlX2JveGVzIDogY29tcHV0ZV9ib3hlcyxcbiAgICAgICAgYm94X2FyZWEgOiBib3hfYXJlYVxuICAgIH07XG5cbn0oKTtcblxuXG5mdW5jdGlvbiBGcmFnSW5mbyhmcmFnbWVudHMsIG1hdGVyaWFsRGVmcykge1xuICAgIC8vSW52YXJpYW50c1xuICAgIHRoaXMuYm94ZXMgPSBmcmFnbWVudHMuYm94ZXM7IC8vQXJyYXkgb2YgRmxvYXQzMiwgZWFjaCBiYm94IGlzIGEgc2V4dHVwbGV0XG4gICAgdGhpcy5wb2x5Z29uQ291bnRzID0gZnJhZ21lbnRzLnBvbHlnb25Db3VudHM7XG4gICAgdGhpcy5oYXNQb2x5Z29uQ291bnRzID0gISF0aGlzLnBvbHlnb25Db3VudHM7XG4gICAgdGhpcy5tYXRlcmlhbHMgPSBmcmFnbWVudHMubWF0ZXJpYWxzOyAvL21hdGVyaWFsIGluZGljZXMgKHdlIG5lZWQgdG8ga25vdyB3aGljaCBmcmFnbWVudHMgYXJlIHRyYW5zcGFyZW50KVxuICAgIHRoaXMubWF0ZXJpYWxEZWZzID0gbWF0ZXJpYWxEZWZzO1xuICAgIHRoaXMuY291bnQgPSBmcmFnbWVudHMubGVuZ3RoO1xuICAgIHRoaXMuYm94U3RyaWRlID0gNjtcbiAgICB0aGlzLndhbnRTb3J0ID0gdHJ1ZTtcbn1cblxuRnJhZ0luZm8ucHJvdG90eXBlLmdldENvdW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnQ7XG59O1xuXG5GcmFnSW5mby5wcm90b3R5cGUuaXNUcmFuc3BhcmVudCA9IGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRlcmlhbERlZnMgJiYgdGhpcy5tYXRlcmlhbERlZnNbdGhpcy5tYXRlcmlhbHNbaV1dID8gdGhpcy5tYXRlcmlhbERlZnNbdGhpcy5tYXRlcmlhbHNbaV1dLnRyYW5zcGFyZW50IDogZmFsc2U7XG59O1xuXG5GcmFnSW5mby5wcm90b3R5cGUuZ2V0UG9seWdvbkNvdW50ID0gZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiB0aGlzLnBvbHlnb25Db3VudHNbaV07XG59O1xuXG4vKipcbiAqIEdpdmVuIGEgbGlzdCBvZiBMTVYgZnJhZ21lbnRzLCBidWlsZHMgYSBzcGF0aWFsIGluZGV4IGZvciB2aWV3LWRlcGVuZGVudCB0cmF2ZXJzYWwgYW5kIGhpdCB0ZXN0aW5nLlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBCVkhCdWlsZGVyKGZyYWdtZW50cywgbWF0ZXJpYWxEZWZzLCBmaW5mbykge1xuXG4gICAgLy9Jbml0aWFsaXplIHRoZSBpbnB1dHMgKGJib3hlcywgdHJhbnNwYXJlbnQgZmxhZ3MsIHBvbHlnb24gY291bnRzKVxuICAgIHRoaXMuZmluZm8gPSBmaW5mbyB8fCBuZXcgRnJhZ0luZm8oZnJhZ21lbnRzLCBtYXRlcmlhbERlZnMpO1xuXG4gICAgdGhpcy5wcmltX2NvdW50ID0gdGhpcy5maW5mby5nZXRDb3VudCgpO1xuXG4gICAgLy9UbyBiZSBpbml0aWFsaXplZCBieSBidWlsZCgpIGZ1bmN0aW9uIGJhc2VkIG9uIGJ1aWxkIG9wdGlvbnNcbiAgICB0aGlzLmZyYWdzX3Blcl9sZWFmX25vZGUgPSAtMTtcbiAgICB0aGlzLmZyYWdzX3Blcl9pbm5lcl9ub2RlID0gLTE7XG4gICAgdGhpcy5ub2RlcyA9IG51bGw7XG5cbiAgICB0aGlzLndvcmtfYnVmID0gbmV3IEFycmF5QnVmZmVyKHRoaXMucHJpbV9jb3VudCAqIDQpO1xuICAgIHRoaXMuc29ydF9wcmltcyA9IG5ldyBJbnQzMkFycmF5KHRoaXMud29ya19idWYpO1xuXG4gICAgLy9BbGxvY2F0ZSBtZW1vcnkgYnVmZmVyIGZvciByZS1vcmRlcmVkIGZyYWdtZW50IHByaW1pdGl2ZSBpbmRpY2VzLFxuICAgIC8vd2hpY2ggd2lsbCBiZSBzb3J0ZWQgYnkgbm9kZSBvd25lcnNoaXAgYW5kIHBvaW50IHRvIHRoZSBpbmRleFxuICAgIC8vb2YgdGhlIGZyYWdtZW50IGRhdGEuXG4gICAgdGhpcy5wcmltaXRpdmVzID0gbmV3IEludDMyQXJyYXkodGhpcy5wcmltX2NvdW50KTtcblxuICAgIC8vVGhlIEJWSCBzcGxpdCBhbGdvcml0aG0gd29ya3MgYmFzZWQgb24gY2VudHJvaWRzIG9mIHRoZSBiYm94ZXMuXG4gICAgdGhpcy5jZW50cm9pZHMgPSBuZXcgRmxvYXQzMkFycmF5KFBPSU5UX1NUUklERSAqIHRoaXMucHJpbV9jb3VudCk7XG5cbiAgICAvL0JCb3hlcyBhbmQgY2VudHJvaWQgYmJveGVzIGZvciBvcGFxdWUgYW5kIHRyYW5zcGFyZW50IHByaW1pdGl2ZSBzZXRzXG4gICAgdGhpcy5ib3h2X28gPSBuZXcgRmxvYXQzMkFycmF5KDYpO1xuICAgIHRoaXMuYm94Y19vID0gbmV3IEZsb2F0MzJBcnJheSg2KTtcbiAgICB0aGlzLmJveHZfdCA9IG5ldyBGbG9hdDMyQXJyYXkoNik7XG4gICAgdGhpcy5ib3hjX3QgPSBuZXcgRmxvYXQzMkFycmF5KDYpO1xuXG5cbiAgICB0aGlzLnJlY3Vyc2lvbl9zdGFjayA9IFtdO1xufVxuXG5CVkhCdWlsZGVyLnByb3RvdHlwZS5zb3J0UHJpbWl0aXZlcyA9IGZ1bmN0aW9uKHdhbnRTb3J0KSB7XG5cbiAgICB2YXIgcHJpbV9zaXplcyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy53b3JrX2J1Zik7XG4gICAgdmFyIHByaW1pdGl2ZXMgPSB0aGlzLnByaW1pdGl2ZXM7XG4gICAgdmFyIG51bVRyYW5zcGFyZW50ID0gMDtcblxuICAgIC8vU29ydCB0aGUgaW5wdXQgb2JqZWN0cyBieSBzaXplXG4gICAgLy9XZSBhc3N1bWUgYWxsIExNViBTVkYgZmlsZXMgY29tZVxuICAgIC8vc29ydGVkIGJ5IGRyYXcgcHJpb3JpdHkgYWxyZWFkeSwgc28gaW4gdGhlb3J5IHdlIGNhbiBza2lwIHRoaXMgc3RlcC5cbiAgICAvL1RoaXMgdHVybnMgb3V0IHRvIG5vdCBiZSB0aGUgY2FzZSAtIHNvbWUgZnJhZ21lbnRzIGFyZSBiYWRseSBzb3J0ZWQuXG4gICAgLy9QYXJ0IG9mIHRoZSByZWFzb24gbWF5IGJlIHRoYXQgdGhlIHN1cmZhY2UgYXJlYSBvZiB0aGUgZ2VvbWV0cnkgaXRzZWxmLFxuICAgIC8vbm90IGl0cyBib3VuZGluZyBib3gsIGlzIHVzZWQgdG8gc29ydCBieSBwaHlzaWNhbCBzaXplIGluIExNVlRLLlxuICAgIC8vSW4gYW55IGNhc2UsIHRoZSB0cmFuc3BhcmVudCBvYmplY3RzIGRvIG5vdCBhbHdheXMgY29tZSBsYXN0IChidWcgaW4gTE1WVEs/KSxcbiAgICAvL3NvIHdlIHN0aWxsIGhhdmUgdG8gcHVsbCB0aGVtIG91dCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LCBzbyBzb21lIHNvcnRpbmdcbiAgICAvL3Rha2VzIHBsYWNlIG5vIG1hdHRlciBob3cgdGhpcyB2YWx1ZSBpcyBzZXQuXG4gICAgLy8gVHVybmluZyB0aGlzIG9wdGlvbiBvbiB3aWxsIG1lYW4gdGhhdCB0aGUgQlZIIGJ1aWxkaW5nIHByb2Nlc3MgYXMgYSB3aG9sZVxuICAgIC8vIHdpbGwgYmUgNDUlIHRvIDc1JSBsb25nZXIsIGZvciBsYXJnZSBtb2RlbHMgLSBmdWxsIHNvcnRpbmcgdGFrZXMgYXdoaWxlLlxuICAgIC8vIEluIGFic29sdXRlIHRlcm1zIHRoaXMgaXMgYW4gaW5jcmVhc2Ugb2YgYSBtYXhpbXVtIG9mIDEuMTUgc2Vjb25kcyBmb3IgYVxuICAgIC8vIHZlcnkgbGFyZ2UgbW9kZWwgKG9uZSB3aXRoIG92ZXIgMSBtaWxsaW9uIGZyYWdtZW50cywgaS5lLiwgbWVzaCBpbnN0YW5jZXMpLlxuICAgIC8vIFRoaXMgY29zdCBtYXkgYmUgYWNjZXB0YWJsZS4gRm9yIHNtYWxsZXIgbW9kZWxzIC0gXCJvbmx5XCIgNzBLIGluc3RhbmNlcyAtXG4gICAgLy8gdGhlIGNvc3QgaXMgMC4wNSBzZWNvbmRzLiBGb3IgMTMwayBpbnN0YW5jZXMsIDAuMSBzZWNvbmRzLiBUaGUgcmlzZSBpc1xuICAgIC8vIHNsaWdodGx5IG1vcmUgdGhhbiBsaW5lYXIsIGJ1dCBub3QgZXhjZXNzaXZlbHkgc2xvdy4gSSB0aGluayBpdCdzIGFjY2VwdGFibGUsXG4gICAgLy8gZ2l2ZW4gdGhhdCB0aGUgY29zdCBpcyBzdGlsbCBtdWNoIGxlc3MgdGhhbiBsb2FkaW5nIGV2ZW4gYSBzbWFsbCBwYXJ0IG9mIHRoZVxuICAgIC8vIG1vZGVsLlxuICAgIHZhciBkb1NvcnQgPSB3YW50U29ydDtcblxuICAgIC8vIGNvbnNvbGUubG9nKFwiQlZIIHNvcnQgaXMgXCIgKyBXQU5UX1NPUlQpO1xuXG4gICAgdmFyIGksIGlFbmQ7XG4gICAgZm9yIChpPTAsIGlFbmQ9dGhpcy5wcmltX2NvdW50OyBpPGlFbmQ7IGkrKykge1xuXG4gICAgICAgIC8vU3RhcnQgd2l0aCB0cml2aWFsIDE6MSBvcmRlciBvZiB0aGUgaW5kaWNlcyBhcnJheVxuICAgICAgICBwcmltaXRpdmVzW2ldID0gaTtcblxuICAgICAgICB2YXIgdHJhbnNwYXJlbnQgPSB0aGlzLmZpbmZvLmlzVHJhbnNwYXJlbnQoaSk7XG5cbiAgICAgICAgaWYgKHRyYW5zcGFyZW50KVxuICAgICAgICAgICAgbnVtVHJhbnNwYXJlbnQrKztcblxuICAgICAgICBpZiAoZG9Tb3J0KSB7XG4gICAgICAgICAgICBwcmltX3NpemVzW2ldID0gQlZITW9kdWxlLmJveF9hcmVhKHRoaXMuZmluZm8uYm94ZXMsIHRoaXMuZmluZm8uYm94U3RyaWRlKmkpO1xuXG4gICAgICAgICAgICAvL0luIG9yZGVyIHRvIG1ha2UgdHJhbnNwYXJlbnQgb2JqZWN0cyBhcHBlYXIgbGFzdCxcbiAgICAgICAgICAgIC8vd2UgZ2l2ZSB0aGVtIGEgbmVnYXRpdmUgc2l6ZSwgc28gdGhhdCB0aGV5IGFyZSBuYXR1cmFsbHlcbiAgICAgICAgICAgIC8vc29ydGVkIGxhc3QgaW4gdGhlIHNvcnQgYnkgc2l6ZS5cbiAgICAgICAgICAgIGlmICh0cmFuc3BhcmVudClcbiAgICAgICAgICAgICAgICBwcmltX3NpemVzW2ldID0gLXByaW1fc2l6ZXNbaV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL1dlIHN0aWxsIG5lZWQgdGhlIHRyYW5zcGFyZW5jeSBmbGFnIGZvciB0aGUgbG9vcCBiZWxvd1xuICAgICAgICAgICAgLy93aGVyZSB3ZSBmaW5kIHRoZSBsYXN0IG9wYXF1ZSBpdGVtLCBidXQgd2UgY2FuXG4gICAgICAgICAgICAvL3Nob3J0LWN1dCB0aGUgc2l6ZSBjb21wdXRhdGlvbi5cbiAgICAgICAgICAgIHByaW1fc2l6ZXNbaV0gPSB0cmFuc3BhcmVudCA/IC0xIDogMTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgaWYgKGRvU29ydCkge1xuICAgICAgICBBcnJheS5wcm90b3R5cGUuc29ydC5jYWxsKHRoaXMucHJpbWl0aXZlcywgZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIHByaW1fc2l6ZXNbYl0gLSBwcmltX3NpemVzW2FdO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobnVtVHJhbnNwYXJlbnQgJiYgbnVtVHJhbnNwYXJlbnQgPCB0aGlzLnByaW1fY291bnQpIHtcblxuICAgICAgICAgICAgdmFyIHRtcFRyYW5zcGFyZW50ID0gbmV3IEludDMyQXJyYXkobnVtVHJhbnNwYXJlbnQpO1xuICAgICAgICAgICAgdmFyIG9pZHggPSAwLCB0aWR4ID0gMDtcblxuICAgICAgICAgICAgZm9yIChpPTAsIGlFbmQgPSB0aGlzLnByaW1fY291bnQ7IGk8aUVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByaW1fc2l6ZXNbaV0gPj0gMClcbiAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlc1tvaWR4KytdID0gcHJpbWl0aXZlc1tpXTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRtcFRyYW5zcGFyZW50W3RpZHgrK10gPSBwcmltaXRpdmVzW2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmltaXRpdmVzLnNldCh0bXBUcmFuc3BhcmVudCwgdGhpcy5wcmltX2NvdW50IC0gbnVtVHJhbnNwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5maXJzdF90cmFuc3BhcmVudCA9IHRoaXMucHJpbV9jb3VudCAtIG51bVRyYW5zcGFyZW50O1xufTtcblxuXG5CVkhCdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAvL0tpY2sgb2ZmIHRoZSBCVkggYnVpbGQuXG5cbiAgICB2YXIgdXNlU2xpbU5vZGVzID0gb3B0aW9ucyAmJiAhIW9wdGlvbnMudXNlU2xpbU5vZGVzO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGFzc2lnbl9vcHRpb24obmFtZSwgZGVmYXVsdFZhbCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIG5hbWUpKVxuICAgICAgICAgICAgc2VsZltuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHNlbGZbbmFtZV0gPSBkZWZhdWx0VmFsO1xuICAgIH1cblxuICAgIC8vIG5vdGU6IGZyYWdzX3Blcl9sZWFmX25vZGUgZG9lcyAqbm90KiBtYWtlIGFuIHVwcGVyIGxpbWl0IGZvciB0aGUgbnVtYmVyIG9mIGZyYWdzIHBlciBub2RlLlxuXG4gICAgLy9vcHRpb25zIGZvciBidWlsZCBvcHRpbWl6ZWQgZm9yIHJhc3Rlcml6YXRpb24gcmVuZGVyZXIgc2NlbmVzXG4gICAgaWYgKHVzZVNsaW1Ob2Rlcykge1xuICAgICAgICBhc3NpZ25fb3B0aW9uKFwiZnJhZ3NfcGVyX2xlYWZfbm9kZVwiLCAxKTtcbiAgICAgICAgYXNzaWduX29wdGlvbihcImZyYWdzX3Blcl9pbm5lcl9ub2RlXCIsIDApO1xuICAgICAgICBhc3NpZ25fb3B0aW9uKFwiZnJhZ3NfcGVyX2xlYWZfbm9kZV90cmFuc3BhcmVudFwiLCAxKTtcbiAgICAgICAgYXNzaWduX29wdGlvbihcImZyYWdzX3Blcl9pbm5lcl9ub2RlX3RyYW5zcGFyZW50XCIsIDApO1xuICAgICAgICBhc3NpZ25fb3B0aW9uKFwibWF4X3BvbHlzX3Blcl9ub2RlXCIsIEluZmluaXR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbXVsdGlwbGllciA9IG9wdGlvbnMuaXNXZWFrRGV2aWNlID8gMC41IDogMS4wO1xuXG4gICAgICAgIC8vVE9ETzogdHVuZSB0aGVzZSBjb25zdGFudHNcbiAgICAgICAgYXNzaWduX29wdGlvbihcImZyYWdzX3Blcl9sZWFmX25vZGVcIiwgMCB8ICgyNTYgKiBtdWx0aXBsaWVyKSk7XG4gICAgICAgIC8vUGxhY2luZyBmcmFnbWVudHMgYXQgaW5uZXIgbm9kZXMgcGxhY2VzIG1vcmUgZW1waGFzaXMgb24gYmlnZ2VyIG9iamVjdHMgZHVyaW5nIHRyZWUgdHJhdmVyc2FsXG4gICAgICAgIC8vYnV0IGl0IGNhbiBvbmx5IGJlIGRvbmUgZm9yIG9wYXF1ZSBvYmplY3RzLiBUcmFuc3BhcmVudCBvYmplY3RzIGhhdmUgdG8gYmUgc3RyaWN0bHkgYmFjayB0byBmcm9udFxuICAgICAgICAvL3RyYXZlcnNhbCByZWdhcmRsZXNzIG9mIHNpemUsIHVubGVzcyBhIHVuaWZpZWQgdHJhdmVyc2FsXG4gICAgICAgIGFzc2lnbl9vcHRpb24oXCJmcmFnc19wZXJfaW5uZXJfbm9kZVwiLCAwfCh0aGlzLmZyYWdzX3Blcl9sZWFmX25vZGUpICk7XG4gICAgICAgIGFzc2lnbl9vcHRpb24oXCJmcmFnc19wZXJfbGVhZl9ub2RlX3RyYW5zcGFyZW50XCIsIHRoaXMuZnJhZ3NfcGVyX2xlYWZfbm9kZSk7XG4gICAgICAgIGFzc2lnbl9vcHRpb24oXCJmcmFnc19wZXJfaW5uZXJfbm9kZV90cmFuc3BhcmVudFwiLCAwKTtcbiAgICAgICAgYXNzaWduX29wdGlvbihcIm1heF9wb2x5c19wZXJfbm9kZVwiLCAwIHwgKDIwMDAwICogbXVsdGlwbGllcikpO1xuICAgIH1cblxuICAgIC8vUmV1c2UgZXhpc3Rpbmcgbm9kZSBhcnJheSBpZiB0aGVyZVxuICAgIGlmICh0aGlzLm5vZGVzICYmICh0aGlzLm5vZGVzLmlzX2xlYW5fbm9kZSA9PSB1c2VTbGltTm9kZXMpKVxuICAgICAgICB0aGlzLm5vZGVzLm5vZGVDb3VudCA9IDA7XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBlc3Rfbm9kZXMgPSB0aGlzLnByaW1fY291bnQgLyB0aGlzLmZyYWdzX3Blcl9sZWFmX25vZGU7XG4gICAgICAgIHZhciBudW1fbm9kZXMgPSAxO1xuICAgICAgICB3aGlsZSAobnVtX25vZGVzIDwgZXN0X25vZGVzKVxuICAgICAgICAgICAgbnVtX25vZGVzICo9IDI7XG5cbiAgICAgICAgdGhpcy5ub2RlcyA9IG5ldyBOb2RlQXJyYXkobnVtX25vZGVzLCBvcHRpb25zID8gb3B0aW9ucy51c2VTbGltTm9kZXMgOiBmYWxzZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0UHJpbWl0aXZlcyh0aGlzLmZpbmZvLndhbnRTb3J0KTtcblxuICAgIEJWSE1vZHVsZS5jb21wdXRlX2JveGVzKHRoaXMpO1xuXG4gICAgLy9Jbml0IHRoZSByb290IG5vZGVzIGF0IDAgZm9yIG9wYXF1ZVxuICAgIC8vYW5kIDEgZm9yIHRyYW5zcGFyZW50IG9iamVjdHNcbiAgICB2YXIgcm9vdCA9IHRoaXMubm9kZXMubmV4dE5vZGVzKDIpO1xuXG4gICAgLy9Ob3cga2ljayBvZmYgdGhlIHJlY3Vyc2l2ZSB0cmVlIGJ1aWxkXG5cbiAgICAvL09wYXF1ZVxuICAgIEJWSE1vZHVsZS5idmhfc3ViZGl2aWRlKHRoaXMsIHJvb3QsIDAsIHRoaXMuZmlyc3RfdHJhbnNwYXJlbnQgLSAxLCB0aGlzLmJveHZfbywgdGhpcy5ib3hjX28sIGZhbHNlLCAwKTtcblxuICAgIHZhciBhO1xuICAgIHdoaWxlKHRoaXMucmVjdXJzaW9uX3N0YWNrLmxlbmd0aCkge1xuICAgICAgICBhID0gdGhpcy5yZWN1cnNpb25fc3RhY2sucG9wKCk7XG4gICAgICAgIEJWSE1vZHVsZS5idmhfc3ViZGl2aWRlKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10pO1xuICAgIH1cblxuICAgIC8vVHJhbnNwYXJlbnRcbiAgICBCVkhNb2R1bGUuYnZoX3N1YmRpdmlkZSh0aGlzLCByb290KzEsIHRoaXMuZmlyc3RfdHJhbnNwYXJlbnQsIHRoaXMucHJpbV9jb3VudC0xLCB0aGlzLmJveHZfdCwgdGhpcy5ib3hjX3QsIHRydWUsIDApO1xuXG4gICAgd2hpbGUodGhpcy5yZWN1cnNpb25fc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIGEgPSB0aGlzLnJlY3Vyc2lvbl9zdGFjay5wb3AoKTtcbiAgICAgICAgQlZITW9kdWxlLmJ2aF9zdWJkaXZpZGUoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSwgYVs3XSk7XG4gICAgfVxufTtcbiJdLCJuYW1lcyI6WyJOb2RlQXJyYXkiLCJpbml0aWFsRGF0YSIsInVzZUxlYW5Ob2RlIiwiYnl0ZXNfcGVyX25vZGUiLCJpbml0aWFsQ291bnQiLCJpbml0aWFsQnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJieXRlTGVuZ3RoIiwibm9kZUNvdW50Iiwibm9kZUNhcGFjaXR5Iiwibm9kZXNSYXciLCJpc19sZWFuX25vZGUiLCJub2RlX3N0cmlkZSIsIm5vZGVfc3RyaWRlX3Nob3J0Iiwibm9kZXNGIiwiRmxvYXQzMkFycmF5Iiwibm9kZXNJIiwiSW50MzJBcnJheSIsIm5vZGVzUyIsIlVpbnQxNkFycmF5IiwicHJvdG90eXBlIiwic2V0TGVmdENoaWxkIiwibm9kZWlkeCIsImNoaWxkaWR4IiwiZ2V0TGVmdENoaWxkIiwic2V0UHJpbVN0YXJ0Iiwic3RhcnQiLCJnZXRQcmltU3RhcnQiLCJzZXRQcmltQ291bnQiLCJjb3VudCIsImdldFByaW1Db3VudCIsInNldEZsYWdzIiwiYXhpcyIsImlzRmlyc3QiLCJpc1RyYW5zcGFyZW50IiwiZ2V0RmxhZ3MiLCJzZXRCb3gwIiwic3JjIiwib2ZmIiwiZHN0IiwiZ2V0Qm94VGhyZWUiLCJtaW4iLCJ4IiwieSIsInoiLCJtYXgiLCJnZXRCb3hBcnJheSIsIm9mZnNldCIsInNldEJveFRocmVlIiwibWFrZUVtcHR5IiwicmVhbGxvYyIsImV4dHJhU2l6ZSIsIm5zeiIsIm5ub2RlcyIsIm5ub2Rlc0kiLCJzZXQiLCJuZXh0Tm9kZXMiLCJob3dNYW55IiwicmVzIiwiaSIsImdldFJhd0RhdGEiLCJzbGljZSIsIlBPSU5UX1NUUklERSIsIkJPWF9FUFNJTE9OIiwiQk9YX1NDQUxFX0VQU0lMT04iLCJNQVhfREVQVEgiLCJNQVhfQklOUyIsIkJWSE1vZHVsZSIsImJveF9nZXRfY2VudHJvaWQiLCJkc3Rfb2ZmIiwic3JjX29mZiIsImJveF9hZGRfcG9pbnRfMCIsImJveF9hZGRfYm94XzAiLCJib3hfYWRkX2JveF8wMCIsImJveF9nZXRfc2l6ZSIsImJveF9jb3B5XzAwIiwiZGJsX21heCIsIkluZmluaXR5IiwiYm94X21ha2VfZW1wdHlfMCIsImJveF9hcmVhIiwiZHgiLCJkeSIsImR6IiwiYm94X2FyZWFfMCIsImJ2aF9zcGxpdF9pbmZvIiwidmJfbGVmdCIsInZiX3JpZ2h0IiwiY2JfbGVmdCIsImNiX3JpZ2h0IiwibnVtX2xlZnQiLCJiZXN0X3NwbGl0IiwiYmVzdF9jb3N0IiwibnVtX2JpbnMiLCJyZXNldCIsImJ2aF9iaW4iLCJib3hfYmJveCIsImJveF9jZW50cm9pZCIsIm51bV9wcmltcyIsImFjY3VtX2Jpbl9pbmZvIiwiQkwiLCJDTCIsIk5MIiwiQUwiLCJiaW5zIiwicHVzaCIsImFpIiwiQlIiLCJDUiIsImFzc2lnbl9iaW5zIiwiYnZoIiwiZW5kIiwiY2IiLCJjYmRpYWciLCJjZW50cm9pZHMiLCJwcmltaXRpdmVzIiwiYm94ZXMiLCJmaW5mbyIsImJveFN0cmlkZSIsImsxIiwiY2JheGlzIiwic3AiLCJzb3J0X3ByaW1zIiwiaiIsImlwcmltIiwiZnBiaW4iLCJiaW5pZCIsImJ2aF9iaW5fYXhpcyIsInNwbGl0X2luZm8iLCJzY2VuZV9lcHNpbG9uIiwiYmluIiwiYWlpIiwiQVIiLCJOUiIsImN1cl9jb3N0IiwiYnZoX3BhcnRpdGlvbiIsInJpZ2h0IiwibGVmdCIsImJ2aF9mYXR0ZW5faW5uZXJfbm9kZSIsIm5vZGVzIiwicG9seV9jdXRfb2ZmIiwicHJpbV9jb3VudCIsImZyYWdzX3Blcl9pbm5lcl9ub2RlIiwiYnZoX3N1YmRpdmlkZSIsInZiIiwidHJhbnNwYXJlbnQiLCJkZXB0aCIsImZyYWdzX3Blcl9sZWFmIiwiZnJhZ3NfcGVyX2xlYWZfbm9kZV90cmFuc3BhcmVudCIsImZyYWdzX3Blcl9sZWFmX25vZGUiLCJmcmFnc19wZXJfaW5uZXIiLCJmcmFnc19wZXJfaW5uZXJfbm9kZV90cmFuc3BhcmVudCIsInBvbHlzX3Blcl9ub2RlIiwibWF4X3BvbHlzX3Blcl9ub2RlIiwicG9seV9jb3VudCIsImhhc1BvbHlnb25Db3VudHMiLCJzaG9ydGVuX2VuZCIsImdldFBvbHlnb25Db3VudCIsImlzU21hbGwiLCJjaGlsZF9pZHgiLCJjbGVmdCIsImNyaWdodCIsInJlY3Vyc2lvbl9zdGFjayIsImNvbXB1dGVfYm94ZXMiLCJib3h2X28iLCJib3hjX28iLCJib3h2X3QiLCJib3hjX3QiLCJjIiwiYiIsImlFbmQiLCJwIiwiZmlyc3RfdHJhbnNwYXJlbnQiLCJtYXhzeiIsIk1hdGgiLCJGcmFnSW5mbyIsImZyYWdtZW50cyIsIm1hdGVyaWFsRGVmcyIsInBvbHlnb25Db3VudHMiLCJtYXRlcmlhbHMiLCJsZW5ndGgiLCJ3YW50U29ydCIsImdldENvdW50IiwiQlZIQnVpbGRlciIsIndvcmtfYnVmIiwic29ydFByaW1pdGl2ZXMiLCJwcmltX3NpemVzIiwibnVtVHJhbnNwYXJlbnQiLCJkb1NvcnQiLCJBcnJheSIsInNvcnQiLCJjYWxsIiwiYSIsInRtcFRyYW5zcGFyZW50Iiwib2lkeCIsInRpZHgiLCJidWlsZCIsIm9wdGlvbnMiLCJ1c2VTbGltTm9kZXMiLCJzZWxmIiwiYXNzaWduX29wdGlvbiIsIm5hbWUiLCJkZWZhdWx0VmFsIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJtdWx0aXBsaWVyIiwiaXNXZWFrRGV2aWNlIiwiZXN0X25vZGVzIiwibnVtX25vZGVzIiwicm9vdCIsInBvcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/wgs/scene/BVHBuilder.js\n "); /***/ }), /***/ "./src/wgs/scene/DeriveTopology.js ": /*!*****************************************!*\ !*** ./src/wgs/scene/DeriveTopology.js ***! \*****************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MeshAccessor: ()=> (/* binding */ MeshAccessor),\n/* harmony export */ createWireframe: () => (/* binding */ createWireframe)\n/* harmony export */ });\n/* harmony import */ var _VertexEnumerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VertexEnumerator */ \"./src/wgs/scene/VertexEnumerator.js\");\n/* harmony import */ var _LmvVector3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n/* harmony import */ var _LmvBox3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./LmvBox3 */ \"./src/wgs/scene/LmvBox3.js\");\n/* harmony import */ var _extensions_CompGeom_point_list_3d__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../extensions/CompGeom/point-list-3d */ \"./extensions/CompGeom/point-list-3d.js\");\n\n\n\n\n\n// @todo: exports of this file cannot access THREE, due to some worker thread constraints (e.g., GeomWorker).\n// Perhaps the import of THREE can be restricted using webpack (e.g., custom restrict-import-loader) or\n// custom linter rules (e.g., https://eslint.org/docs/latest/rules/no-restricted-imports).\n\n// @todo: This class seems to have a misleading name (and no documentation). It defines a\n// MeshAccessor and a helper for Wireframe (edges?) creation. There is nothing that involves\n// geometric topology nor any actual derivation of sth.\n\nfunction getVertices(geom, bbox) {\n\n var vbuf = new Float32Array(3 * (0,_VertexEnumerator__WEBPACK_IMPORTED_MODULE_0__.getVertexCount)(geom));\n\n function cb(v, n, uv, i) {\n if (bbox) {\n bbox.expandByPoint(v);\n }\n vbuf[3 * i] = v.x;\n vbuf[3 * i + 1] = v.y;\n vbuf[3 * i + 2] = v.z;\n }\n\n (0,_VertexEnumerator__WEBPACK_IMPORTED_MODULE_0__.enumMeshVertices)(geom, cb);\n\n return vbuf;\n}\n\nfunction transformVertices(verts, toWorld) {\n\n let _v1 = new _LmvVector3__WEBPACK_IMPORTED_MODULE_1__.LmvVector3();\n\n for (let i = 0; i < verts.length; i +=3 ) {\n _v1.x=v erts[i];\n _v1.y=v erts[i + 1];\n _v1.z=v erts[i + 2];\n\n _v1.applyMatrix4(toWorld);\n\n verts[i]=_ v1.x;\n verts[i + 1]=_ v1.y;\n verts[i + 2]=_ v1.z;\n }\n}\n\nlet _v1=n ew _LmvVector3__WEBPACK_IMPORTED_MODULE_1__.LmvVector3();\nlet _v2=n ew _LmvVector3__WEBPACK_IMPORTED_MODULE_1__.LmvVector3();\nlet _v3=n ew _LmvVector3__WEBPACK_IMPORTED_MODULE_1__.LmvVector3();\nlet _n1=n ew _LmvVector3__WEBPACK_IMPORTED_MODULE_1__.LmvVector3();\nlet _n2=n ew _LmvVector3__WEBPACK_IMPORTED_MODULE_1__.LmvVector3();\n\nclass MeshAccessor {\n\n constructor(geom, toWorld, boundingBox) {\n\n let inBox=g eom.boundingBox || boundingBox;\n let box=n ew _LmvBox3__WEBPACK_IMPORTED_MODULE_2__.LmvBox3();\n if (inBox) {\n box.copy(inBox);\n }\n\n this.geom=g eom;\n this.myVerts=g etVertices(geom, inBox ? null : box);\n\n //de-duplicate vertices based on position only (ignoring normals)\n let upl=n ew _extensions_CompGeom_point_list_3d__WEBPACK_IMPORTED_MODULE_3__.UniquePointList3D(this.getV.bind(this), box, -1.0 / (1 << 16));\n this.remap=n ew Array((0,_VertexEnumerator__WEBPACK_IMPORTED_MODULE_0__.getVertexCount)(geom));\n for (let i=0 , j=0 ; i < this.myVerts.length; i +=3 , j++) {\n this.remap[j]=u pl.findOrAddPoint(this.myVerts[i], this.myVerts[i + 1], this.myVerts[i + 2], j);\n }\n /*\n let remap=n ew Array(getVertexCount(geom));\n for (let i=0,j=0; i i2) {\n var tmp = i1;\n i1 = i2;\n i2 = tmp;\n reversed = true;\n }\n\n var e1 = seenEdges[i1];\n if (e1) {\n var opp2orig = e1[i2];\n if (opp2orig === undefined) {\n e1[i2] = reversed ? -opp1orig - 1 : opp1orig;\n } else {\n //We now know two triangles that share this edge,\n //we can check if it's important\n\n if (!wantAllTriangleEdges) {\n //Use original indices, so that we\n //can do the math with the correct winding order\n mt.getNormal(i1orig, i2orig, opp1orig, _n1);\n\n if (opp2orig < 0) {\n mt.getNormal(i2, i1, mt.remap[-opp2orig - 1], _n2);\n } else {\n mt.getNormal(i1, i2, mt.remap[opp2orig], _n2);\n }\n\n var dot=_ n1.dot(_n2);\n\n if (Math.abs(dot) < 0.25) {\n edgeIB.push(i1orig);\n edgeIB.push(i2orig);\n }\n } else {\n edgeIB.push(i1orig);\n edgeIB.push(i2orig);\n }\n\n delete e1[i2];\n }\n } else {\n seenEdges[i1]={ };\n seenEdges[i1][i2]=o pp1orig;\n }\n }\n\n function tricb(vA, vB, vC, iA, iB, iC) {\n doOneEdge(iA, iB, iC);\n doOneEdge(iB, iC, iA);\n doOneEdge(iC, iA, iB);\n }\n\n //find edges that have neighboring triangles at sharp angle\n (0,_VertexEnumerator__WEBPACK_IMPORTED_MODULE_0__.enumMeshTriangles)(geom, tricb);\n\n //process remaining edges (outer edges that only have one triangle)\n\n for (var i1 in seenEdges) {\n for (var i2 in seenEdges[i1]) {\n edgeIB.push(parseInt(i1));\n edgeIB.push(parseInt(i2));\n }\n }\n\n if (edgeIB.length < 2) {\n return;\n }\n\n // @todo: enrichment of buffer geometry/mesh should be either encapsulated or type-safe\n // @todo: modelBuilder is calling this function with BufferGeometry objects, this is the one of\n // two uses within the code base, and since THREE is not available here, the addGeometry\n // function of model builder is adjusted accordingly. When called with a mesh object (e.g., in\n // GeomWorker) the same enrichment is applied. Instead, this function should just return the\n // results and let the caller handle the data: return edgeIB.length> 1 ? edgeIB : undefined;\n geom.iblines = new Uint16Array(edgeIB.length);\n geom.iblines.set(edgeIB);\n\n /*\n for (var i=0; i { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FlatStringStorage: ()=> (/* binding */ FlatStringStorage),\n/* harmony export */ InstanceTreeAccess: () => (/* binding */ InstanceTreeAccess),\n/* harmony export */ InstanceTreeStorage: () => (/* binding */ InstanceTreeStorage)\n/* harmony export */ });\n/* harmony import */ var _file_loaders_lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../file-loaders/lmvtk/common/StringUtils */ \"./src/file-loaders/lmvtk/common/StringUtils.js\");\n\n\n\n\nclass FlatStringStorage {\n\n constructor(initial) {\n if (initial) {\n this.buf = initial.buf;\n this.idx = initial.idx;\n this.next = initial.next;\n } else {\n this.buf = new Uint8Array(256);\n this.next = 0;\n this.idx = [0];\n }\n }\n\n allocate(len) {\n if (this.buf.length - this.next < len) {\n var nsz=M ath.max(this.buf.length * 3 / 2, this.buf.length + len);\n var nb=n ew Uint8Array(nsz);\n nb.set(this.buf);\n this.buf=n b;\n }\n }\n\n add(s) {\n if (s===n ull || typeof s===\ "undefined\") {\n return 0;\n }\n\n if (!s.length) {\n this.idx.push(this.next);\n return this.idx.length - 1;\n }\n\n var len=( 0,_file_loaders_lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.utf16to8)(s, null);\n this.allocate(len);\n this.next +=( 0,_file_loaders_lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.utf16to8)(s, this.buf, this.next);\n this.idx.push(this.next);\n return this.idx.length - 1;\n }\n\n get(i) {\n if (!i) {\n return undefined;\n }\n\n var start=t his.idx[i - 1];\n var end=t his.idx[i];\n if (start===e nd)\n return \ "\";\n return (0,_file_loaders_lmvtk_common_StringUtils__WEBPACK_IMPORTED_MODULE_0__.utf8BlobToStr)(this.buf, start, end - start);\n }\n\n flatten() {\n this.idx=a rrayToBuffer(this.idx);\n //TODO: we could also clip this.buf to the actually used size, but that requires reallocation\n }\n}\n\n\n\n//\n// struct Node {\n// int dbId;\n// int parentDbId;\n// int firstChild; //if negative it 's a fragment list\n// int numChildren;\n// int flags; \n// };\n// sizeof(Node) == 20\nvar SIZEOF_NODE = 5, //integers\n OFFSET_DBID = 0,\n OFFSET_PARENT = 1,\n OFFSET_FIRST_CHILD = 2,\n OFFSET_NUM_CHILD = 3,\n OFFSET_FLAGS = 4;\n\nfunction InstanceTreeStorage() {\n\n this.nodes = [];\n this.nextNode = 0;\n\n this.children = [];\n this.nextChild = 0;\n\n this.dbIdToIndex = {};\n\n this.names = [];\n this.s2i = {}; //duplicate string pool\n this.strings = new FlatStringStorage();\n this.nameSuffixes = []; //integers\n\n //Occupy index zero so that we can use index 0 as undefined\n this.getIndex(0);\n}\n\nInstanceTreeStorage.prototype.getIndex = function (dbId) {\n\n var index = this.dbIdToIndex[dbId];\n\n if (index)\n return index;\n\n index = this.nextNode++;\n\n //Allocate space for new node\n this.nodes.push(dbId); //store the dbId as first integer in the Node structure\n //Add four blank integers to be filled by setNode\n for (var i = 1; i < SIZEOF_NODE; i++)\n this.nodes.push(0);\n\n this.dbIdToIndex[dbId] = index;\n\n return index;\n};\n\nInstanceTreeStorage.prototype.setNode = function (dbId, parentDbId, name, flags, childrenIds, fragIds) {\n\n var index = this.getIndex(dbId);\n\n var baseOffset = index * SIZEOF_NODE;\n\n var numChildren = childrenIds.length;\n var hasFragments = fragIds && fragIds.length;\n if (hasFragments) {\n numChildren += fragIds.length;\n }\n\n this.nodes[baseOffset + OFFSET_PARENT] = parentDbId;\n this.nodes[baseOffset + OFFSET_FIRST_CHILD] = this.nextChild;\n this.nodes[baseOffset + OFFSET_NUM_CHILD] = hasFragments ? -numChildren : numChildren;\n this.nodes[baseOffset + OFFSET_FLAGS] = flags;\n\n var i;\n for (i = 0; i < childrenIds.length; i++)\n this.children[this.nextChild++] = this.getIndex(childrenIds[i]);\n\n //Store fragIds as negative numbers so we can differentiate them when looking through\n //the array later.\n if (hasFragments) {\n for (i = 0; i < fragIds.length; i++)\n this.children[this.nextChild++] = -fragIds[i] - 1; //index 0 stored as -1, etc., since 0 is not negative\n }\n\n if (this.nextChild > this.children.length) {\n // TODO: this code may run in a worker, replace console with something else\n console.error(\"Child index out of bounds -- should not happen\");\n }\n\n this.processName(index, name);\n};\n\nInstanceTreeStorage.prototype.processName = function (index, name) {\n\n //Attempt to decompose the name into a base string + integer,\n //like for example \"Base Wall [12345678]\" or \"Crank Shaft:1\"\n //We will try to reduce memory usage by storing \"Base Wall\" just once.\n var base;\n var suffix;\n\n //Try Revit style [1234] first\n var iStart = -1;\n var iEnd = -1;\n\n if (name) {//name should not be empty, but hey, it happens.\n iEnd = name.lastIndexOf(\"]\");\n iStart = name.lastIndexOf(\"[\");\n\n //Try Inventor style :1234\n if (iStart === -1 || iEnd === -1) {\n iStart = name.lastIndexOf(\":\");\n iEnd = name.length;\n }\n }\n\n //TODO: Any other separators? What does AutoCAD use?\n\n if (iStart >= 0 && iEnd > iStart) {\n base = name.slice(0, iStart + 1);\n var ssuffix = name.slice(iStart + 1, iEnd);\n suffix = parseInt(ssuffix, 10);\n\n //make sure we get the same thing back when\n //converting back to string, otherwise don't \n //decompose it.\n if (!suffix || suffix + \ "\" !==s suffix) {\n base=n ame;\n suffix=0 ;\n }\n } else {\n base=n ame;\n suffix=0 ;\n }\n\n\n var idx=t his.s2i[base];\n if (idx===u ndefined) {\n idx=t his.strings.add(base);\n this.s2i[base]=i dx;\n }\n\n this.names[index]=i dx;\n this.nameSuffixes[index]=s uffix;\n};\n\n\nfunction arrayToBuffer(a) {\n var b=n ew Int32Array(a.length);\n b.set(a);\n return b;\n}\n\nInstanceTreeStorage.prototype.flatten=f unction () {\n this.nodes=a rrayToBuffer(this.nodes);\n this.children=a rrayToBuffer(this.children);\n this.names=a rrayToBuffer(this.names);\n this.nameSuffixes=a rrayToBuffer(this.nameSuffixes);\n this.strings.flatten();\n this.s2i=n ull; //we don 't need this temporary map once we've built the strings list\n};\n\n\n\nfunction InstanceTreeAccess(nodeArray, rootId, nodeBoxes) {\n this.nodes=n odeArray.nodes;\n this.children=n odeArray.children;\n this.dbIdToIndex=n odeArray.dbIdToIndex;\n this.names=n odeArray.names;\n this.nameSuffixes=n odeArray.nameSuffixes;\n this.strings=n ew FlatStringStorage(nodeArray.strings);\n this.rootId=r ootId;\n this.numNodes=t his.nodes.length / SIZEOF_NODE;\n this.visibleIds=n ull;\n\n // only used if bboxes are precomputed\n this.nodeBoxes=n odeBoxes;\n}\n\nInstanceTreeAccess.prototype.dtor=f unction () {\n this.nodes=n ull;\n this.children=n ull;\n this.dbIdToIndex=n ull;\n this.names=n ull;\n this.nameSuffixes=n ull;\n this.strings=n ull;\n this.visibleIds=n ull;\n this.nodeBoxes=n ull;\n};\n\nInstanceTreeAccess.prototype.getNumNodes=f unction () {\n return this.numNodes;\n};\n\nInstanceTreeAccess.prototype.getIndex=f unction (dbId) {\n return this.dbIdToIndex[dbId];\n};\n\nInstanceTreeAccess.prototype.name=f unction (dbId, includeCount) {\n var idx=t his.dbIdToIndex[dbId];\n var base=t his.strings.get(this.names[idx]);\n var suffix=t his.nameSuffixes[idx];\n var name;\n if (suffix) {\n //NOTE: update this logic if more separators are supported in processName above\n var lastChar=b ase.charAt(base.length - 1);\n if (lastChar===\ "[\")\n name=b ase + suffix + \ "]\";else\n\n name=b ase + suffix;\n } else {\n name=b ase;\n }\n\n if (includeCount) {\n if (!this.childCounts) {\n this.computeChildCounts();\n }\n if (this.childCounts[dbId]> 0) {\n name += \" (\" + this.childCounts[dbId] + \")\";\n }\n }\n\n return name;\n};\n\nInstanceTreeAccess.prototype.getParentId = function (dbId) {\n var idx = this.dbIdToIndex[dbId];\n return this.nodes[idx * SIZEOF_NODE + OFFSET_PARENT];\n};\n\nInstanceTreeAccess.prototype.getNodeFlags = function (dbId) {\n var idx = this.dbIdToIndex[dbId];\n return this.nodes[idx * SIZEOF_NODE + OFFSET_FLAGS];\n};\n\nInstanceTreeAccess.prototype.setNodeFlags = function (dbId, flags) {\n var idx = this.dbIdToIndex[dbId];\n if (idx) {\n this.nodes[idx * SIZEOF_NODE + OFFSET_FLAGS] = flags;\n }\n};\n\nInstanceTreeAccess.prototype.getNumChildren = function (dbId) {\n\n var idx = this.dbIdToIndex[dbId];\n var numChildren = this.nodes[idx * SIZEOF_NODE + OFFSET_NUM_CHILD];\n\n //If numChildren is non-negative, then all children are nodes (not fragments)\n if (numChildren >= 0)\n return numChildren;\n\n //Node has mixed fragments and child nodes, so we have to loop and collect just the node children\n var firstChild = this.nodes[idx * SIZEOF_NODE + OFFSET_FIRST_CHILD];\n\n numChildren = Math.abs(numChildren);\n\n var numNodeChildren = 0;\n\n for (var i = 0; i < numChildren; i++) {\n var childIdx=t his.children[firstChild + i];\n\n //did we reach the fragment ids sub-list?\n if (childIdx < 0)\n break;\n\n numNodeChildren++;\n }\n\n return numNodeChildren;\n};\n\nInstanceTreeAccess.prototype.getNumFragments=f unction (dbId) {\n var idx=t his.dbIdToIndex[dbId];\n\n var numChildren=t his.nodes[idx * SIZEOF_NODE + OFFSET_NUM_CHILD];\n\n //If numChildren is non-negative, there aren 't any fragments belonging to this node\n if (numChildren >= 0)\n return 0;\n\n //Node has mixed fragments and child nodes, so we have to loop and collect just the node children\n var firstChild = this.nodes[idx * SIZEOF_NODE + OFFSET_FIRST_CHILD];\n\n numChildren = Math.abs(numChildren);\n\n var numFragChildren = 0;\n\n //Iterate backwards, because fragment children are at the back of the children list\n for (var i = numChildren - 1; i >= 0; i--) {\n var childIdx = this.children[firstChild + i];\n\n //did we reach the inner node children ids sub-list?\n if (childIdx >= 0)\n break;\n\n numFragChildren++;\n }\n\n return numFragChildren;\n};\n\n// NOTE: This can only be used if precomputed bboxes are available.\nInstanceTreeAccess.prototype.getNodeBox = function (dbId, dst) {\n var idx = this.getIndex(dbId);\n var off = idx * 6;\n for (var i = 0; i < 6; i++)\n dst[i] = this.nodeBoxes[off + i];\n};\n\n//Returns an array containing the dbIds of all objects\n//that are physically represented in the scene. Not all\n//objects in the property database occur physically in each graphics viewable.\nInstanceTreeAccess.prototype.getVisibleIds = function () {\n if (!this.visibleIds) {\n this.visibleIds = Object.keys(this.dbIdToIndex).map(function (k) {return parseInt(k);});\n }\n\n return this.visibleIds;\n};\n\n\nInstanceTreeAccess.prototype.enumNodeChildren = function (dbId, callback) {\n var idx = this.dbIdToIndex[dbId];\n var firstChild = this.nodes[idx * SIZEOF_NODE + OFFSET_FIRST_CHILD];\n var numChildren = this.nodes[idx * SIZEOF_NODE + OFFSET_NUM_CHILD];\n\n numChildren = Math.abs(numChildren);\n\n for (var i = 0; i < numChildren; i++) {\n var childIdx = this.children[firstChild + i];\n\n //did we reach the fragment ids sub-list?\n if (childIdx < 0)\n break;\n\n var childDbId = this.nodes[childIdx * SIZEOF_NODE + OFFSET_DBID];\n if (callback(childDbId, dbId, idx)) {\n return dbId;\n }\n }\n};\n\nInstanceTreeAccess.prototype.enumNodeFragments = function (dbId, callback) {\n var idx = this.dbIdToIndex[dbId];\n var firstChild = this.nodes[idx * SIZEOF_NODE + OFFSET_FIRST_CHILD];\n var numChildren = this.nodes[idx * SIZEOF_NODE + OFFSET_NUM_CHILD];\n\n //If numChildren is negative, it means there are fragments in the node\n if (numChildren < 0) {\n numChildren = -numChildren;\n for (var i = 0; i < numChildren; i++) {\n var childIdx = this.children[firstChild + i];\n\n //skip past children that are inner nodes (not fragments)\n if (childIdx > 0)\n continue;\n\n //Convert fragId from -1 based negative back to the actual fragId\n if (callback(-childIdx - 1, dbId, idx)) {\n return dbId;\n }\n }\n }\n};\n\nInstanceTreeAccess.prototype.computeBoxes = function (fragBoxes) {\n\n if (!this.nodeBoxes) {\n this.nodeBoxes = new Float32Array(6 * this.numNodes);\n }\n\n var nodeAccess = this;\n var idx = nodeAccess.getIndex(nodeAccess.rootId);\n var nodeBoxes = nodeAccess.nodeBoxes;\n\n function traverseChildren(child_dbId, parentDbID, parentIdx) {\n\n var childIdx = nodeAccess.getIndex(child_dbId);\n\n //Recurse, then add all child boxes to make this node's box\n computeTreeBBoxesRec(child_dbId, childIdx);\n\n var box_offset=p arentIdx * 6;\n var child_box_offset=c hildIdx * 6;\n for (var k=0 ; k < 3; k++) {\n if (nodeBoxes[box_offset + k]> nodeBoxes[child_box_offset + k])\n nodeBoxes[box_offset + k] = nodeBoxes[child_box_offset + k];\n if (nodeBoxes[box_offset + k + 3] < nodeBoxes[child_box_offset + k + 3])\n nodeBoxes[box_offset + k + 3]=n odeBoxes[child_box_offset + k + 3];\n }\n }\n\n function traverseFragments(fragId, dbId, idx) {\n var frag_box_offset=f ragId * 6;\n var box_offset=i dx * 6;\n\n for (var k=0 ; k < 3; k++) {\n if (nodeBoxes[box_offset + k]> fragBoxes[frag_box_offset + k])\n nodeBoxes[box_offset + k] = fragBoxes[frag_box_offset + k];\n if (nodeBoxes[box_offset + k + 3] < fragBoxes[frag_box_offset + k + 3])\n nodeBoxes[box_offset + k + 3]=f ragBoxes[frag_box_offset + k + 3];\n }\n }\n\n function computeTreeBBoxesRec(dbId, idx) {\n\n var box_offset=i dx * 6;\n nodeBoxes[box_offset]=n odeBoxes[box_offset + 1]=n odeBoxes[box_offset + 2]=I nfinity;\n nodeBoxes[box_offset + 3]=n odeBoxes[box_offset + 4]=n odeBoxes[box_offset + 5]=- Infinity;\n\n if (nodeAccess.getNumChildren(dbId)) {\n nodeAccess.enumNodeChildren(dbId, traverseChildren, true);\n }\n\n //Leaf node -- don 't think it's possible for a node to have\n //both children and leaf fragments, but we do handle that here.\n if (nodeAccess.getNumFragments(dbId)) {\n nodeAccess.enumNodeFragments(dbId, traverseFragments);\n }\n\n }\n\n computeTreeBBoxesRec(nodeAccess.rootId, idx);\n};\n\nInstanceTreeAccess.prototype.computeChildCounts=f unction () {\n if (!this.childCounts) {\n this.childCounts=n ew Uint32Array(this.numNodes);\n }\n\n var nodeAccess=t his;\n var idx=n odeAccess.getIndex(nodeAccess.rootId);\n var childCounts=n odeAccess.childCounts;\n\n function traverseChildren(child_dbId, parentDbID, parentIdx) {\n\n var childIdx=n odeAccess.getIndex(child_dbId);\n\n //Recurse, then add all child boxes to make this node 's box\n let count = computeChildCountsRec(child_dbId, childIdx);\n\n childCounts[parentDbID] += count;\n }\n\n\n function computeChildCountsRec(dbId, idx) {\n\n let flags = nodeAccess.getNodeFlags(dbId);\n let myCount = 0;\n\n if (flags === 0x4 /*NODE_TYPE_COMPOSITE*/) {\n //If it's a composite node, treat it as a single\n //opaque object whose contents don 't matter to the user\n //for counting purposes.\n myCount = 1;\n } else {\n\n if (nodeAccess.getNumChildren(dbId)) {\n nodeAccess.enumNodeChildren(dbId, traverseChildren, true);\n }\n\n //Leaf node\n if (nodeAccess.getNumFragments(dbId)) {\n myCount = 1;\n }\n }\n\n return myCount + childCounts[dbId];\n }\n\n computeChildCountsRec(nodeAccess.rootId, idx);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0VBRXhDLFNBQVM0QixnQkFBZ0JBLENBQUNDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUU7O0lBRXpELElBQUl0QixRQUFRLEdBQUdrQixVQUFVLENBQUNqRSxRQUFRLENBQUNtRSxVQUFVLENBQUM7O0lBRTlDO0lBQ0EsSUFBSVcsS0FBSyxHQUFHQyxxQkFBcUIsQ0FBQ1osVUFBVSxFQUFFcEIsUUFBUSxDQUFDOztJQUV2RFQsV0FBVyxDQUFDOEIsVUFBVSxDQUFDLElBQUlVLEtBQUs7RUFDcEM7OztFQUdBLFNBQVNDLHFCQUFxQkEsQ0FBQzdFLElBQUksRUFBRXZDLEdBQUcsRUFBRTs7SUFFdEMsSUFBSTRDLEtBQUssR0FBRzBELFVBQVUsQ0FBQ3hCLFlBQVksQ0FBQ3ZDLElBQUksQ0FBQztJQUN6QyxJQUFJOEUsT0FBTyxHQUFHLENBQUM7O0lBRWYsSUFBSXpFLEtBQUssS0FBSyxHQUFHLDBCQUF5QjtNQUN0QztNQUNBO01BQ0E7TUFDQXlFLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQyxNQUFNOztNQUVILElBQUlmLFVBQVUsQ0FBQ3RCLGNBQWMsQ0FBQ3pDLElBQUksQ0FBQyxFQUFFO1FBQ2pDK0QsVUFBVSxDQUFDUCxnQkFBZ0IsQ0FBQ3hELElBQUksRUFBRWdFLGdCQUFnQixFQUFFLElBQUksQ0FBQztNQUM3RDs7TUFFQTtNQUNBLElBQUlELFVBQVUsQ0FBQ2pCLGVBQWUsQ0FBQzlDLElBQUksQ0FBQyxFQUFFO1FBQ2xDOEUsT0FBTyxHQUFHLENBQUM7TUFDZjtJQUNKOztJQUVBLE9BQU9BLE9BQU8sR0FBRzFDLFdBQVcsQ0FBQ3BDLElBQUksQ0FBQztFQUN0Qzs7RUFFQTZFLHFCQUFxQixDQUFDZCxVQUFVLENBQUNwQyxNQUFNLEVBQUVsRSxHQUFHLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy93Z3Mvc2NlbmUvSW5zdGFuY2VUcmVlU3RvcmFnZS5qcz82Y2U2Il0sInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgdXRmMTZ0bzgsIHV0ZjhCbG9iVG9TdHIgfSBmcm9tIFwiLi4vLi4vZmlsZS1sb2FkZXJzL2xtdnRrL2NvbW1vbi9TdHJpbmdVdGlsc1wiO1xuXG5cbiAgICBleHBvcnQgY2xhc3MgRmxhdFN0cmluZ1N0b3JhZ2Uge1xuXG4gICAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWwpIHtcbiAgICAgICAgICAgIGlmIChpbml0aWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWYgPSBpbml0aWFsLmJ1ZjtcbiAgICAgICAgICAgICAgICB0aGlzLmlkeCA9IGluaXRpYWwuaWR4O1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IGluaXRpYWwubmV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWYgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5pZHggPSBbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhbGxvY2F0ZShsZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zi5sZW5ndGggLSB0aGlzLm5leHQgPCBsZW4pIHtcbiAgICAgICAgICAgICAgICB2YXIgbnN6ID0gTWF0aC5tYXgodGhpcy5idWYubGVuZ3RoICogMyAvIDIsIHRoaXMuYnVmLmxlbmd0aCArIGxlbik7XG4gICAgICAgICAgICAgICAgdmFyIG5iID0gbmV3IFVpbnQ4QXJyYXkobnN6KTtcbiAgICAgICAgICAgICAgICBuYi5zZXQodGhpcy5idWYpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmID0gbmI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhZGQocykge1xuICAgICAgICAgICAgaWYgKHMgPT09IG51bGwgfHwgKHR5cGVvZiBzICA9PT0gXCJ1bmRlZmluZWRcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWR4LnB1c2godGhpcy5uZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pZHgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGxlbiA9IHV0ZjE2dG84KHMsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5hbGxvY2F0ZShsZW4pO1xuICAgICAgICAgICAgdGhpcy5uZXh0ICs9IHV0ZjE2dG84KHMsIHRoaXMuYnVmLCB0aGlzLm5leHQpO1xuICAgICAgICAgICAgdGhpcy5pZHgucHVzaCh0aGlzLm5leHQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWR4Lmxlbmd0aCAtIDE7XG4gICAgICAgIH1cblxuICAgICAgICBnZXQoaSkge1xuICAgICAgICAgICAgaWYgKCFpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pZHhbaS0xXTtcbiAgICAgICAgICAgIHZhciBlbmQgPSB0aGlzLmlkeFtpXTtcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKVxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgcmV0dXJuIHV0ZjhCbG9iVG9TdHIodGhpcy5idWYsIHN0YXJ0LCBlbmQgLSBzdGFydCk7XG4gICAgICAgIH1cblxuICAgICAgICBmbGF0dGVuKCkge1xuICAgICAgICAgICAgdGhpcy5pZHggPSBhcnJheVRvQnVmZmVyKHRoaXMuaWR4KTtcbiAgICAgICAgICAgIC8vVE9ETzogd2UgY291bGQgYWxzbyBjbGlwIHRoaXMuYnVmIHRvIHRoZSBhY3R1YWxseSB1c2VkIHNpemUsIGJ1dCB0aGF0IHJlcXVpcmVzIHJlYWxsb2NhdGlvblxuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIC8vXG4gICAgLy8gc3RydWN0IE5vZGUge1xuICAgIC8vICAgICBpbnQgZGJJZDtcbiAgICAvLyAgICAgaW50IHBhcmVudERiSWQ7XG4gICAgLy8gICAgIGludCBmaXJzdENoaWxkOyAvL2lmIG5lZ2F0aXZlIGl0J3MgYSBmcmFnbWVudCBsaXN0XG4gICAgLy8gICAgIGludCBudW1DaGlsZHJlbjtcbiAgICAvLyAgICAgaW50IGZsYWdzOyAgIFxuICAgIC8vIH07XG4gICAgLy8gc2l6ZW9mKE5vZGUpID09IDIwXG4gICAgdmFyIFNJWkVPRl9OT0RFID0gNSwgLy9pbnRlZ2Vyc1xuICAgICAgICBPRkZTRVRfREJJRCA9IDAsXG4gICAgICAgIE9GRlNFVF9QQVJFTlQgPSAxLFxuICAgICAgICBPRkZTRVRfRklSU1RfQ0hJTEQgPSAyLFxuICAgICAgICBPRkZTRVRfTlVNX0NISUxEID0gMyxcbiAgICAgICAgT0ZGU0VUX0ZMQUdTID0gNDtcblxuICAgIGV4cG9ydCBmdW5jdGlvbiBJbnN0YW5jZVRyZWVTdG9yYWdlKCkge1xuXG4gICAgICAgIHRoaXMubm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5uZXh0Tm9kZSA9IDA7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMubmV4dENoaWxkID0gMDtcblxuICAgICAgICB0aGlzLmRiSWRUb0luZGV4ID0ge307XG5cbiAgICAgICAgdGhpcy5uYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnMyaSA9IHt9OyAvL2R1cGxpY2F0ZSBzdHJpbmcgcG9vbFxuICAgICAgICB0aGlzLnN0cmluZ3MgPSBuZXcgRmxhdFN0cmluZ1N0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5uYW1lU3VmZml4ZXMgPSBbXTsgLy9pbnRlZ2Vyc1xuXG4gICAgICAgIC8vT2NjdXB5IGluZGV4IHplcm8gc28gdGhhdCB3ZSBjYW4gdXNlIGluZGV4IDAgYXMgdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuZ2V0SW5kZXgoMCk7XG4gICAgfVxuXG4gICAgSW5zdGFuY2VUcmVlU3RvcmFnZS5wcm90b3R5cGUuZ2V0SW5kZXggPSBmdW5jdGlvbihkYklkKSB7XG5cbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5kYklkVG9JbmRleFtkYklkXTtcblxuICAgICAgICBpZiAoaW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gaW5kZXg7XG5cbiAgICAgICAgaW5kZXggPSB0aGlzLm5leHROb2RlKys7XG5cbiAgICAgICAgLy9BbGxvY2F0ZSBzcGFjZSBmb3IgbmV3IG5vZGVcbiAgICAgICAgdGhpcy5ub2Rlcy5wdXNoKGRiSWQpOyAvL3N0b3JlIHRoZSBkYklkIGFzIGZpcnN0IGludGVnZXIgaW4gdGhlIE5vZGUgc3RydWN0dXJlXG4gICAgICAgIC8vQWRkIGZvdXIgYmxhbmsgaW50ZWdlcnMgdG8gYmUgZmlsbGVkIGJ5IHNldE5vZGVcbiAgICAgICAgZm9yICh2YXIgaT0xOyBpPFNJWkVPRl9OT0RFOyBpKyspXG4gICAgICAgICAgICB0aGlzLm5vZGVzLnB1c2goMCk7XG5cbiAgICAgICAgdGhpcy5kYklkVG9JbmRleFtkYklkXSA9IGluZGV4O1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9O1xuXG4gICAgSW5zdGFuY2VUcmVlU3RvcmFnZS5wcm90b3R5cGUuc2V0Tm9kZSA9IGZ1bmN0aW9uKGRiSWQsIHBhcmVudERiSWQsIG5hbWUsIGZsYWdzLCBjaGlsZHJlbklkcywgZnJhZ0lkcykge1xuXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SW5kZXgoZGJJZCk7XG5cbiAgICAgICAgdmFyIGJhc2VPZmZzZXQgPSBpbmRleCAqIFNJWkVPRl9OT0RFO1xuXG4gICAgICAgIHZhciBudW1DaGlsZHJlbiA9IGNoaWxkcmVuSWRzLmxlbmd0aDtcbiAgICAgICAgdmFyIGhhc0ZyYWdtZW50cyA9IGZyYWdJZHMgJiYgZnJhZ0lkcy5sZW5ndGg7XG4gICAgICAgIGlmIChoYXNGcmFnbWVudHMpIHtcbiAgICAgICAgICAgIG51bUNoaWxkcmVuICs9IGZyYWdJZHMubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ub2Rlc1tiYXNlT2Zmc2V0K09GRlNFVF9QQVJFTlRdID0gcGFyZW50RGJJZDtcbiAgICAgICAgdGhpcy5ub2Rlc1tiYXNlT2Zmc2V0K09GRlNFVF9GSVJTVF9DSElMRF0gPSB0aGlzLm5leHRDaGlsZDtcbiAgICAgICAgdGhpcy5ub2Rlc1tiYXNlT2Zmc2V0K09GRlNFVF9OVU1fQ0hJTERdID0gaGFzRnJhZ21lbnRzID8gLW51bUNoaWxkcmVuIDogbnVtQ2hpbGRyZW47XG4gICAgICAgIHRoaXMubm9kZXNbYmFzZU9mZnNldCtPRkZTRVRfRkxBR1NdID0gZmxhZ3M7XG5cbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGZvciAoaT0wOyBpPGNoaWxkcmVuSWRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlblt0aGlzLm5leHRDaGlsZCsrXSA9IHRoaXMuZ2V0SW5kZXgoY2hpbGRyZW5JZHNbaV0pO1xuXG4gICAgICAgIC8vU3RvcmUgZnJhZ0lkcyBhcyBuZWdhdGl2ZSBudW1iZXJzIHNvIHdlIGNhbiBkaWZmZXJlbnRpYXRlIHRoZW0gd2hlbiBsb29raW5nIHRocm91Z2hcbiAgICAgICAgLy90aGUgYXJyYXkgbGF0ZXIuXG4gICAgICAgIGlmIChoYXNGcmFnbWVudHMpIHtcbiAgICAgICAgICAgIGZvciAoaT0wOyBpPGZyYWdJZHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlblt0aGlzLm5leHRDaGlsZCsrXSA9IC1mcmFnSWRzW2ldLTE7IC8vaW5kZXggMCBzdG9yZWQgYXMgLTEsIGV0Yy4sIHNpbmNlIDAgaXMgbm90IG5lZ2F0aXZlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uZXh0Q2hpbGQgPiB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gVE9ETzogdGhpcyBjb2RlIG1heSBydW4gaW4gYSB3b3JrZXIsIHJlcGxhY2UgY29uc29sZSB3aXRoIHNvbWV0aGluZyBlbHNlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2hpbGQgaW5kZXggb3V0IG9mIGJvdW5kcyAtLSBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLnByb2Nlc3NOYW1lKGluZGV4LCBuYW1lKTtcbiAgICB9O1xuXG4gICAgSW5zdGFuY2VUcmVlU3RvcmFnZS5wcm90b3R5cGUucHJvY2Vzc05hbWUgPSBmdW5jdGlvbihpbmRleCwgbmFtZSkge1xuXG4gICAgICAgIC8vQXR0ZW1wdCB0byBkZWNvbXBvc2UgdGhlIG5hbWUgaW50byBhIGJhc2Ugc3RyaW5nICsgaW50ZWdlcixcbiAgICAgICAgLy9saWtlIGZvciBleGFtcGxlIFwiQmFzZSBXYWxsIFsxMjM0NTY3OF1cIiBvciBcIkNyYW5rIFNoYWZ0OjFcIlxuICAgICAgICAvL1dlIHdpbGwgdHJ5IHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2UgYnkgc3RvcmluZyBcIkJhc2UgV2FsbFwiIGp1c3Qgb25jZS5cbiAgICAgICAgdmFyIGJhc2U7XG4gICAgICAgIHZhciBzdWZmaXg7XG5cbiAgICAgICAgLy9UcnkgUmV2aXQgc3R5bGUgWzEyMzRdIGZpcnN0XG4gICAgICAgIHZhciBpU3RhcnQgPSAtMTtcbiAgICAgICAgdmFyIGlFbmQgPSAtMTtcblxuICAgICAgICBpZiAobmFtZSkgeyAvL25hbWUgc2hvdWxkIG5vdCBiZSBlbXB0eSwgYnV0IGhleSwgaXQgaGFwcGVucy5cbiAgICAgICAgICAgIGlFbmQgPSBuYW1lLmxhc3RJbmRleE9mKFwiXVwiKTtcbiAgICAgICAgICAgIGlTdGFydCA9IG5hbWUubGFzdEluZGV4T2YoXCJbXCIpO1xuXG4gICAgICAgICAgICAvL1RyeSBJbnZlbnRvciBzdHlsZSA6MTIzNFxuICAgICAgICAgICAgaWYgKGlTdGFydCA9PT0gLTEgfHwgaUVuZCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpU3RhcnQgPSBuYW1lLmxhc3RJbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICAgICAgICBpRW5kID0gbmFtZS5sZW5ndGg7XG4gICAgICAgICAgICB9ICAgICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgLy9UT0RPOiBBbnkgb3RoZXIgc2VwYXJhdG9ycz8gV2hhdCBkb2VzIEF1dG9DQUQgdXNlP1xuXG4gICAgICAgIGlmIChpU3RhcnQgPj0gMCAmJiBpRW5kID4gaVN0YXJ0KSB7XG4gICAgICAgICAgICBiYXNlID0gbmFtZS5zbGljZSgwLCBpU3RhcnQrMSk7XG4gICAgICAgICAgICB2YXIgc3N1ZmZpeCA9IG5hbWUuc2xpY2UoaVN0YXJ0KzEsIGlFbmQpO1xuICAgICAgICAgICAgc3VmZml4ID0gcGFyc2VJbnQoc3N1ZmZpeCwgMTApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvL21ha2Ugc3VyZSB3ZSBnZXQgdGhlIHNhbWUgdGhpbmcgYmFjayB3aGVuXG4gICAgICAgICAgICAvL2NvbnZlcnRpbmcgYmFjayB0byBzdHJpbmcsIG90aGVyd2lzZSBkb24ndCBcbiAgICAgICAgICAgIC8vZGVjb21wb3NlIGl0LlxuICAgICAgICAgICAgaWYgKCFzdWZmaXggfHwgc3VmZml4K1wiXCIgIT09IHNzdWZmaXgpIHtcbiAgICAgICAgICAgICAgICBiYXNlID0gbmFtZTtcbiAgICAgICAgICAgICAgICBzdWZmaXggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmFzZSA9IG5hbWU7XG4gICAgICAgICAgICBzdWZmaXggPSAwO1xuICAgICAgICB9XG5cblxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5zMmlbYmFzZV07XG4gICAgICAgIGlmIChpZHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWR4ID0gdGhpcy5zdHJpbmdzLmFkZChiYXNlKTtcbiAgICAgICAgICAgIHRoaXMuczJpW2Jhc2VdID0gaWR4O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYW1lc1tpbmRleF0gPSBpZHg7XG4gICAgICAgIHRoaXMubmFtZVN1ZmZpeGVzW2luZGV4XSA9IHN1ZmZpeDtcbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBhcnJheVRvQnVmZmVyKGEpIHtcbiAgICAgICAgdmFyIGIgPSBuZXcgSW50MzJBcnJheShhLmxlbmd0aCk7XG4gICAgICAgIGIuc2V0KGEpO1xuICAgICAgICByZXR1cm4gYjtcbiAgICB9XG5cbiAgICBJbnN0YW5jZVRyZWVTdG9yYWdlLnByb3RvdHlwZS5mbGF0dGVuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubm9kZXMgPSBhcnJheVRvQnVmZmVyKHRoaXMubm9kZXMpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gYXJyYXlUb0J1ZmZlcih0aGlzLmNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5uYW1lcyA9IGFycmF5VG9CdWZmZXIodGhpcy5uYW1lcyk7XG4gICAgICAgIHRoaXMubmFtZVN1ZmZpeGVzID0gYXJyYXlUb0J1ZmZlcih0aGlzLm5hbWVTdWZmaXhlcyk7XG4gICAgICAgIHRoaXMuc3RyaW5ncy5mbGF0dGVuKCk7XG4gICAgICAgIHRoaXMuczJpID0gbnVsbDsgLy93ZSBkb24ndCBuZWVkIHRoaXMgdGVtcG9yYXJ5IG1hcCBvbmNlIHdlJ3ZlIGJ1aWx0IHRoZSBzdHJpbmdzIGxpc3RcbiAgICB9O1xuXG5cblxuICAgIGV4cG9ydCBmdW5jdGlvbiBJbnN0YW5jZVRyZWVBY2Nlc3Mobm9kZUFycmF5LCByb290SWQsIG5vZGVCb3hlcykge1xuICAgICAgICB0aGlzLm5vZGVzID0gbm9kZUFycmF5Lm5vZGVzO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gbm9kZUFycmF5LmNoaWxkcmVuO1xuICAgICAgICB0aGlzLmRiSWRUb0luZGV4ID0gbm9kZUFycmF5LmRiSWRUb0luZGV4O1xuICAgICAgICB0aGlzLm5hbWVzID0gbm9kZUFycmF5Lm5hbWVzO1xuICAgICAgICB0aGlzLm5hbWVTdWZmaXhlcyA9IG5vZGVBcnJheS5uYW1lU3VmZml4ZXM7XG4gICAgICAgIHRoaXMuc3RyaW5ncyA9IG5ldyBGbGF0U3RyaW5nU3RvcmFnZShub2RlQXJyYXkuc3RyaW5ncyk7XG4gICAgICAgIHRoaXMucm9vdElkID0gcm9vdElkO1xuICAgICAgICB0aGlzLm51bU5vZGVzID0gdGhpcy5ub2Rlcy5sZW5ndGggLyBTSVpFT0ZfTk9ERTtcbiAgICAgICAgdGhpcy52aXNpYmxlSWRzID0gbnVsbDtcblxuICAgICAgICAvLyBvbmx5IHVzZWQgaWYgYmJveGVzIGFyZSBwcmVjb21wdXRlZFxuICAgICAgICB0aGlzLm5vZGVCb3hlcyA9IG5vZGVCb3hlcztcbiAgICB9XG5cbiAgICBJbnN0YW5jZVRyZWVBY2Nlc3MucHJvdG90eXBlLmR0b3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5ub2RlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICB0aGlzLmRiSWRUb0luZGV4ID0gbnVsbDtcbiAgICAgICAgdGhpcy5uYW1lcyA9IG51bGw7XG4gICAgICAgIHRoaXMubmFtZVN1ZmZpeGVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdHJpbmdzID0gbnVsbDtcbiAgICAgICAgdGhpcy52aXNpYmxlSWRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub2RlQm94ZXMgPSBudWxsO1xuICAgIH1cblxuICAgIEluc3RhbmNlVHJlZUFjY2Vzcy5wcm90b3R5cGUuZ2V0TnVtTm9kZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVtTm9kZXM7XG4gICAgfTtcblxuICAgIEluc3RhbmNlVHJlZUFjY2Vzcy5wcm90b3R5cGUuZ2V0SW5kZXggPSBmdW5jdGlvbihkYklkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRiSWRUb0luZGV4W2RiSWRdO1xuICAgIH07XG5cbiAgICBJbnN0YW5jZVRyZWVBY2Nlc3MucHJvdG90eXBlLm5hbWUgPSBmdW5jdGlvbihkYklkLCBpbmNsdWRlQ291bnQpIHtcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuZGJJZFRvSW5kZXhbZGJJZF07XG4gICAgICAgIHZhciBiYXNlID0gdGhpcy5zdHJpbmdzLmdldCh0aGlzLm5hbWVzW2lkeF0pO1xuICAgICAgICB2YXIgc3VmZml4ID0gdGhpcy5uYW1lU3VmZml4ZXNbaWR4XTtcbiAgICAgICAgdmFyIG5hbWU7XG4gICAgICAgIGlmIChzdWZmaXgpIHtcbiAgICAgICAgICAgIC8vTk9URTogdXBkYXRlIHRoaXMgbG9naWMgaWYgbW9yZSBzZXBhcmF0b3JzIGFyZSBzdXBwb3J0ZWQgaW4gcHJvY2Vzc05hbWUgYWJvdmVcbiAgICAgICAgICAgIHZhciBsYXN0Q2hhciA9IGJhc2UuY2hhckF0KGJhc2UubGVuZ3RoLTEpO1xuICAgICAgICAgICAgaWYgKGxhc3RDaGFyID09PSBcIltcIilcbiAgICAgICAgICAgICAgICBuYW1lID0gYmFzZSArIHN1ZmZpeCArIFwiXVwiO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG5hbWUgPSBiYXNlICsgc3VmZml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmFtZSA9IGJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5jbHVkZUNvdW50KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hpbGRDb3VudHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVDaGlsZENvdW50cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRDb3VudHNbZGJJZF0gPiAwKSB7XG4gICAgICAgICAgICAgICAgbmFtZSArPSBcIiAoXCIgKyB0aGlzLmNoaWxkQ291bnRzW2RiSWRdICsgXCIpXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9O1xuXG4gICAgSW5zdGFuY2VUcmVlQWNjZXNzLnByb3RvdHlwZS5nZXRQYXJlbnRJZCA9IGZ1bmN0aW9uKGRiSWQpIHtcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuZGJJZFRvSW5kZXhbZGJJZF07XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzW2lkeCAqIFNJWkVPRl9OT0RFICsgT0ZGU0VUX1BBUkVOVF07XG4gICAgfTtcblxuICAgIEluc3RhbmNlVHJlZUFjY2Vzcy5wcm90b3R5cGUuZ2V0Tm9kZUZsYWdzID0gZnVuY3Rpb24oZGJJZCkge1xuICAgICAgICB2YXIgaWR4ID0gdGhpcy5kYklkVG9JbmRleFtkYklkXTtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbaWR4ICogU0laRU9GX05PREUgKyBPRkZTRVRfRkxBR1NdO1xuICAgIH07XG5cbiAgICBJbnN0YW5jZVRyZWVBY2Nlc3MucHJvdG90eXBlLnNldE5vZGVGbGFncyA9IGZ1bmN0aW9uKGRiSWQsIGZsYWdzKSB7XG4gICAgICAgIHZhciBpZHggPSB0aGlzLmRiSWRUb0luZGV4W2RiSWRdO1xuICAgICAgICBpZiAoaWR4KSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVzW2lkeCAqIFNJWkVPRl9OT0RFICsgT0ZGU0VUX0ZMQUdTXSA9IGZsYWdzO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIEluc3RhbmNlVHJlZUFjY2Vzcy5wcm90b3R5cGUuZ2V0TnVtQ2hpbGRyZW4gPSBmdW5jdGlvbihkYklkKSB7XG5cbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuZGJJZFRvSW5kZXhbZGJJZF07XG4gICAgICAgIHZhciBudW1DaGlsZHJlbiA9IHRoaXMubm9kZXNbaWR4ICogU0laRU9GX05PREUgKyBPRkZTRVRfTlVNX0NISUxEXTtcblxuICAgICAgICAvL0lmIG51bUNoaWxkcmVuIGlzIG5vbi1uZWdhdGl2ZSwgdGhlbiBhbGwgY2hpbGRyZW4gYXJlIG5vZGVzIChub3QgZnJhZ21lbnRzKVxuICAgICAgICBpZiAobnVtQ2hpbGRyZW4gPj0gMClcbiAgICAgICAgICAgIHJldHVybiBudW1DaGlsZHJlbjtcblxuICAgICAgICAvL05vZGUgaGFzIG1peGVkIGZyYWdtZW50cyBhbmQgY2hpbGQgbm9kZXMsIHNvIHdlIGhhdmUgdG8gbG9vcCBhbmQgY29sbGVjdCBqdXN0IHRoZSBub2RlIGNoaWxkcmVuXG4gICAgICAgIHZhciBmaXJzdENoaWxkID0gdGhpcy5ub2Rlc1tpZHggKiBTSVpFT0ZfTk9ERSArIE9GRlNFVF9GSVJTVF9DSElMRF07XG5cbiAgICAgICAgbnVtQ2hpbGRyZW4gPSBNYXRoLmFicyhudW1DaGlsZHJlbik7XG5cbiAgICAgICAgdmFyIG51bU5vZGVDaGlsZHJlbiA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPG51bUNoaWxkcmVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZElkeCA9IHRoaXMuY2hpbGRyZW5bZmlyc3RDaGlsZCtpXTtcblxuICAgICAgICAgICAgLy9kaWQgd2UgcmVhY2ggdGhlIGZyYWdtZW50IGlkcyBzdWItbGlzdD9cbiAgICAgICAgICAgIGlmIChjaGlsZElkeCA8IDApXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIG51bU5vZGVDaGlsZHJlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bU5vZGVDaGlsZHJlbjtcbiAgICB9O1xuXG4gICAgSW5zdGFuY2VUcmVlQWNjZXNzLnByb3RvdHlwZS5nZXROdW1GcmFnbWVudHMgPSBmdW5jdGlvbihkYklkKSB7XG4gICAgICAgIHZhciBpZHggPSB0aGlzLmRiSWRUb0luZGV4W2RiSWRdO1xuXG4gICAgICAgIHZhciBudW1DaGlsZHJlbiA9IHRoaXMubm9kZXNbaWR4ICogU0laRU9GX05PREUgKyBPRkZTRVRfTlVNX0NISUxEXTtcblxuICAgICAgICAvL0lmIG51bUNoaWxkcmVuIGlzIG5vbi1uZWdhdGl2ZSwgdGhlcmUgYXJlbid0IGFueSBmcmFnbWVudHMgYmVsb25naW5nIHRvIHRoaXMgbm9kZVxuICAgICAgICBpZiAobnVtQ2hpbGRyZW4gPj0gMClcbiAgICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIC8vTm9kZSBoYXMgbWl4ZWQgZnJhZ21lbnRzIGFuZCBjaGlsZCBub2Rlcywgc28gd2UgaGF2ZSB0byBsb29wIGFuZCBjb2xsZWN0IGp1c3QgdGhlIG5vZGUgY2hpbGRyZW5cbiAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSB0aGlzLm5vZGVzW2lkeCAqIFNJWkVPRl9OT0RFICsgT0ZGU0VUX0ZJUlNUX0NISUxEXTtcblxuICAgICAgICBudW1DaGlsZHJlbiA9IE1hdGguYWJzKG51bUNoaWxkcmVuKTtcblxuICAgICAgICB2YXIgbnVtRnJhZ0NoaWxkcmVuID0gMDtcblxuICAgICAgICAvL0l0ZXJhdGUgYmFja3dhcmRzLCBiZWNhdXNlIGZyYWdtZW50IGNoaWxkcmVuIGFyZSBhdCB0aGUgYmFjayBvZiB0aGUgY2hpbGRyZW4gbGlzdFxuICAgICAgICBmb3IgKHZhciBpPW51bUNoaWxkcmVuLTE7IGk+PTA7IGktLSkge1xuICAgICAgICAgICAgdmFyIGNoaWxkSWR4ID0gdGhpcy5jaGlsZHJlbltmaXJzdENoaWxkK2ldO1xuXG4gICAgICAgICAgICAvL2RpZCB3ZSByZWFjaCB0aGUgaW5uZXIgbm9kZSBjaGlsZHJlbiBpZHMgc3ViLWxpc3Q/XG4gICAgICAgICAgICBpZiAoY2hpbGRJZHggPj0gMClcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgbnVtRnJhZ0NoaWxkcmVuKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVtRnJhZ0NoaWxkcmVuO1xuICAgIH07XG5cbiAgICAvLyBOT1RFOiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaWYgcHJlY29tcHV0ZWQgYmJveGVzIGFyZSBhdmFpbGFibGUuXG4gICAgSW5zdGFuY2VUcmVlQWNjZXNzLnByb3RvdHlwZS5nZXROb2RlQm94ID0gZnVuY3Rpb24oZGJJZCwgZHN0KSB7XG4gICAgICAgIHZhciBpZHggPSB0aGlzLmdldEluZGV4KGRiSWQpO1xuICAgICAgICB2YXIgb2ZmID0gaWR4ICogNjtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPDY7IGkrKylcbiAgICAgICAgICAgIGRzdFtpXSA9IHRoaXMubm9kZUJveGVzW29mZitpXTtcbiAgICB9O1xuXG4gICAgLy9SZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRiSWRzIG9mIGFsbCBvYmplY3RzXG4gICAgLy90aGF0IGFyZSBwaHlzaWNhbGx5IHJlcHJlc2VudGVkIGluIHRoZSBzY2VuZS4gTm90IGFsbFxuICAgIC8vb2JqZWN0cyBpbiB0aGUgcHJvcGVydHkgZGF0YWJhc2Ugb2NjdXIgcGh5c2ljYWxseSBpbiBlYWNoIGdyYXBoaWNzIHZpZXdhYmxlLlxuICAgIEluc3RhbmNlVHJlZUFjY2Vzcy5wcm90b3R5cGUuZ2V0VmlzaWJsZUlkcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMudmlzaWJsZUlkcykge1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlSWRzID0gT2JqZWN0LmtleXModGhpcy5kYklkVG9JbmRleCkubWFwKGZ1bmN0aW9uKGspIHsgcmV0dXJuIHBhcnNlSW50KGspOyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVJZHM7XG4gICAgfTtcblxuXG4gICAgSW5zdGFuY2VUcmVlQWNjZXNzLnByb3RvdHlwZS5lbnVtTm9kZUNoaWxkcmVuID0gZnVuY3Rpb24oZGJJZCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuZGJJZFRvSW5kZXhbZGJJZF07XG4gICAgICAgIHZhciBmaXJzdENoaWxkID0gdGhpcy5ub2Rlc1tpZHggKiBTSVpFT0ZfTk9ERSArIE9GRlNFVF9GSVJTVF9DSElMRF07XG4gICAgICAgIHZhciBudW1DaGlsZHJlbiA9IHRoaXMubm9kZXNbaWR4ICogU0laRU9GX05PREUgKyBPRkZTRVRfTlVNX0NISUxEXTtcblxuICAgICAgICBudW1DaGlsZHJlbiA9IE1hdGguYWJzKG51bUNoaWxkcmVuKTtcblxuICAgICAgICBmb3IgKHZhciBpPTA7IGk8bnVtQ2hpbGRyZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkSWR4ID0gdGhpcy5jaGlsZHJlbltmaXJzdENoaWxkK2ldO1xuXG4gICAgICAgICAgICAvL2RpZCB3ZSByZWFjaCB0aGUgZnJhZ21lbnQgaWRzIHN1Yi1saXN0P1xuICAgICAgICAgICAgaWYgKGNoaWxkSWR4IDwgMClcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgdmFyIGNoaWxkRGJJZCA9IHRoaXMubm9kZXNbY2hpbGRJZHggKiBTSVpFT0ZfTk9ERSArIE9GRlNFVF9EQklEXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhjaGlsZERiSWQsIGRiSWQsIGlkeCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGJJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBJbnN0YW5jZVRyZWVBY2Nlc3MucHJvdG90eXBlLmVudW1Ob2RlRnJhZ21lbnRzID0gZnVuY3Rpb24oZGJJZCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuZGJJZFRvSW5kZXhbZGJJZF07XG4gICAgICAgIHZhciBmaXJzdENoaWxkID0gdGhpcy5ub2Rlc1tpZHggKiBTSVpFT0ZfTk9ERSArIE9GRlNFVF9GSVJTVF9DSElMRF07XG4gICAgICAgIHZhciBudW1DaGlsZHJlbiA9IHRoaXMubm9kZXNbaWR4ICogU0laRU9GX05PREUgKyBPRkZTRVRfTlVNX0NISUxEXTtcblxuICAgICAgICAvL0lmIG51bUNoaWxkcmVuIGlzIG5lZ2F0aXZlLCBpdCBtZWFucyB0aGVyZSBhcmUgZnJhZ21lbnRzIGluIHRoZSBub2RlXG4gICAgICAgIGlmIChudW1DaGlsZHJlbiA8IDApIHtcbiAgICAgICAgICAgIG51bUNoaWxkcmVuID0gLW51bUNoaWxkcmVuO1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPG51bUNoaWxkcmVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGRJZHggPSB0aGlzLmNoaWxkcmVuW2ZpcnN0Q2hpbGQraV07XG5cbiAgICAgICAgICAgICAgICAvL3NraXAgcGFzdCBjaGlsZHJlbiB0aGF0IGFyZSBpbm5lciBub2RlcyAobm90IGZyYWdtZW50cylcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRJZHggPiAwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIC8vQ29udmVydCBmcmFnSWQgZnJvbSAtMSBiYXNlZCBuZWdhdGl2ZSBiYWNrIHRvIHRoZSBhY3R1YWwgZnJhZ0lkXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKC1jaGlsZElkeC0xLCBkYklkLCBpZHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYklkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBJbnN0YW5jZVRyZWVBY2Nlc3MucHJvdG90eXBlLmNvbXB1dGVCb3hlcyA9IGZ1bmN0aW9uKGZyYWdCb3hlcykge1xuXG4gICAgICAgIGlmICghdGhpcy5ub2RlQm94ZXMpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZUJveGVzID0gbmV3IEZsb2F0MzJBcnJheSg2ICogdGhpcy5udW1Ob2Rlcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZUFjY2VzcyA9IHRoaXM7XG4gICAgICAgIHZhciBpZHggPSBub2RlQWNjZXNzLmdldEluZGV4KG5vZGVBY2Nlc3Mucm9vdElkKTtcbiAgICAgICAgdmFyIG5vZGVCb3hlcyA9IG5vZGVBY2Nlc3Mubm9kZUJveGVzO1xuXG4gICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlQ2hpbGRyZW4oY2hpbGRfZGJJZCwgcGFyZW50RGJJRCwgcGFyZW50SWR4KSB7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZElkeCA9IG5vZGVBY2Nlc3MuZ2V0SW5kZXgoY2hpbGRfZGJJZCk7XG5cbiAgICAgICAgICAgIC8vUmVjdXJzZSwgdGhlbiBhZGQgYWxsIGNoaWxkIGJveGVzIHRvIG1ha2UgdGhpcyBub2RlJ3MgYm94XG4gICAgICAgICAgICBjb21wdXRlVHJlZUJCb3hlc1JlYyhjaGlsZF9kYklkLCBjaGlsZElkeCk7XG5cbiAgICAgICAgICAgIHZhciBib3hfb2Zmc2V0ID0gcGFyZW50SWR4ICogNjtcbiAgICAgICAgICAgIHZhciBjaGlsZF9ib3hfb2Zmc2V0ID0gY2hpbGRJZHggKiA2O1xuICAgICAgICAgICAgZm9yICh2YXIgaz0wOyBrPDM7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChub2RlQm94ZXNbYm94X29mZnNldCtrXSA+IG5vZGVCb3hlc1tjaGlsZF9ib3hfb2Zmc2V0K2tdKVxuICAgICAgICAgICAgICAgICAgICBub2RlQm94ZXNbYm94X29mZnNldCtrXSA9IG5vZGVCb3hlc1tjaGlsZF9ib3hfb2Zmc2V0K2tdO1xuICAgICAgICAgICAgICAgIGlmIChub2RlQm94ZXNbYm94X29mZnNldCtrKzNdIDwgbm9kZUJveGVzW2NoaWxkX2JveF9vZmZzZXQrayszXSlcbiAgICAgICAgICAgICAgICAgICAgbm9kZUJveGVzW2JveF9vZmZzZXQrayszXSA9IG5vZGVCb3hlc1tjaGlsZF9ib3hfb2Zmc2V0K2srM107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0cmF2ZXJzZUZyYWdtZW50cyhmcmFnSWQsIGRiSWQsIGlkeCl7XG4gICAgICAgICAgICB2YXIgZnJhZ19ib3hfb2Zmc2V0ID0gZnJhZ0lkICogNjtcbiAgICAgICAgICAgIHZhciBib3hfb2Zmc2V0ID0gaWR4ICogNjtcblxuICAgICAgICAgICAgZm9yICh2YXIgaz0wOyBrPDM7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChub2RlQm94ZXNbYm94X29mZnNldCtrXSA+IGZyYWdCb3hlc1tmcmFnX2JveF9vZmZzZXQra10pXG4gICAgICAgICAgICAgICAgICAgIG5vZGVCb3hlc1tib3hfb2Zmc2V0K2tdID0gZnJhZ0JveGVzW2ZyYWdfYm94X29mZnNldCtrXTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZUJveGVzW2JveF9vZmZzZXQrayszXSA8IGZyYWdCb3hlc1tmcmFnX2JveF9vZmZzZXQrayszXSlcbiAgICAgICAgICAgICAgICAgICAgbm9kZUJveGVzW2JveF9vZmZzZXQrayszXSA9IGZyYWdCb3hlc1tmcmFnX2JveF9vZmZzZXQrayszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVUcmVlQkJveGVzUmVjKGRiSWQsIGlkeCkge1xuXG4gICAgICAgICAgICB2YXIgYm94X29mZnNldCA9IGlkeCAqIDY7XG4gICAgICAgICAgICBub2RlQm94ZXNbYm94X29mZnNldF0gICA9IG5vZGVCb3hlc1tib3hfb2Zmc2V0KzFdID0gbm9kZUJveGVzW2JveF9vZmZzZXQrMl0gPSAgSW5maW5pdHk7XG4gICAgICAgICAgICBub2RlQm94ZXNbYm94X29mZnNldCszXSA9IG5vZGVCb3hlc1tib3hfb2Zmc2V0KzRdID0gbm9kZUJveGVzW2JveF9vZmZzZXQrNV0gPSAtSW5maW5pdHk7XG5cbiAgICAgICAgICAgIGlmIChub2RlQWNjZXNzLmdldE51bUNoaWxkcmVuKGRiSWQpKSB7XG4gICAgICAgICAgICAgICAgbm9kZUFjY2Vzcy5lbnVtTm9kZUNoaWxkcmVuKGRiSWQsIHRyYXZlcnNlQ2hpbGRyZW4sIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL0xlYWYgbm9kZSAtLSBkb24ndCB0aGluayBpdCdzIHBvc3NpYmxlIGZvciBhIG5vZGUgdG8gaGF2ZVxuICAgICAgICAgICAgLy9ib3RoIGNoaWxkcmVuIGFuZCBsZWFmIGZyYWdtZW50cywgYnV0IHdlIGRvIGhhbmRsZSB0aGF0IGhlcmUuXG4gICAgICAgICAgICBpZiAobm9kZUFjY2Vzcy5nZXROdW1GcmFnbWVudHMoZGJJZCkpIHtcbiAgICAgICAgICAgICAgICBub2RlQWNjZXNzLmVudW1Ob2RlRnJhZ21lbnRzKGRiSWQsIHRyYXZlcnNlRnJhZ21lbnRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgY29tcHV0ZVRyZWVCQm94ZXNSZWMobm9kZUFjY2Vzcy5yb290SWQsIGlkeCk7XG4gICAgfTtcblxuICAgIEluc3RhbmNlVHJlZUFjY2Vzcy5wcm90b3R5cGUuY29tcHV0ZUNoaWxkQ291bnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGlsZENvdW50cykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZENvdW50cyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLm51bU5vZGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBub2RlQWNjZXNzID0gdGhpcztcbiAgICAgICAgdmFyIGlkeCA9IG5vZGVBY2Nlc3MuZ2V0SW5kZXgobm9kZUFjY2Vzcy5yb290SWQpO1xuICAgICAgICB2YXIgY2hpbGRDb3VudHMgPSBub2RlQWNjZXNzLmNoaWxkQ291bnRzO1xuXG4gICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlQ2hpbGRyZW4oY2hpbGRfZGJJZCwgcGFyZW50RGJJRCwgcGFyZW50SWR4KSB7XG5cbiAgICAgICAgICAgIHZhciBjaGlsZElkeCA9IG5vZGVBY2Nlc3MuZ2V0SW5kZXgoY2hpbGRfZGJJZCk7XG5cbiAgICAgICAgICAgIC8vUmVjdXJzZSwgdGhlbiBhZGQgYWxsIGNoaWxkIGJveGVzIHRvIG1ha2UgdGhpcyBub2RlJ3MgYm94XG4gICAgICAgICAgICBsZXQgY291bnQgPSBjb21wdXRlQ2hpbGRDb3VudHNSZWMoY2hpbGRfZGJJZCwgY2hpbGRJZHgpO1xuXG4gICAgICAgICAgICBjaGlsZENvdW50c1twYXJlbnREYklEXSArPSBjb3VudDtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZnVuY3Rpb24gY29tcHV0ZUNoaWxkQ291bnRzUmVjKGRiSWQsIGlkeCkge1xuXG4gICAgICAgICAgICBsZXQgZmxhZ3MgPSBub2RlQWNjZXNzLmdldE5vZGVGbGFncyhkYklkKTtcbiAgICAgICAgICAgIGxldCBteUNvdW50ID0gMDtcblxuICAgICAgICAgICAgaWYgKGZsYWdzID09PSAweDQvKk5PREVfVFlQRV9DT01QT1NJVEUqLykge1xuICAgICAgICAgICAgICAgIC8vSWYgaXQncyBhIGNvbXBvc2l0ZSBub2RlLCB0cmVhdCBpdCBhcyBhIHNpbmdsZVxuICAgICAgICAgICAgICAgIC8vb3BhcXVlIG9iamVjdCB3aG9zZSBjb250ZW50cyBkb24ndCBtYXR0ZXIgdG8gdGhlIHVzZXJcbiAgICAgICAgICAgICAgICAvL2ZvciBjb3VudGluZyBwdXJwb3Nlcy5cbiAgICAgICAgICAgICAgICBteUNvdW50ID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBpZiAobm9kZUFjY2Vzcy5nZXROdW1DaGlsZHJlbihkYklkKSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlQWNjZXNzLmVudW1Ob2RlQ2hpbGRyZW4oZGJJZCwgdHJhdmVyc2VDaGlsZHJlbiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9MZWFmIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAobm9kZUFjY2Vzcy5nZXROdW1GcmFnbWVudHMoZGJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbXlDb3VudCA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbXlDb3VudCArIGNoaWxkQ291bnRzW2RiSWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcHV0ZUNoaWxkQ291bnRzUmVjKG5vZGVBY2Nlc3Mucm9vdElkLCBpZHgpO1xuICAgIH07Il0sIm5hbWVzIjpbInV0ZjE2dG84IiwidXRmOEJsb2JUb1N0ciIsIkZsYXRTdHJpbmdTdG9yYWdlIiwiY29uc3RydWN0b3IiLCJpbml0aWFsIiwiYnVmIiwiaWR4IiwibmV4dCIsIlVpbnQ4QXJyYXkiLCJhbGxvY2F0ZSIsImxlbiIsImxlbmd0aCIsIm5zeiIsIk1hdGgiLCJtYXgiLCJuYiIsInNldCIsImFkZCIsInMiLCJwdXNoIiwiZ2V0IiwiaSIsInVuZGVmaW5lZCIsInN0YXJ0IiwiZW5kIiwiZmxhdHRlbiIsImFycmF5VG9CdWZmZXIiLCJTSVpFT0ZfTk9ERSIsIk9GRlNFVF9EQklEIiwiT0ZGU0VUX1BBUkVOVCIsIk9GRlNFVF9GSVJTVF9DSElMRCIsIk9GRlNFVF9OVU1fQ0hJTEQiLCJPRkZTRVRfRkxBR1MiLCJJbnN0YW5jZVRyZWVTdG9yYWdlIiwibm9kZXMiLCJuZXh0Tm9kZSIsImNoaWxkcmVuIiwibmV4dENoaWxkIiwiZGJJZFRvSW5kZXgiLCJuYW1lcyIsInMyaSIsInN0cmluZ3MiLCJuYW1lU3VmZml4ZXMiLCJnZXRJbmRleCIsInByb3RvdHlwZSIsImRiSWQiLCJpbmRleCIsInNldE5vZGUiLCJwYXJlbnREYklkIiwibmFtZSIsImZsYWdzIiwiY2hpbGRyZW5JZHMiLCJmcmFnSWRzIiwiYmFzZU9mZnNldCIsIm51bUNoaWxkcmVuIiwiaGFzRnJhZ21lbnRzIiwiY29uc29sZSIsImVycm9yIiwicHJvY2Vzc05hbWUiLCJiYXNlIiwic3VmZml4IiwiaVN0YXJ0IiwiaUVuZCIsImxhc3RJbmRleE9mIiwic2xpY2UiLCJzc3VmZml4IiwicGFyc2VJbnQiLCJhIiwiYiIsIkludDMyQXJyYXkiLCJJbnN0YW5jZVRyZWVBY2Nlc3MiLCJub2RlQXJyYXkiLCJyb290SWQiLCJub2RlQm94ZXMiLCJudW1Ob2RlcyIsInZpc2libGVJZHMiLCJkdG9yIiwiZ2V0TnVtTm9kZXMiLCJpbmNsdWRlQ291bnQiLCJsYXN0Q2hhciIsImNoYXJBdCIsImNoaWxkQ291bnRzIiwiY29tcHV0ZUNoaWxkQ291bnRzIiwiZ2V0UGFyZW50SWQiLCJnZXROb2RlRmxhZ3MiLCJzZXROb2RlRmxhZ3MiLCJnZXROdW1DaGlsZHJlbiIsImZpcnN0Q2hpbGQiLCJhYnMiLCJudW1Ob2RlQ2hpbGRyZW4iLCJjaGlsZElkeCIsImdldE51bUZyYWdtZW50cyIsIm51bUZyYWdDaGlsZHJlbiIsImdldE5vZGVCb3giLCJkc3QiLCJvZmYiLCJnZXRWaXNpYmxlSWRzIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImsiLCJlbnVtTm9kZUNoaWxkcmVuIiwiY2FsbGJhY2siLCJjaGlsZERiSWQiLCJlbnVtTm9kZUZyYWdtZW50cyIsImNvbXB1dGVCb3hlcyIsImZyYWdCb3hlcyIsIkZsb2F0MzJBcnJheSIsIm5vZGVBY2Nlc3MiLCJ0cmF2ZXJzZUNoaWxkcmVuIiwiY2hpbGRfZGJJZCIsInBhcmVudERiSUQiLCJwYXJlbnRJZHgiLCJjb21wdXRlVHJlZUJCb3hlc1JlYyIsImJveF9vZmZzZXQiLCJjaGlsZF9ib3hfb2Zmc2V0IiwidHJhdmVyc2VGcmFnbWVudHMiLCJmcmFnSWQiLCJmcmFnX2JveF9vZmZzZXQiLCJJbmZpbml0eSIsIlVpbnQzMkFycmF5IiwiY291bnQiLCJjb21wdXRlQ2hpbGRDb3VudHNSZWMiLCJteUNvdW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/wgs/scene/InstanceTreeStorage.js\n"); /***/ }), /***/ "./src/wgs/scene/LmvBox3.js": /*!**********************************!*\ !*** ./src/wgs/scene/LmvBox3.js ***! \**********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LmvBox3: () => (/* binding */ LmvBox3)\n/* harmony export */ });\n/* harmony import */ var _LmvVector3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n/**\n * @author bhouston / http://exocortex.com\n * @author WestLangley / http://github.com/WestLangley\n */\n/* Pruned version of THREE.Box3, for use in the LMV web worker */\n\n\n\nlet LmvBox3 = function (min, max) {\n\n this.min = min !== undefined ? min : new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(Infinity, Infinity, Infinity);\n this.max = max !== undefined ? max : new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(-Infinity, -Infinity, -Infinity);\n\n};\n\nLmvBox3.prototype = {\n\n constructor: LmvBox3,\n\n set: function (min, max) {\n\n this.min.copy(min);\n this.max.copy(max);\n\n return this;\n\n },\n\n setFromPoints: function (points) {\n\n this.makeEmpty();\n\n for (var i = 0, il = points.length; i < il; i++) {\n\n this.expandByPoint(points[i]);\n\n }\n\n return this;\n\n },\n\n setFromArray: function (array, offset) {\n\n this.min.x = array[offset];\n this.min.y = array[offset + 1];\n this.min.z = array[offset + 2];\n\n this.max.x = array[offset + 3];\n this.max.y = array[offset + 4];\n this.max.z = array[offset + 5];\n\n return this;\n\n },\n\n copyToArray: function (array, offset) {\n\n array[offset] = this.min.x;\n array[offset + 1] = this.min.y;\n array[offset + 2] = this.min.z;\n\n array[offset + 3] = this.max.x;\n array[offset + 4] = this.max.y;\n array[offset + 5] = this.max.z;\n\n },\n\n setFromCenterAndSize: function () {\n\n var v1 = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n\n return function (center, size) {\n\n var halfSize = v1.copy(size).multiplyScalar(0.5);\n\n this.min.copy(center).sub(halfSize);\n this.max.copy(center).add(halfSize);\n\n return this;\n\n };\n\n }(),\n\n clone: function () {\n\n return new this.constructor().copy(this);\n\n },\n\n copy: function (box) {\n\n this.min.copy(box.min);\n this.max.copy(box.max);\n\n return this;\n\n },\n\n makeEmpty: function () {\n\n this.min.x = this.min.y = this.min.z = Infinity;\n this.max.x = this.max.y = this.max.z = -Infinity;\n\n return this;\n\n },\n\n empty: function () {\n\n // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z;\n\n },\n\n isEmpty: function () {\n // threejs backport - https://github.com/mrdoob/three.js/blob/dev/src/math/Box3.js\n return this.empty();\n },\n\n center: function (optionalTarget) {\n console.warn(\"LmvBox3.center() is deprecated. Use LmvBox3.getCenter() instead.\");\n return this.getCenter(optionalTarget);\n },\n\n getCenter: function (optionalTarget) {\n\n var result = optionalTarget || new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n return result.addVectors(this.min, this.max).multiplyScalar(0.5);\n\n },\n\n size: function (optionalTarget) {\n\n var result = optionalTarget || new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n return result.subVectors(this.max, this.min);\n\n },\n\n // For compatibility with latest THREE\n getSize: function (optionalTarget) {\n\n var result = optionalTarget || new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n return result.subVectors(this.max, this.min);\n\n },\n\n expandByPoint: function (point) {\n\n this.min.min(point);\n this.max.max(point);\n\n return this;\n\n },\n\n expandByVector: function (vector) {\n\n this.min.sub(vector);\n this.max.add(vector);\n\n return this;\n\n },\n\n expandByScalar: function (scalar) {\n\n this.min.addScalar(-scalar);\n this.max.addScalar(scalar);\n\n return this;\n\n },\n\n containsPoint: function (point) {\n\n if (point.x < this.min.x || point.x > this.max.x ||\n point.y < this.min.y || point.y > this.max.y ||\n point.z < this.min.z || point.z > this.max.z) {\n\n return false;\n\n }\n\n return true;\n\n },\n\n containsBox: function (box) {\n\n if (this.min.x <= box.min.x && box.max.x <= this.max.x &&\n this.min.y <= box.min.y && box.max.y <= this.max.y &&\n this.min.z <= box.min.z && box.max.z <= this.max.z) {\n\n return true;\n\n }\n\n return false;\n\n },\n\n getParameter: function (point, optionalTarget) {\n\n // This can potentially have a divide by zero if the box\n // has a size dimension of 0.\n\n var result = optionalTarget || new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n\n return result.set(\n (point.x - this.min.x) / (this.max.x - this.min.x),\n (point.y - this.min.y) / (this.max.y - this.min.y),\n (point.z - this.min.z) / (this.max.z - this.min.z)\n );\n\n },\n\n isIntersectionBox: function (box) {\n\n // using 6 splitting planes to rule out intersections.\n\n if (box.max.x < this.min.x || box.min.x > this.max.x ||\n box.max.y < this.min.y || box.min.y > this.max.y ||\n box.max.z < this.min.z || box.min.z > this.max.z) {\n\n return false;\n\n }\n\n return true;\n\n },\n\n // For compatibility with latest THREE\n intersectsBox: function (box) {\n return this.isIntersectionBox(box);\n },\n\n clampPoint: function (point, optionalTarget) {\n\n var result = optionalTarget || new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n return result.copy(point).clamp(this.min, this.max);\n\n },\n\n distanceToPoint: function () {\n\n var v1 = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n\n return function (point) {\n\n var clampedPoint = v1.copy(point).clamp(this.min, this.max);\n return clampedPoint.sub(point).length();\n\n };\n\n }(),\n\n intersect: function (box) {\n\n this.min.max(box.min);\n this.max.min(box.max);\n\n return this;\n\n },\n\n union: function (box) {\n\n this.min.min(box.min);\n this.max.max(box.max);\n\n return this;\n\n },\n\n applyMatrix4: function () {\n\n var points = [\n new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(),\n new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(),\n new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(),\n new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(),\n new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(),\n new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(),\n new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3(),\n new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3()];\n\n\n return function (matrix) {\n\n // NOTE: I am using a binary pattern to specify all 2^3 combinations below\n points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); // 000\n points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); // 001\n points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); // 010\n points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); // 011\n points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); // 100\n points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); // 101\n points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); // 110\n points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); // 111\n\n this.makeEmpty();\n this.setFromPoints(points);\n\n return this;\n\n };\n\n }(),\n\n translate: function (offset) {\n\n this.min.add(offset);\n this.max.add(offset);\n\n return this;\n\n },\n\n equals: function (box) {\n\n return box.min.equals(this.min) && box.max.equals(this.max);\n\n }\n\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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eDMuanM/ZjAwZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vZXhvY29ydGV4LmNvbVxuICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5XG4gKi9cbi8qIFBydW5lZCB2ZXJzaW9uIG9mIFRIUkVFLkJveDMsIGZvciB1c2UgaW4gdGhlIExNViB3ZWIgd29ya2VyICovXG5cbmltcG9ydCB7IExtdlZlY3RvcjMgfSBmcm9tICcuL0xtdlZlY3RvcjMnO1xuXG5leHBvcnQgbGV0IExtdkJveDMgPSBmdW5jdGlvbiAoIG1pbiwgbWF4ICkge1xuXG4gICAgdGhpcy5taW4gPSAoIG1pbiAhPT0gdW5kZWZpbmVkICkgPyBtaW4gOiBuZXcgTG12VmVjdG9yMyggSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSApO1xuICAgIHRoaXMubWF4ID0gKCBtYXggIT09IHVuZGVmaW5lZCApID8gbWF4IDogbmV3IExtdlZlY3RvcjMoIC0gSW5maW5pdHksIC0gSW5maW5pdHksIC0gSW5maW5pdHkgKTtcblxufTtcblxuTG12Qm94My5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogTG12Qm94MyxcblxuICAgIHNldDogZnVuY3Rpb24gKCBtaW4sIG1heCApIHtcblxuICAgICAgICB0aGlzLm1pbi5jb3B5KCBtaW4gKTtcbiAgICAgICAgdGhpcy5tYXguY29weSggbWF4ICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgc2V0RnJvbVBvaW50czogZnVuY3Rpb24gKCBwb2ludHMgKSB7XG5cbiAgICAgICAgdGhpcy5tYWtlRW1wdHkoKTtcblxuICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGlsID0gcG9pbnRzLmxlbmd0aDsgaSA8IGlsOyBpICsrICkge1xuXG4gICAgICAgICAgICB0aGlzLmV4cGFuZEJ5UG9pbnQoIHBvaW50c1sgaSBdICk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHNldEZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkge1xuXG4gICAgICAgIHRoaXMubWluLnggPSBhcnJheVtvZmZzZXRdO1xuICAgICAgICB0aGlzLm1pbi55ID0gYXJyYXlbb2Zmc2V0KzFdO1xuICAgICAgICB0aGlzLm1pbi56ID0gYXJyYXlbb2Zmc2V0KzJdO1xuXG4gICAgICAgIHRoaXMubWF4LnggPSBhcnJheVtvZmZzZXQrM107XG4gICAgICAgIHRoaXMubWF4LnkgPSBhcnJheVtvZmZzZXQrNF07XG4gICAgICAgIHRoaXMubWF4LnogPSBhcnJheVtvZmZzZXQrNV07XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgY29weVRvQXJyYXk6IGZ1bmN0aW9uIChhcnJheSwgb2Zmc2V0KSB7XG5cbiAgICAgICAgYXJyYXlbb2Zmc2V0XSAgID0gdGhpcy5taW4ueDtcbiAgICAgICAgYXJyYXlbb2Zmc2V0KzFdID0gdGhpcy5taW4ueTtcbiAgICAgICAgYXJyYXlbb2Zmc2V0KzJdID0gdGhpcy5taW4uejtcblxuICAgICAgICBhcnJheVtvZmZzZXQrM10gPSB0aGlzLm1heC54O1xuICAgICAgICBhcnJheVtvZmZzZXQrNF0gPSB0aGlzLm1heC55O1xuICAgICAgICBhcnJheVtvZmZzZXQrNV0gPSB0aGlzLm1heC56O1xuXG4gICAgfSxcblxuICAgIHNldEZyb21DZW50ZXJBbmRTaXplOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIHYxID0gbmV3IExtdlZlY3RvcjMoKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCBjZW50ZXIsIHNpemUgKSB7XG5cbiAgICAgICAgICAgIHZhciBoYWxmU2l6ZSA9IHYxLmNvcHkoIHNpemUgKS5tdWx0aXBseVNjYWxhciggMC41ICk7XG5cbiAgICAgICAgICAgIHRoaXMubWluLmNvcHkoIGNlbnRlciApLnN1YiggaGFsZlNpemUgKTtcbiAgICAgICAgICAgIHRoaXMubWF4LmNvcHkoIGNlbnRlciApLmFkZCggaGFsZlNpemUgKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfTtcblxuICAgIH0oKSxcblxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSggdGhpcyApO1xuXG4gICAgfSxcblxuICAgIGNvcHk6IGZ1bmN0aW9uICggYm94ICkge1xuXG4gICAgICAgIHRoaXMubWluLmNvcHkoIGJveC5taW4gKTtcbiAgICAgICAgdGhpcy5tYXguY29weSggYm94Lm1heCApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIG1ha2VFbXB0eTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHRoaXMubWluLnggPSB0aGlzLm1pbi55ID0gdGhpcy5taW4ueiA9IEluZmluaXR5O1xuICAgICAgICB0aGlzLm1heC54ID0gdGhpcy5tYXgueSA9IHRoaXMubWF4LnogPSAtIEluZmluaXR5O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGVtcHR5OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy8gdGhpcyBpcyBhIG1vcmUgcm9idXN0IGNoZWNrIGZvciBlbXB0eSB0aGFuICggdm9sdW1lIDw9IDAgKSBiZWNhdXNlIHZvbHVtZSBjYW4gZ2V0IHBvc2l0aXZlIHdpdGggdHdvIG5lZ2F0aXZlIGF4ZXNcblxuICAgICAgICByZXR1cm4gKCB0aGlzLm1heC54IDwgdGhpcy5taW4ueCApIHx8ICggdGhpcy5tYXgueSA8IHRoaXMubWluLnkgKSB8fCAoIHRoaXMubWF4LnogPCB0aGlzLm1pbi56ICk7XG5cbiAgICB9LFxuXG4gICAgaXNFbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIHRocmVlanMgYmFja3BvcnQgLSBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVlLmpzL2Jsb2IvZGV2L3NyYy9tYXRoL0JveDMuanNcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHkoKTtcbiAgICB9LFxuXG4gICAgY2VudGVyOiBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJMbXZCb3gzLmNlbnRlcigpIGlzIGRlcHJlY2F0ZWQuIFVzZSBMbXZCb3gzLmdldENlbnRlcigpIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDZW50ZXIob3B0aW9uYWxUYXJnZXQpO1xuICAgIH0sXG5cbiAgICBnZXRDZW50ZXI6IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBMbXZWZWN0b3IzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQuYWRkVmVjdG9ycyggdGhpcy5taW4sIHRoaXMubWF4ICkubXVsdGlwbHlTY2FsYXIoIDAuNSApO1xuXG4gICAgfSxcblxuICAgIHNpemU6IGZ1bmN0aW9uICggb3B0aW9uYWxUYXJnZXQgKSB7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBMbXZWZWN0b3IzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQuc3ViVmVjdG9ycyggdGhpcy5tYXgsIHRoaXMubWluICk7XG5cbiAgICB9LFxuXG4gICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsYXRlc3QgVEhSRUVcbiAgICBnZXRTaXplOiBmdW5jdGlvbiAoIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG4gICAgICAgIHZhciByZXN1bHQgPSBvcHRpb25hbFRhcmdldCB8fCBuZXcgTG12VmVjdG9yMygpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN1YlZlY3RvcnMoIHRoaXMubWF4LCB0aGlzLm1pbiApO1xuXG4gICAgfSxcblxuICAgIGV4cGFuZEJ5UG9pbnQ6IGZ1bmN0aW9uICggcG9pbnQgKSB7XG5cbiAgICAgICAgdGhpcy5taW4ubWluKCBwb2ludCApO1xuICAgICAgICB0aGlzLm1heC5tYXgoIHBvaW50ICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgZXhwYW5kQnlWZWN0b3I6IGZ1bmN0aW9uICggdmVjdG9yICkge1xuXG4gICAgICAgIHRoaXMubWluLnN1YiggdmVjdG9yICk7XG4gICAgICAgIHRoaXMubWF4LmFkZCggdmVjdG9yICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgZXhwYW5kQnlTY2FsYXI6IGZ1bmN0aW9uICggc2NhbGFyICkge1xuXG4gICAgICAgIHRoaXMubWluLmFkZFNjYWxhciggLSBzY2FsYXIgKTtcbiAgICAgICAgdGhpcy5tYXguYWRkU2NhbGFyKCBzY2FsYXIgKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBjb250YWluc1BvaW50OiBmdW5jdGlvbiAoIHBvaW50ICkge1xuXG4gICAgICAgIGlmICggcG9pbnQueCA8IHRoaXMubWluLnggfHwgcG9pbnQueCA+IHRoaXMubWF4LnggfHxcbiAgICAgICAgICAgICBwb2ludC55IDwgdGhpcy5taW4ueSB8fCBwb2ludC55ID4gdGhpcy5tYXgueSB8fFxuICAgICAgICAgICAgIHBvaW50LnogPCB0aGlzLm1pbi56IHx8IHBvaW50LnogPiB0aGlzLm1heC56ICkge1xuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgfSxcblxuICAgIGNvbnRhaW5zQm94OiBmdW5jdGlvbiAoIGJveCApIHtcblxuICAgICAgICBpZiAoICggdGhpcy5taW4ueCA8PSBib3gubWluLnggKSAmJiAoIGJveC5tYXgueCA8PSB0aGlzLm1heC54ICkgJiZcbiAgICAgICAgICAgICAoIHRoaXMubWluLnkgPD0gYm94Lm1pbi55ICkgJiYgKCBib3gubWF4LnkgPD0gdGhpcy5tYXgueSApICYmXG4gICAgICAgICAgICAgKCB0aGlzLm1pbi56IDw9IGJveC5taW4ueiApICYmICggYm94Lm1heC56IDw9IHRoaXMubWF4LnogKSApIHtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIH0sXG5cbiAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uICggcG9pbnQsIG9wdGlvbmFsVGFyZ2V0ICkge1xuXG4gICAgICAgIC8vIFRoaXMgY2FuIHBvdGVudGlhbGx5IGhhdmUgYSBkaXZpZGUgYnkgemVybyBpZiB0aGUgYm94XG4gICAgICAgIC8vIGhhcyBhIHNpemUgZGltZW5zaW9uIG9mIDAuXG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBMbXZWZWN0b3IzKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zZXQoXG4gICAgICAgICAgICAoIHBvaW50LnggLSB0aGlzLm1pbi54ICkgLyAoIHRoaXMubWF4LnggLSB0aGlzLm1pbi54ICksXG4gICAgICAgICAgICAoIHBvaW50LnkgLSB0aGlzLm1pbi55ICkgLyAoIHRoaXMubWF4LnkgLSB0aGlzLm1pbi55ICksXG4gICAgICAgICAgICAoIHBvaW50LnogLSB0aGlzLm1pbi56ICkgLyAoIHRoaXMubWF4LnogLSB0aGlzLm1pbi56IClcbiAgICAgICAgKTtcblxuICAgIH0sXG5cbiAgICBpc0ludGVyc2VjdGlvbkJveDogZnVuY3Rpb24gKCBib3ggKSB7XG5cbiAgICAgICAgLy8gdXNpbmcgNiBzcGxpdHRpbmcgcGxhbmVzIHRvIHJ1bGUgb3V0IGludGVyc2VjdGlvbnMuXG5cbiAgICAgICAgaWYgKCBib3gubWF4LnggPCB0aGlzLm1pbi54IHx8IGJveC5taW4ueCA+IHRoaXMubWF4LnggfHxcbiAgICAgICAgICAgICBib3gubWF4LnkgPCB0aGlzLm1pbi55IHx8IGJveC5taW4ueSA+IHRoaXMubWF4LnkgfHxcbiAgICAgICAgICAgICBib3gubWF4LnogPCB0aGlzLm1pbi56IHx8IGJveC5taW4ueiA+IHRoaXMubWF4LnogKSB7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICB9LFxuXG4gICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsYXRlc3QgVEhSRUVcbiAgICBpbnRlcnNlY3RzQm94OiBmdW5jdGlvbiAoIGJveCApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlcnNlY3Rpb25Cb3goYm94KTtcbiAgICB9LFxuXG4gICAgY2xhbXBQb2ludDogZnVuY3Rpb24gKCBwb2ludCwgb3B0aW9uYWxUYXJnZXQgKSB7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IG9wdGlvbmFsVGFyZ2V0IHx8IG5ldyBMbXZWZWN0b3IzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQuY29weSggcG9pbnQgKS5jbGFtcCggdGhpcy5taW4sIHRoaXMubWF4ICk7XG5cbiAgICB9LFxuXG4gICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIHYxID0gbmV3IExtdlZlY3RvcjMoKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCBwb2ludCApIHtcblxuICAgICAgICAgICAgdmFyIGNsYW1wZWRQb2ludCA9IHYxLmNvcHkoIHBvaW50ICkuY2xhbXAoIHRoaXMubWluLCB0aGlzLm1heCApO1xuICAgICAgICAgICAgcmV0dXJuIGNsYW1wZWRQb2ludC5zdWIoIHBvaW50ICkubGVuZ3RoKCk7XG5cbiAgICAgICAgfTtcblxuICAgIH0oKSxcblxuICAgIGludGVyc2VjdDogZnVuY3Rpb24gKCBib3ggKSB7XG5cbiAgICAgICAgdGhpcy5taW4ubWF4KCBib3gubWluICk7XG4gICAgICAgIHRoaXMubWF4Lm1pbiggYm94Lm1heCApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHVuaW9uOiBmdW5jdGlvbiAoIGJveCApIHtcblxuICAgICAgICB0aGlzLm1pbi5taW4oIGJveC5taW4gKTtcbiAgICAgICAgdGhpcy5tYXgubWF4KCBib3gubWF4ICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgYXBwbHlNYXRyaXg0OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIHBvaW50cyA9IFtcbiAgICAgICAgICAgIG5ldyBMbXZWZWN0b3IzKCksXG4gICAgICAgICAgICBuZXcgTG12VmVjdG9yMygpLFxuICAgICAgICAgICAgbmV3IExtdlZlY3RvcjMoKSxcbiAgICAgICAgICAgIG5ldyBMbXZWZWN0b3IzKCksXG4gICAgICAgICAgICBuZXcgTG12VmVjdG9yMygpLFxuICAgICAgICAgICAgbmV3IExtdlZlY3RvcjMoKSxcbiAgICAgICAgICAgIG5ldyBMbXZWZWN0b3IzKCksXG4gICAgICAgICAgICBuZXcgTG12VmVjdG9yMygpXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICggbWF0cml4ICkge1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBJIGFtIHVzaW5nIGEgYmluYXJ5IHBhdHRlcm4gdG8gc3BlY2lmeSBhbGwgMl4zIGNvbWJpbmF0aW9ucyBiZWxvd1xuICAgICAgICAgICAgcG9pbnRzWyAwIF0uc2V0KCB0aGlzLm1pbi54LCB0aGlzLm1pbi55LCB0aGlzLm1pbi56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMDAwXG4gICAgICAgICAgICBwb2ludHNbIDEgXS5zZXQoIHRoaXMubWluLngsIHRoaXMubWluLnksIHRoaXMubWF4LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAwMDFcbiAgICAgICAgICAgIHBvaW50c1sgMiBdLnNldCggdGhpcy5taW4ueCwgdGhpcy5tYXgueSwgdGhpcy5taW4ueiApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7IC8vIDAxMFxuICAgICAgICAgICAgcG9pbnRzWyAzIF0uc2V0KCB0aGlzLm1pbi54LCB0aGlzLm1heC55LCB0aGlzLm1heC56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMDExXG4gICAgICAgICAgICBwb2ludHNbIDQgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMubWluLnksIHRoaXMubWluLnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAvLyAxMDBcbiAgICAgICAgICAgIHBvaW50c1sgNSBdLnNldCggdGhpcy5tYXgueCwgdGhpcy5taW4ueSwgdGhpcy5tYXgueiApLmFwcGx5TWF0cml4NCggbWF0cml4ICk7IC8vIDEwMVxuICAgICAgICAgICAgcG9pbnRzWyA2IF0uc2V0KCB0aGlzLm1heC54LCB0aGlzLm1heC55LCB0aGlzLm1pbi56ICkuYXBwbHlNYXRyaXg0KCBtYXRyaXggKTsgLy8gMTEwXG4gICAgICAgICAgICBwb2ludHNbIDcgXS5zZXQoIHRoaXMubWF4LngsIHRoaXMubWF4LnksIHRoaXMubWF4LnogKS5hcHBseU1hdHJpeDQoIG1hdHJpeCApOyAgLy8gMTExXG5cbiAgICAgICAgICAgIHRoaXMubWFrZUVtcHR5KCk7XG4gICAgICAgICAgICB0aGlzLnNldEZyb21Qb2ludHMoIHBvaW50cyApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICB9O1xuXG4gICAgfSgpLFxuXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAoIG9mZnNldCApIHtcblxuICAgICAgICB0aGlzLm1pbi5hZGQoIG9mZnNldCApO1xuICAgICAgICB0aGlzLm1heC5hZGQoIG9mZnNldCApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGVxdWFsczogZnVuY3Rpb24gKCBib3ggKSB7XG5cbiAgICAgICAgcmV0dXJuIGJveC5taW4uZXF1YWxzKCB0aGlzLm1pbiApICYmIGJveC5tYXguZXF1YWxzKCB0aGlzLm1heCApO1xuXG4gICAgfVxuXG59O1xuIl0sIm5hbWVzIjpbIkxtdlZlY3RvcjMiLCJMbXZCb3gzIiwibWluIiwibWF4IiwidW5kZWZpbmVkIiwiSW5maW5pdHkiLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciIsInNldCIsImNvcHkiLCJzZXRGcm9tUG9pbnRzIiwicG9pbnRzIiwibWFrZUVtcHR5IiwiaSIsImlsIiwibGVuZ3RoIiwiZXhwYW5kQnlQb2ludCIsInNldEZyb21BcnJheSIsImFycmF5Iiwib2Zmc2V0IiwieCIsInkiLCJ6IiwiY29weVRvQXJyYXkiLCJzZXRGcm9tQ2VudGVyQW5kU2l6ZSIsInYxIiwiY2VudGVyIiwic2l6ZSIsImhhbGZTaXplIiwibXVsdGlwbHlTY2FsYXIiLCJzdWIiLCJhZGQiLCJjbG9uZSIsImJveCIsImVtcHR5IiwiaXNFbXB0eSIsIm9wdGlvbmFsVGFyZ2V0IiwiY29uc29sZSIsIndhcm4iLCJnZXRDZW50ZXIiLCJyZXN1bHQiLCJhZGRWZWN0b3JzIiwic3ViVmVjdG9ycyIsImdldFNpemUiLCJwb2ludCIsImV4cGFuZEJ5VmVjdG9yIiwidmVjdG9yIiwiZXhwYW5kQnlTY2FsYXIiLCJzY2FsYXIiLCJhZGRTY2FsYXIiLCJjb250YWluc1BvaW50IiwiY29udGFpbnNCb3giLCJnZXRQYXJhbWV0ZXIiLCJpc0ludGVyc2VjdGlvbkJveCIsImludGVyc2VjdHNCb3giLCJjbGFtcFBvaW50IiwiY2xhbXAiLCJkaXN0YW5jZVRvUG9pbnQiLCJjbGFtcGVkUG9pbnQiLCJpbnRlcnNlY3QiLCJ1bmlvbiIsImFwcGx5TWF0cml4NCIsIm1hdHJpeCIsInRyYW5zbGF0ZSIsImVxdWFscyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/wgs/scene/LmvBox3.js\n"); /***/ }), /***/ "./src/wgs/scene/LmvMatrix4.js": /*!*************************************!*\ !*** ./src/wgs/scene/LmvMatrix4.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LmvMatrix4: () => (/* binding */ LmvMatrix4)\n/* harmony export */ });\n/* harmony import */ var _LmvVector3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author jordi_ros / http://plattsoft.com\n * @author D1plo1d / http://github.com/D1plo1d\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author timknip / http://www.floorplanner.com/\n * @author bhouston / http://exocortex.com\n * @author WestLangley / http://github.com/WestLangley\n */\n/* Pruned version of THREE.Matrix4, for use in the LMV web worker */\n\n\n\nlet LmvMatrix4 = function (useDoublePrecision) {\n\n if (useDoublePrecision) {\n\n this.elements = new Float64Array([\n\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1]\n\n );\n\n } else {\n\n this.elements = new Float32Array([\n\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1]\n\n );\n\n }\n\n this.isDoublePrecision = !!useDoublePrecision;\n\n};\n\nLmvMatrix4.prototype = {\n\n constructor: LmvMatrix4,\n\n set: function (n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\n\n var te = this.elements;\n\n te[0] = n11;te[4] = n12;te[8] = n13;te[12] = n14;\n te[1] = n21;te[5] = n22;te[9] = n23;te[13] = n24;\n te[2] = n31;te[6] = n32;te[10] = n33;te[14] = n34;\n te[3] = n41;te[7] = n42;te[11] = n43;te[15] = n44;\n\n return this;\n\n },\n\n identity: function () {\n\n this.set(\n\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n copy: function (m) {\n\n this.elements.set(m.elements);\n\n return this;\n\n },\n\n makeRotationFromQuaternion: function (q) {\n\n var te = this.elements;\n\n var x = q.x,y = q.y,z = q.z,w = q.w;\n var x2 = x + x,y2 = y + y,z2 = z + z;\n var xx = x * x2,xy = x * y2,xz = x * z2;\n var yy = y * y2,yz = y * z2,zz = z * z2;\n var wx = w * x2,wy = w * y2,wz = w * z2;\n\n te[0] = 1 - (yy + zz);\n te[4] = xy - wz;\n te[8] = xz + wy;\n\n te[1] = xy + wz;\n te[5] = 1 - (xx + zz);\n te[9] = yz - wx;\n\n te[2] = xz - wy;\n te[6] = yz + wx;\n te[10] = 1 - (xx + yy);\n\n // last column\n te[3] = 0;\n te[7] = 0;\n te[11] = 0;\n\n // bottom row\n te[12] = 0;\n te[13] = 0;\n te[14] = 0;\n te[15] = 1;\n\n return this;\n\n },\n\n multiply: function (n) {\n\n return this.multiplyMatrices(this, n);\n\n },\n\n multiplyMatrices: function (a, b) {\n\n var ae = a.elements;\n var be = b.elements;\n var te = this.elements;\n\n var a11 = ae[0],a12 = ae[4],a13 = ae[8],a14 = ae[12];\n var a21 = ae[1],a22 = ae[5],a23 = ae[9],a24 = ae[13];\n var a31 = ae[2],a32 = ae[6],a33 = ae[10],a34 = ae[14];\n var a41 = ae[3],a42 = ae[7],a43 = ae[11],a44 = ae[15];\n\n var b11 = be[0],b12 = be[4],b13 = be[8],b14 = be[12];\n var b21 = be[1],b22 = be[5],b23 = be[9],b24 = be[13];\n var b31 = be[2],b32 = be[6],b33 = be[10],b34 = be[14];\n var b41 = be[3],b42 = be[7],b43 = be[11],b44 = be[15];\n\n te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n return this;\n\n },\n\n multiplyToArray: function (a, b, r) {\n\n var te = this.elements;\n\n this.multiplyMatrices(a, b);\n\n r[0] = te[0];r[1] = te[1];r[2] = te[2];r[3] = te[3];\n r[4] = te[4];r[5] = te[5];r[6] = te[6];r[7] = te[7];\n r[8] = te[8];r[9] = te[9];r[10] = te[10];r[11] = te[11];\n r[12] = te[12];r[13] = te[13];r[14] = te[14];r[15] = te[15];\n\n return this;\n\n },\n\n multiplyScalar: function (s) {\n\n var te = this.elements;\n\n te[0] *= s;te[4] *= s;te[8] *= s;te[12] *= s;\n te[1] *= s;te[5] *= s;te[9] *= s;te[13] *= s;\n te[2] *= s;te[6] *= s;te[10] *= s;te[14] *= s;\n te[3] *= s;te[7] *= s;te[11] *= s;te[15] *= s;\n\n return this;\n\n },\n\n determinant: function () {\n\n var te = this.elements;\n\n var n11 = te[0],n12 = te[4],n13 = te[8],n14 = te[12];\n var n21 = te[1],n22 = te[5],n23 = te[9],n24 = te[13];\n var n31 = te[2],n32 = te[6],n33 = te[10],n34 = te[14];\n var n41 = te[3],n42 = te[7],n43 = te[11],n44 = te[15];\n\n //TODO: make this more efficient\n //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n return (\n n41 * (\n +n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34) +\n\n n42 * (\n +n11 * n23 * n34 -\n n11 * n24 * n33 +\n n14 * n21 * n33 -\n n13 * n21 * n34 +\n n13 * n24 * n31 -\n n14 * n23 * n31) +\n\n n43 * (\n +n11 * n24 * n32 -\n n11 * n22 * n34 -\n n14 * n21 * n32 +\n n12 * n21 * n34 +\n n14 * n22 * n31 -\n n12 * n24 * n31) +\n\n n44 * (\n -n13 * n22 * n31 -\n n11 * n23 * n32 +\n n11 * n22 * n33 +\n n13 * n21 * n32 -\n n12 * n21 * n33 +\n n12 * n23 * n31));\n\n\n\n\n },\n\n transpose: function () {\n\n var te = this.elements;\n var tmp;\n\n tmp = te[1];te[1] = te[4];te[4] = tmp;\n tmp = te[2];te[2] = te[8];te[8] = tmp;\n tmp = te[6];te[6] = te[9];te[9] = tmp;\n\n tmp = te[3];te[3] = te[12];te[12] = tmp;\n tmp = te[7];te[7] = te[13];te[13] = tmp;\n tmp = te[11];te[11] = te[14];te[14] = tmp;\n\n return this;\n\n },\n\n flattenToArrayOffset: function (array, offset) {\n\n var te = this.elements;\n\n array[offset] = te[0];\n array[offset + 1] = te[1];\n array[offset + 2] = te[2];\n array[offset + 3] = te[3];\n\n array[offset + 4] = te[4];\n array[offset + 5] = te[5];\n array[offset + 6] = te[6];\n array[offset + 7] = te[7];\n\n array[offset + 8] = te[8];\n array[offset + 9] = te[9];\n array[offset + 10] = te[10];\n array[offset + 11] = te[11];\n\n array[offset + 12] = te[12];\n array[offset + 13] = te[13];\n array[offset + 14] = te[14];\n array[offset + 15] = te[15];\n\n return array;\n\n },\n\n setPosition: function (v) {\n\n var te = this.elements;\n\n te[12] = v.x;\n te[13] = v.y;\n te[14] = v.z;\n\n return this;\n\n },\n\n invert: function (m) {\n // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n const te = this.elements,\n\n n11 = te[0],n21 = te[1],n31 = te[2],n41 = te[3],\n n12 = te[4],n22 = te[5],n32 = te[6],n42 = te[7],\n n13 = te[8],n23 = te[9],n33 = te[10],n43 = te[11],\n n14 = te[12],n24 = te[13],n34 = te[14],n44 = te[15],\n\n t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n\n const detInv = 1 / det;\n\n te[0] = t11 * detInv;\n te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;\n te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;\n te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;\n\n te[4] = t12 * detInv;\n te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;\n te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;\n te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;\n\n te[8] = t13 * detInv;\n te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;\n te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;\n te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;\n\n te[12] = t14 * detInv;\n te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;\n te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;\n te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;\n\n return this;\n },\n\n getInverse: function (m, throwOnInvertible) {\n console.warn('LmvMatrix4.getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead. ');\n this.copy(m).invert();\n\n // Pre-invert behavior\n if (this.determinant() === 0) {\n const msg = \"Matrix4.getInverse(): can't invert matrix, determinant is 0\ ";\n if (throwOnInvertible || false) {\n throw new Error(msg);\n } else {\n console.warn(msg);\n }\n this.identity();\n }\n return this;\n },\n\n scale: function (v) {\n\n var te = this.elements;\n var x = v.x,y = v.y,z = v.z;\n\n te[0] *= x;te[4] *= y;te[8] *= z;\n te[1] *= x;te[5] *= y;te[9] *= z;\n te[2] *= x;te[6] *= y;te[10] *= z;\n te[3] *= x;te[7] *= y;te[11] *= z;\n\n return this;\n\n },\n\n getMaxScaleOnAxis: function () {\n\n var te = this.elements;\n\n var scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\n var scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\n var scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\n\n return Math.sqrt(Math.max(scaleXSq, Math.max(scaleYSq, scaleZSq)));\n\n },\n\n makeTranslation: function (x, y, z) {\n\n this.set(\n\n 1, 0, 0, x,\n 0, 1, 0, y,\n 0, 0, 1, z,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeRotationX: function (theta) {\n\n var c = Math.cos(theta),s = Math.sin(theta);\n\n this.set(\n\n 1, 0, 0, 0,\n 0, c, -s, 0,\n 0, s, c, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeRotationY: function (theta) {\n\n var c = Math.cos(theta),s = Math.sin(theta);\n\n this.set(\n\n c, 0, s, 0,\n 0, 1, 0, 0,\n -s, 0, c, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeRotationZ: function (theta) {\n\n var c = Math.cos(theta),s = Math.sin(theta);\n\n this.set(\n\n c, -s, 0, 0,\n s, c, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeRotationAxis: function (axis, angle) {\n\n // Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n var c = Math.cos(angle);\n var s = Math.sin(angle);\n var t = 1 - c;\n var x = axis.x,y = axis.y,z = axis.z;\n var tx = t * x,ty = t * y;\n\n this.set(\n\n tx * x + c, tx * y - s * z, tx * z + s * y, 0,\n tx * y + s * z, ty * y + c, ty * z - s * x, 0,\n tx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n makeScale: function (x, y, z) {\n\n this.set(\n\n x, 0, 0, 0,\n 0, y, 0, 0,\n 0, 0, z, 0,\n 0, 0, 0, 1\n\n );\n\n return this;\n\n },\n\n compose: function (position, quaternion, scale) {\n\n this.makeRotationFromQuaternion(quaternion);\n this.scale(scale);\n this.setPosition(position);\n\n return this;\n\n },\n\n decompose: function () {\n\n var vector = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n var matrix = new LmvMatrix4(true);\n\n return function (position, quaternion, scale) {\n\n var te = this.elements;\n\n var sx = vector.set(te[0], te[1], te[2]).length();\n var sy = vector.set(te[4], te[5], te[6]).length();\n var sz = vector.set(te[8], te[9], te[10]).length();\n\n // if determine is negative, we need to invert one scale\n var det = this.determinant();\n if (det < 0) {\n sx = -sx;\n }\n\n position.x = te[12];\n position.y = te[13];\n position.z = te[14];\n\n // scale the rotation part\n\n matrix.elements.set(this.elements); // at this point matrix is incomplete so we can't use .copy()\n\n var invSX = 1 / sx;\n var invSY = 1 / sy;\n var invSZ = 1 / sz;\n\n matrix.elements[0] *= invSX;\n matrix.elements[1] *= invSX;\n matrix.elements[2] *= invSX;\n\n matrix.elements[4] *= invSY;\n matrix.elements[5] *= invSY;\n matrix.elements[6] *= invSY;\n\n matrix.elements[8] *= invSZ;\n matrix.elements[9] *= invSZ;\n matrix.elements[10] *= invSZ;\n\n quaternion.setFromRotationMatrix(matrix);\n\n scale.x = sx;\n scale.y = sy;\n scale.z = sz;\n\n return this;\n\n };\n\n }(),\n\n //Added for LMV\n transformPoint: function (pt) {\n\n // input: THREE.Matrix4 affine matrix\n\n var x = pt.x,y = pt.y,z = pt.z;\n\n var e = this.elements;\n\n pt.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n pt.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n pt.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n\n return pt;\n },\n\n //Added for LMV\n transformDirection: function (v) {\n\n // input: THREE.Matrix4 affine matrix\n // vector interpreted as a direction\n\n var x = v.x,y = v.y,z = v.z;\n\n var e = this.elements;\n\n v.x = e[0] * x + e[4] * y + e[8] * z;\n v.y = e[1] * x + e[5] * y + e[9] * z;\n v.z = e[2] * x + e[6] * y + e[10] * z;\n\n var len = Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);\n if (len > 0) {\n var ilen = 1.0 / len;\n v.x *= ilen;\n v.y *= ilen;\n v.z *= ilen;\n }\n\n return v;\n },\n\n equals(matrix) {\n\n const te = this.elements;\n const me = matrix.elements;\n\n for (var i = 0; i < 16; i++) {\n\n if (te[i] !== me[i]) return false;\n\n }\n\n return true;\n\n },\n\n fromArray: function (array) {\n\n this.elements.set(array);\n\n return this;\n\n },\n\n toArray: function () {\n\n var te = this.elements;\n\n return [\n te[0], te[1], te[2], te[3],\n te[4], te[5], te[6], te[7],\n te[8], te[9], te[10], te[11],\n te[12], te[13], te[14], te[15]];\n\n\n },\n\n clone: function () {\n\n return new LmvMatrix4(this.isDoublePrecision).fromArray(this.elements);\n\n }\n\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLENBQUUsQ0FBQyxDQUFFLEdBQUc5RCxFQUFFLENBQUUsQ0FBQyxDQUFFLENBQUU4RCxDQUFDLENBQUUsQ0FBQyxDQUFFLEdBQUc5RCxFQUFFLENBQUUsQ0FBQyxDQUFFLENBQUU4RCxDQUFDLENBQUUsQ0FBQyxDQUFFLEdBQUc5RCxFQUFFLENBQUUsQ0FBQyxDQUFFO0lBQ3RFOEQsQ0FBQyxDQUFFLENBQUMsQ0FBRSxHQUFHOUQsRUFBRSxDQUFFLENBQUMsQ0FBRSxDQUFFOEQsQ0FBQyxDQUFFLENBQUMsQ0FBRSxHQUFHOUQsRUFBRSxDQUFFLENBQUMsQ0FBRSxDQUFFOEQsQ0FBQyxDQUFFLENBQUMsQ0FBRSxHQUFHOUQsRUFBRSxDQUFFLENBQUMsQ0FBRSxDQUFFOEQsQ0FBQyxDQUFFLENBQUMsQ0FBRSxHQUFHOUQsRUFBRSxDQUFFLENBQUMsQ0FBRTtJQUN0RThELENBQUMsQ0FBRSxDQUFDLENBQUUsR0FBSTlELEVBQUUsQ0FBRSxDQUFDLENBQUUsQ0FBRThELENBQUMsQ0FBRSxDQUFDLENBQUUsR0FBSTlELEVBQUUsQ0FBRSxDQUFDLENBQUUsQ0FBRThELENBQUMsQ0FBRSxFQUFFLENBQUUsR0FBRzlELEVBQUUsQ0FBRSxFQUFFLENBQUUsQ0FBRThELENBQUMsQ0FBRSxFQUFFLENBQUUsR0FBRzlELEVBQUUsQ0FBRSxFQUFFLENBQUU7SUFDNUU4RCxDQUFDLENBQUUsRUFBRSxDQUFFLEdBQUc5RCxFQUFFLENBQUUsRUFBRSxDQUFFLENBQUU4RCxDQUFDLENBQUUsRUFBRSxDQUFFLEdBQUc5RCxFQUFFLENBQUUsRUFBRSxDQUFFLENBQUU4RCxDQUFDLENBQUUsRUFBRSxDQUFFLEdBQUc5RCxFQUFFLENBQUUsRUFBRSxDQUFFLENBQUU4RCxDQUFDLENBQUUsRUFBRSxDQUFFLEdBQUc5RCxFQUFFLENBQUUsRUFBRSxDQUFFOztJQUU5RSxPQUFPLElBQUk7O0VBRWYsQ0FBQzs7RUFFRCtELGNBQWMsRUFBRSxTQUFBQSxDQUFXQyxDQUFDLEVBQUc7O0lBRTNCLElBQUloRSxFQUFFLEdBQUcsSUFB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T0FBTyxJQUFJL0osVUFBVSxDQUFDLElBQUksQ0FBQ0ssaUJBQWlCLENBQUMsQ0FBQ3dKLFNBQVMsQ0FBRSxJQUFJLENBQUMzSixRQUFTLENBQUM7O0VBRTVFOztBQUVKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvd2dzL3NjZW5lL0xtdk1hdHJpeDQuanM/ODY5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vXG4gKiBAYXV0aG9yIHN1cGVyZWdnYmVydCAvIGh0dHA6Ly93d3cucGF1bGJydW50LmNvLnVrL1xuICogQGF1dGhvciBwaGlsb2diIC8gaHR0cDovL2Jsb2cudGhlaml0Lm9yZy9cbiAqIEBhdXRob3Igam9yZGlfcm9zIC8gaHR0cDovL3BsYXR0c29mdC5jb21cbiAqIEBhdXRob3IgRDFwbG8xZCAvIGh0dHA6Ly9naXRodWIuY29tL0QxcGxvMWRcbiAqIEBhdXRob3IgYWx0ZXJlZHEgLyBodHRwOi8vYWx0ZXJlZHF1YWxpYS5jb20vXG4gKiBAYXV0aG9yIG1pa2FlbCBlbXRpbmdlciAvIGh0dHA6Ly9nb21vLnNlL1xuICogQGF1dGhvciB0aW1rbmlwIC8gaHR0cDovL3d3dy5mbG9vcnBsYW5uZXIuY29tL1xuICogQGF1dGhvciBiaG91c3RvbiAvIGh0dHA6Ly9leG9jb3J0ZXguY29tXG4gKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXlcbiAqL1xuLyogUHJ1bmVkIHZlcnNpb24gb2YgVEhSRUUuTWF0cml4NCwgZm9yIHVzZSBpbiB0aGUgTE1WIHdlYiB3b3JrZXIgKi9cblxuaW1wb3J0IHsgTG12VmVjdG9yMyB9IGZyb20gJy4vTG12VmVjdG9yMyc7XG5cbmV4cG9ydCBsZXQgTG12TWF0cml4NCA9IGZ1bmN0aW9uICh1c2VEb3VibGVQcmVjaXNpb24pIHtcblxuICAgIGlmICh1c2VEb3VibGVQcmVjaXNpb24pIHtcblxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3IEZsb2F0NjRBcnJheSggW1xuXG4gICAgICAgICAgICAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgIDAsIDAsIDEsIDAsXG4gICAgICAgICAgICAwLCAwLCAwLCAxXG5cbiAgICAgICAgXSApO1xuXG4gICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gbmV3IEZsb2F0MzJBcnJheSggW1xuXG4gICAgICAgICAgICAxLCAwLCAwLCAwLFxuICAgICAgICAgICAgMCwgMSwgMCwgMCxcbiAgICAgICAgICAgIDAsIDAsIDEsIDAsXG4gICAgICAgICAgICAwLCAwLCAwLCAxXG5cbiAgICAgICAgXSApO1xuXG4gICAgfVxuXG4gICAgdGhpcy5pc0RvdWJsZVByZWNpc2lvbiA9ICEhdXNlRG91YmxlUHJlY2lzaW9uO1xuXG59O1xuXG5MbXZNYXRyaXg0LnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBMbXZNYXRyaXg0LFxuXG4gICAgc2V0OiBmdW5jdGlvbiAoIG4xMSwgbjEyLCBuMTMsIG4xNCwgbjIxLCBuMjIsIG4yMywgbjI0LCBuMzEsIG4zMiwgbjMzLCBuMzQsIG40MSwgbjQyLCBuNDMsIG40NCApIHtcblxuICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG4gICAgICAgIHRlWyAwIF0gPSBuMTE7IHRlWyA0IF0gPSBuMTI7IHRlWyA4IF0gPSBuMTM7IHRlWyAxMiBdID0gbjE0O1xuICAgICAgICB0ZVsgMSBdID0gbjIxOyB0ZVsgNSBdID0gbjIyOyB0ZVsgOSBdID0gbjIzOyB0ZVsgMTMgXSA9IG4yNDtcbiAgICAgICAgdGVbIDIgXSA9IG4zMTsgdGVbIDYgXSA9IG4zMjsgdGVbIDEwIF0gPSBuMzM7IHRlWyAxNCBdID0gbjM0O1xuICAgICAgICB0ZVsgMyBdID0gbjQxOyB0ZVsgNyBdID0gbjQyOyB0ZVsgMTEgXSA9IG40MzsgdGVbIDE1IF0gPSBuNDQ7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB0aGlzLnNldChcblxuICAgICAgICAgICAgMSwgMCwgMCwgMCxcbiAgICAgICAgICAgIDAsIDEsIDAsIDAsXG4gICAgICAgICAgICAwLCAwLCAxLCAwLFxuICAgICAgICAgICAgMCwgMCwgMCwgMVxuXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgY29weTogZnVuY3Rpb24gKCBtICkge1xuXG4gICAgICAgIHRoaXMuZWxlbWVudHMuc2V0KCBtLmVsZW1lbnRzICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgbWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb246IGZ1bmN0aW9uICggcSApIHtcblxuICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG4gICAgICAgIHZhciB4ID0gcS54LCB5ID0gcS55LCB6ID0gcS56LCB3ID0gcS53O1xuICAgICAgICB2YXIgeDIgPSB4ICsgeCwgeTIgPSB5ICsgeSwgejIgPSB6ICsgejtcbiAgICAgICAgdmFyIHh4ID0geCAqIHgyLCB4eSA9IHggKiB5MiwgeHogPSB4ICogejI7XG4gICAgICAgIHZhciB5eSA9IHkgKiB5MiwgeXogPSB5ICogejIsIHp6ID0geiAqIHoyO1xuICAgICAgICB2YXIgd3ggPSB3ICogeDIsIHd5ID0gdyAqIHkyLCB3eiA9IHcgKiB6MjtcblxuICAgICAgICB0ZVsgMCBdID0gMSAtICggeXkgKyB6eiApO1xuICAgICAgICB0ZVsgNCBdID0geHkgLSB3ejtcbiAgICAgICAgdGVbIDggXSA9IHh6ICsgd3k7XG5cbiAgICAgICAgdGVbIDEgXSA9IHh5ICsgd3o7XG4gICAgICAgIHRlWyA1IF0gPSAxIC0gKCB4eCArIHp6ICk7XG4gICAgICAgIHRlWyA5IF0gPSB5eiAtIHd4O1xuXG4gICAgICAgIHRlWyAyIF0gPSB4eiAtIHd5O1xuICAgICAgICB0ZVsgNiBdID0geXogKyB3eDtcbiAgICAgICAgdGVbIDEwIF0gPSAxIC0gKCB4eCArIHl5ICk7XG5cbiAgICAgICAgLy8gbGFzdCBjb2x1bW5cbiAgICAgICAgdGVbIDMgXSA9IDA7XG4gICAgICAgIHRlWyA3IF0gPSAwO1xuICAgICAgICB0ZVsgMTEgXSA9IDA7XG5cbiAgICAgICAgLy8gYm90dG9tIHJvd1xuICAgICAgICB0ZVsgMTIgXSA9IDA7XG4gICAgICAgIHRlWyAxMyBdID0gMDtcbiAgICAgICAgdGVbIDE0IF0gPSAwO1xuICAgICAgICB0ZVsgMTUgXSA9IDE7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uICggbiApIHtcblxuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCB0aGlzLCBuICk7XG5cbiAgICB9LFxuXG4gICAgbXVsdGlwbHlNYXRyaWNlczogZnVuY3Rpb24gKCBhLCBiICkge1xuXG4gICAgICAgIHZhciBhZSA9IGEuZWxlbWVudHM7XG4gICAgICAgIHZhciBiZSA9IGIuZWxlbWVudHM7XG4gICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cbiAgICAgICAgdmFyIGExMSA9IGFlWyAwIF0sIGExMiA9IGFlWyA0IF0sIGExMyA9IGFlWyA4IF0sIGExNCA9IGFlWyAxMiBdO1xuICAgICAgICB2YXIgYTIxID0gYWVbIDEgXSwgYTIyID0gYWVbIDUgXSwgYTIzID0gYWVbIDkgXSwgYTI0ID0gYWVbIDEzIF07XG4gICAgICAgIHZhciBhMzEgPSBhZVsgMiBdLCBhMzIgPSBhZVsgNiBdLCBhMzMgPSBhZVsgMTAgXSwgYTM0ID0gYWVbIDE0IF07XG4gICAgICAgIHZhciBhNDEgPSBhZVsgMyBdLCBhNDIgPSBhZVsgNyBdLCBhNDMgPSBhZVsgMTEgXSwgYTQ0ID0gYWVbIDE1IF07XG5cbiAgICAgICAgdmFyIGIxMSA9IGJlWyAwIF0sIGIxMiA9IGJlWyA0IF0sIGIxMyA9IGJlWyA4IF0sIGIxNCA9IGJlWyAxMiBdO1xuICAgICAgICB2YXIgYjIxID0gYmVbIDEgXSwgYjIyID0gYmVbIDUgXSwgYjIzID0gYmVbIDkgXSwgYjI0ID0gYmVbIDEzIF07XG4gICAgICAgIHZhciBiMzEgPSBiZVsgMiBdLCBiMzIgPSBiZVsgNiBdLCBiMzMgPSBiZVsgMTAgXSwgYjM0ID0gYmVbIDE0IF07XG4gICAgICAgIHZhciBiNDEgPSBiZVsgMyBdLCBiNDIgPSBiZVsgNyBdLCBiNDMgPSBiZVsgMTEgXSwgYjQ0ID0gYmVbIDE1IF07XG5cbiAgICAgICAgdGVbIDAgXSA9IGExMSAqIGIxMSArIGExMiAqIGIyMSArIGExMyAqIGIzMSArIGExNCAqIGI0MTtcbiAgICAgICAgdGVbIDQgXSA9IGExMSAqIGIxMiArIGExMiAqIGIyMiArIGExMyAqIGIzMiArIGExNCAqIGI0MjtcbiAgICAgICAgdGVbIDggXSA9IGExMSAqIGIxMyArIGExMiAqIGIyMyArIGExMyAqIGIzMyArIGExNCAqIGI0MztcbiAgICAgICAgdGVbIDEyIF0gPSBhMTEgKiBiMTQgKyBhMTIgKiBiMjQgKyBhMTMgKiBiMzQgKyBhMTQgKiBiNDQ7XG5cbiAgICAgICAgdGVbIDEgXSA9IGEyMSAqIGIxMSArIGEyMiAqIGIyMSArIGEyMyAqIGIzMSArIGEyNCAqIGI0MTtcbiAgICAgICAgdGVbIDUgXSA9IGEyMSAqIGIxMiArIGEyMiAqIGIyMiArIGEyMyAqIGIzMiArIGEyNCAqIGI0MjtcbiAgICAgICAgdGVbIDkgXSA9IGEyMSAqIGIxMyArIGEyMiAqIGIyMyArIGEyMyAqIGIzMyArIGEyNCAqIGI0MztcbiAgICAgICAgdGVbIDEzIF0gPSBhMjEgKiBiMTQgKyBhMjIgKiBiMjQgKyBhMjMgKiBiMzQgKyBhMjQgKiBiNDQ7XG5cbiAgICAgICAgdGVbIDIgXSA9IGEzMSAqIGIxMSArIGEzMiAqIGIyMSArIGEzMyAqIGIzMSArIGEzNCAqIGI0MTtcbiAgICAgICAgdGVbIDYgXSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMiArIGEzNCAqIGI0MjtcbiAgICAgICAgdGVbIDEwIF0gPSBhMzEgKiBiMTMgKyBhMzIgKiBiMjMgKyBhMzMgKiBiMzMgKyBhMzQgKiBiNDM7XG4gICAgICAgIHRlWyAxNCBdID0gYTMxICogYjE0ICsgYTMyICogYjI0ICsgYTMzICogYjM0ICsgYTM0ICogYjQ0O1xuXG4gICAgICAgIHRlWyAzIF0gPSBhNDEgKiBiMTEgKyBhNDIgKiBiMjEgKyBhNDMgKiBiMzEgKyBhNDQgKiBiNDE7XG4gICAgICAgIHRlWyA3IF0gPSBhNDEgKiBiMTIgKyBhNDIgKiBiMjIgKyBhNDMgKiBiMzIgKyBhNDQgKiBiNDI7XG4gICAgICAgIHRlWyAxMSBdID0gYTQxICogYjEzICsgYTQyICogYjIzICsgYTQzICogYjMzICsgYTQ0ICogYjQzO1xuICAgICAgICB0ZVsgMTUgXSA9IGE0MSAqIGIxNCArIGE0MiAqIGIyNCArIGE0MyAqIGIzNCArIGE0NCAqIGI0NDtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBtdWx0aXBseVRvQXJyYXk6IGZ1bmN0aW9uICggYSwgYiwgciApIHtcblxuICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG4gICAgICAgIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApO1xuXG4gICAgICAgIHJbIDAgXSA9IHRlWyAwIF07IHJbIDEgXSA9IHRlWyAxIF07IHJbIDIgXSA9IHRlWyAyIF07IHJbIDMgXSA9IHRlWyAzIF07XG4gICAgICAgIHJbIDQgXSA9IHRlWyA0IF07IHJbIDUgXSA9IHRlWyA1IF07IHJbIDYgXSA9IHRlWyA2IF07IHJbIDcgXSA9IHRlWyA3IF07XG4gICAgICAgIHJbIDggXSAgPSB0ZVsgOCBdOyByWyA5IF0gID0gdGVbIDkgXTsgclsgMTAgXSA9IHRlWyAxMCBdOyByWyAxMSBdID0gdGVbIDExIF07XG4gICAgICAgIHJbIDEyIF0gPSB0ZVsgMTIgXTsgclsgMTMgXSA9IHRlWyAxMyBdOyByWyAxNCBdID0gdGVbIDE0IF07IHJbIDE1IF0gPSB0ZVsgMTUgXTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBtdWx0aXBseVNjYWxhcjogZnVuY3Rpb24gKCBzICkge1xuXG4gICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cbiAgICAgICAgdGVbIDAgXSAqPSBzOyB0ZVsgNCBdICo9IHM7IHRlWyA4IF0gKj0gczsgdGVbIDEyIF0gKj0gcztcbiAgICAgICAgdGVbIDEgXSAqPSBzOyB0ZVsgNSBdICo9IHM7IHRlWyA5IF0gKj0gczsgdGVbIDEzIF0gKj0gcztcbiAgICAgICAgdGVbIDIgXSAqPSBzOyB0ZVsgNiBdICo9IHM7IHRlWyAxMCBdICo9IHM7IHRlWyAxNCBdICo9IHM7XG4gICAgICAgIHRlWyAzIF0gKj0gczsgdGVbIDcgXSAqPSBzOyB0ZVsgMTEgXSAqPSBzOyB0ZVsgMTUgXSAqPSBzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50cztcblxuICAgICAgICB2YXIgbjExID0gdGVbIDAgXSwgbjEyID0gdGVbIDQgXSwgbjEzID0gdGVbIDggXSwgbjE0ID0gdGVbIDEyIF07XG4gICAgICAgIHZhciBuMjEgPSB0ZVsgMSBdLCBuMjIgPSB0ZVsgNSBdLCBuMjMgPSB0ZVsgOSBdLCBuMjQgPSB0ZVsgMTMgXTtcbiAgICAgICAgdmFyIG4zMSA9IHRlWyAyIF0sIG4zMiA9IHRlWyA2IF0sIG4zMyA9IHRlWyAxMCBdLCBuMzQgPSB0ZVsgMTQgXTtcbiAgICAgICAgdmFyIG40MSA9IHRlWyAzIF0sIG40MiA9IHRlWyA3IF0sIG40MyA9IHRlWyAxMSBdLCBuNDQgPSB0ZVsgMTUgXTtcblxuICAgICAgICAvL1RPRE86IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudFxuICAgICAgICAvLyggYmFzZWQgb24gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJyYS9tYXRyaXgvZnVuY3Rpb25zL2ludmVyc2UvZm91ckQvaW5kZXguaHRtIClcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbjQxICogKFxuICAgICAgICAgICAgICAgICsgbjE0ICogbjIzICogbjMyXG4gICAgICAgICAgICAgICAgIC0gbjEzICogbjI0ICogbjMyXG4gICAgICAgICAgICAgICAgIC0gbjE0ICogbjIyICogbjMzXG4gICAgICAgICAgICAgICAgICsgbjEyICogbjI0ICogbjMzXG4gICAgICAgICAgICAgICAgICsgbjEzICogbjIyICogbjM0XG4gICAgICAgICAgICAgICAgIC0gbjEyICogbjIzICogbjM0XG4gICAgICAgICAgICApICtcbiAgICAgICAgICAgIG40MiAqIChcbiAgICAgICAgICAgICAgICArIG4xMSAqIG4yMyAqIG4zNFxuICAgICAgICAgICAgICAgICAtIG4xMSAqIG4yNCAqIG4zM1xuICAgICAgICAgICAgICAgICArIG4xNCAqIG4yMSAqIG4zM1xuICAgICAgICAgICAgICAgICAtIG4xMyAqIG4yMSAqIG4zNFxuICAgICAgICAgICAgICAgICArIG4xMyAqIG4yNCAqIG4zMVxuICAgICAgICAgICAgICAgICAtIG4xNCAqIG4yMyAqIG4zMVxuICAgICAgICAgICAgKSArXG4gICAgICAgICAgICBuNDMgKiAoXG4gICAgICAgICAgICAgICAgKyBuMTEgKiBuMjQgKiBuMzJcbiAgICAgICAgICAgICAgICAgLSBuMTEgKiBuMjIgKiBuMzRcbiAgICAgICAgICAgICAgICAgLSBuMTQgKiBuMjEgKiBuMzJcbiAgICAgICAgICAgICAgICAgKyBuMTIgKiBuMjEgKiBuMzRcbiAgICAgICAgICAgICAgICAgKyBuMTQgKiBuMjIgKiBuMzFcbiAgICAgICAgICAgICAgICAgLSBuMTIgKiBuMjQgKiBuMzFcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgbjQ0ICogKFxuICAgICAgICAgICAgICAgIC0gbjEzICogbjIyICogbjMxXG4gICAgICAgICAgICAgICAgIC0gbjExICogbjIzICogbjMyXG4gICAgICAgICAgICAgICAgICsgbjExICogbjIyICogbjMzXG4gICAgICAgICAgICAgICAgICsgbjEzICogbjIxICogbjMyXG4gICAgICAgICAgICAgICAgIC0gbjEyICogbjIxICogbjMzXG4gICAgICAgICAgICAgICAgICsgbjEyICogbjIzICogbjMxXG4gICAgICAgICAgICApXG5cbiAgICAgICAgKTtcblxuICAgIH0sXG5cbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuICAgICAgICB2YXIgdG1wO1xuXG4gICAgICAgIHRtcCA9IHRlWyAxIF07IHRlWyAxIF0gPSB0ZVsgNCBdOyB0ZVsgNCBdID0gdG1wO1xuICAgICAgICB0bXAgPSB0ZVsgMiBdOyB0ZVsgMiBdID0gdGVbIDggXTsgdGVbIDggXSA9IHRtcDtcbiAgICAgICAgdG1wID0gdGVbIDYgXTsgdGVbIDYgXSA9IHRlWyA5IF07IHRlWyA5IF0gPSB0bXA7XG5cbiAgICAgICAgdG1wID0gdGVbIDMgXTsgdGVbIDMgXSA9IHRlWyAxMiBdOyB0ZVsgMTIgXSA9IHRtcDtcbiAgICAgICAgdG1wID0gdGVbIDcgXTsgdGVbIDcgXSA9IHRlWyAxMyBdOyB0ZVsgMTMgXSA9IHRtcDtcbiAgICAgICAgdG1wID0gdGVbIDExIF07IHRlWyAxMSBdID0gdGVbIDE0IF07IHRlWyAxNCBdID0gdG1wO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGZsYXR0ZW5Ub0FycmF5T2Zmc2V0OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7XG5cbiAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50cztcblxuICAgICAgICBhcnJheVsgb2Zmc2V0ICAgICBdID0gdGVbIDAgXTtcbiAgICAgICAgYXJyYXlbIG9mZnNldCArIDEgXSA9IHRlWyAxIF07XG4gICAgICAgIGFycmF5WyBvZmZzZXQgKyAyIF0gPSB0ZVsgMiBdO1xuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGVbIDMgXTtcblxuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgNCBdID0gdGVbIDQgXTtcbiAgICAgICAgYXJyYXlbIG9mZnNldCArIDUgXSA9IHRlWyA1IF07XG4gICAgICAgIGFycmF5WyBvZmZzZXQgKyA2IF0gPSB0ZVsgNiBdO1xuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgNyBdID0gdGVbIDcgXTtcblxuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgOCBdICA9IHRlWyA4IF07XG4gICAgICAgIGFycmF5WyBvZmZzZXQgKyA5IF0gID0gdGVbIDkgXTtcbiAgICAgICAgYXJyYXlbIG9mZnNldCArIDEwIF0gPSB0ZVsgMTAgXTtcbiAgICAgICAgYXJyYXlbIG9mZnNldCArIDExIF0gPSB0ZVsgMTEgXTtcblxuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTIgXSA9IHRlWyAxMiBdO1xuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTMgXSA9IHRlWyAxMyBdO1xuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTQgXSA9IHRlWyAxNCBdO1xuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMTUgXSA9IHRlWyAxNSBdO1xuXG4gICAgICAgIHJldHVybiBhcnJheTtcblxuICAgIH0sXG5cbiAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gKCB2ICkge1xuXG4gICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cbiAgICAgICAgdGVbIDEyIF0gPSB2Lng7XG4gICAgICAgIHRlWyAxMyBdID0gdi55O1xuICAgICAgICB0ZVsgMTQgXSA9IHYuejtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBpbnZlcnQ6IGZ1bmN0aW9uICggbSApIHtcbiAgICAgICAgLy8gYmFzZWQgb24gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJyYS9tYXRyaXgvZnVuY3Rpb25zL2ludmVyc2UvZm91ckQvaW5kZXguaHRtXG4gICAgICAgIGNvbnN0IHRlID0gdGhpcy5lbGVtZW50cyxcblxuICAgICAgICBuMTEgPSB0ZVsgMCBdLCBuMjEgPSB0ZVsgMSBdLCBuMzEgPSB0ZVsgMiBdLCBuNDEgPSB0ZVsgMyBdLFxuICAgICAgICBuMTIgPSB0ZVsgNCBdLCBuMjIgPSB0ZVsgNSBdLCBuMzIgPSB0ZVsgNiBdLCBuNDIgPSB0ZVsgNyBdLFxuICAgICAgICBuMTMgPSB0ZVsgOCBdLCBuMjMgPSB0ZVsgOSBdLCBuMzMgPSB0ZVsgMTAgXSwgbjQzID0gdGVbIDExIF0sXG4gICAgICAgIG4xNCA9IHRlWyAxMiBdLCBuMjQgPSB0ZVsgMTMgXSwgbjM0ID0gdGVbIDE0IF0sIG40NCA9IHRlWyAxNSBdLFxuXG4gICAgICAgIHQxMSA9IG4yMyAqIG4zNCAqIG40MiAtIG4yNCAqIG4zMyAqIG40MiArIG4yNCAqIG4zMiAqIG40MyAtIG4yMiAqIG4zNCAqIG40MyAtIG4yMyAqIG4zMiAqIG40NCArIG4yMiAqIG4zMyAqIG40NCxcbiAgICAgICAgdDEyID0gbjE0ICogbjMzICogbjQyIC0gbjEzICogbjM0ICogbjQyIC0gbjE0ICogbjMyICogbjQzICsgbjEyICogbjM0ICogbjQzICsgbjEzICogbjMyICogbjQ0IC0gbjEyICogbjMzICogbjQ0LFxuICAgICAgICB0MTMgPSBuMTMgKiBuMjQgKiBuNDIgLSBuMTQgKiBuMjMgKiBuNDIgKyBuMTQgKiBuMjIgKiBuNDMgLSBuMTIgKiBuMjQgKiBuNDMgLSBuMTMgKiBuMjIgKiBuNDQgKyBuMTIgKiBuMjMgKiBuNDQsXG4gICAgICAgIHQxNCA9IG4xNCAqIG4yMyAqIG4zMiAtIG4xMyAqIG4yNCAqIG4zMiAtIG4xNCAqIG4yMiAqIG4zMyArIG4xMiAqIG4yNCAqIG4zMyArIG4xMyAqIG4yMiAqIG4zNCAtIG4xMiAqIG4yMyAqIG4zNDtcblxuICAgICAgICBjb25zdCBkZXQgPSBuMTEgKiB0MTEgKyBuMjEgKiB0MTIgKyBuMzEgKiB0MTMgKyBuNDEgKiB0MTQ7XG5cbiAgICAgICAgaWYgKCBkZXQgPT09IDAgKSByZXR1cm4gdGhpcy5zZXQoIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgKTtcblxuICAgICAgICBjb25zdCBkZXRJbnYgPSAxIC8gZGV0O1xuXG4gICAgICAgIHRlWyAwIF0gPSB0MTEgKiBkZXRJbnY7XG4gICAgICAgIHRlWyAxIF0gPSAoIG4yNCAqIG4zMyAqIG40MSAtIG4yMyAqIG4zNCAqIG40MSAtIG4yNCAqIG4zMSAqIG40MyArIG4yMSAqIG4zNCAqIG40MyArIG4yMyAqIG4zMSAqIG40NCAtIG4yMSAqIG4zMyAqIG40NCApICogZGV0SW52O1xuICAgICAgICB0ZVsgMiBdID0gKCBuMjIgKiBuMzQgKiBuNDEgLSBuMjQgKiBuMzIgKiBuNDEgKyBuMjQgKiBuMzEgKiBuNDIgLSBuMjEgKiBuMzQgKiBuNDIgLSBuMjIgKiBuMzEgKiBuNDQgKyBuMjEgKiBuMzIgKiBuNDQgKSAqIGRldEludjtcbiAgICAgICAgdGVbIDMgXSA9ICggbjIzICogbjMyICogbjQxIC0gbjIyICogbjMzICogbjQxIC0gbjIzICogbjMxICogbjQyICsgbjIxICogbjMzICogbjQyICsgbjIyICogbjMxICogbjQzIC0gbjIxICogbjMyICogbjQzICkgKiBkZXRJbnY7XG5cbiAgICAgICAgdGVbIDQgXSA9IHQxMiAqIGRldEludjtcbiAgICAgICAgdGVbIDUgXSA9ICggbjEzICogbjM0ICogbjQxIC0gbjE0ICogbjMzICogbjQxICsgbjE0ICogbjMxICogbjQzIC0gbjExICogbjM0ICogbjQzIC0gbjEzICogbjMxICogbjQ0ICsgbjExICogbjMzICogbjQ0ICkgKiBkZXRJbnY7XG4gICAgICAgIHRlWyA2IF0gPSAoIG4xNCAqIG4zMiAqIG40MSAtIG4xMiAqIG4zNCAqIG40MSAtIG4xNCAqIG4zMSAqIG40MiArIG4xMSAqIG4zNCAqIG40MiArIG4xMiAqIG4zMSAqIG40NCAtIG4xMSAqIG4zMiAqIG40NCApICogZGV0SW52O1xuICAgICAgICB0ZVsgNyBdID0gKCBuMTIgKiBuMzMgKiBuNDEgLSBuMTMgKiBuMzIgKiBuNDEgKyBuMTMgKiBuMzEgKiBuNDIgLSBuMTEgKiBuMzMgKiBuNDIgLSBuMTIgKiBuMzEgKiBuNDMgKyBuMTEgKiBuMzIgKiBuNDMgKSAqIGRldEludjtcblxuICAgICAgICB0ZVsgOCBdID0gdDEzICogZGV0SW52O1xuICAgICAgICB0ZVsgOSBdID0gKCBuMTQgKiBuMjMgKiBuNDEgLSBuMTMgKiBuMjQgKiBuNDEgLSBuMTQgKiBuMjEgKiBuNDMgKyBuMTEgKiBuMjQgKiBuNDMgKyBuMTMgKiBuMjEgKiBuNDQgLSBuMTEgKiBuMjMgKiBuNDQgKSAqIGRldEludjtcbiAgICAgICAgdGVbIDEwIF0gPSAoIG4xMiAqIG4yNCAqIG40MSAtIG4xNCAqIG4yMiAqIG40MSArIG4xNCAqIG4yMSAqIG40MiAtIG4xMSAqIG4yNCAqIG40MiAtIG4xMiAqIG4yMSAqIG40NCArIG4xMSAqIG4yMiAqIG40NCApICogZGV0SW52O1xuICAgICAgICB0ZVsgMTEgXSA9ICggbjEzICogbjIyICogbjQxIC0gbjEyICogbjIzICogbjQxIC0gbjEzICogbjIxICogbjQyICsgbjExICogbjIzICogbjQyICsgbjEyICogbjIxICogbjQzIC0gbjExICogbjIyICogbjQzICkgKiBkZXRJbnY7XG5cbiAgICAgICAgdGVbIDEyIF0gPSB0MTQgKiBkZXRJbnY7XG4gICAgICAgIHRlWyAxMyBdID0gKCBuMTMgKiBuMjQgKiBuMzEgLSBuMTQgKiBuMjMgKiBuMzEgKyBuMTQgKiBuMjEgKiBuMzMgLSBuMTEgKiBuMjQgKiBuMzMgLSBuMTMgKiBuMjEgKiBuMzQgKyBuMTEgKiBuMjMgKiBuMzQgKSAqIGRldEludjtcbiAgICAgICAgdGVbIDE0IF0gPSAoIG4xNCAqIG4yMiAqIG4zMSAtIG4xMiAqIG4yNCAqIG4zMSAtIG4xNCAqIG4yMSAqIG4zMiArIG4xMSAqIG4yNCAqIG4zMiArIG4xMiAqIG4yMSAqIG4zNCAtIG4xMSAqIG4yMiAqIG4zNCApICogZGV0SW52O1xuICAgICAgICB0ZVsgMTUgXSA9ICggbjEyICogbjIzICogbjMxIC0gbjEzICogbjIyICogbjMxICsgbjEzICogbjIxICogbjMyIC0gbjExICogbjIzICogbjMyIC0gbjEyICogbjIxICogbjMzICsgbjExICogbjIyICogbjMzICkgKiBkZXRJbnY7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGdldEludmVyc2U6IGZ1bmN0aW9uICggbSwgdGhyb3dPbkludmVydGlibGUgKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTG12TWF0cml4NC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4nKTtcbiAgICAgICAgdGhpcy5jb3B5KG0pLmludmVydCgpO1xuXG4gICAgICAgIC8vIFByZS1pbnZlcnQgYmVoYXZpb3JcbiAgICAgICAgaWYgKHRoaXMuZGV0ZXJtaW5hbnQoKSA9PT0gIDApIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IFwiTWF0cml4NC5nZXRJbnZlcnNlKCk6IGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50IGlzIDBcIjtcbiAgICAgICAgICAgIGlmICggdGhyb3dPbkludmVydGlibGUgfHwgZmFsc2UgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCBtc2cgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaWRlbnRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgc2NhbGU6IGZ1bmN0aW9uICggdiApIHtcblxuICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuICAgICAgICB2YXIgeCA9IHYueCwgeSA9IHYueSwgeiA9IHYuejtcblxuICAgICAgICB0ZVsgMCBdICo9IHg7IHRlWyA0IF0gKj0geTsgdGVbIDggXSAqPSB6O1xuICAgICAgICB0ZVsgMSBdICo9IHg7IHRlWyA1IF0gKj0geTsgdGVbIDkgXSAqPSB6O1xuICAgICAgICB0ZVsgMiBdICo9IHg7IHRlWyA2IF0gKj0geTsgdGVbIDEwIF0gKj0gejtcbiAgICAgICAgdGVbIDMgXSAqPSB4OyB0ZVsgNyBdICo9IHk7IHRlWyAxMSBdICo9IHo7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgZ2V0TWF4U2NhbGVPbkF4aXM6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG4gICAgICAgIHZhciBzY2FsZVhTcSA9IHRlWyAwIF0gKiB0ZVsgMCBdICsgdGVbIDEgXSAqIHRlWyAxIF0gKyB0ZVsgMiBdICogdGVbIDIgXTtcbiAgICAgICAgdmFyIHNjYWxlWVNxID0gdGVbIDQgXSAqIHRlWyA0IF0gKyB0ZVsgNSBdICogdGVbIDUgXSArIHRlWyA2IF0gKiB0ZVsgNiBdO1xuICAgICAgICB2YXIgc2NhbGVaU3EgPSB0ZVsgOCBdICogdGVbIDggXSArIHRlWyA5IF0gKiB0ZVsgOSBdICsgdGVbIDEwIF0gKiB0ZVsgMTAgXTtcblxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCBNYXRoLm1heCggc2NhbGVYU3EsIE1hdGgubWF4KCBzY2FsZVlTcSwgc2NhbGVaU3EgKSApICk7XG5cbiAgICB9LFxuXG4gICAgbWFrZVRyYW5zbGF0aW9uOiBmdW5jdGlvbiAoIHgsIHksIHogKSB7XG5cbiAgICAgICAgdGhpcy5zZXQoXG5cbiAgICAgICAgICAgIDEsIDAsIDAsIHgsXG4gICAgICAgICAgICAwLCAxLCAwLCB5LFxuICAgICAgICAgICAgMCwgMCwgMSwgeixcbiAgICAgICAgICAgIDAsIDAsIDAsIDFcblxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIG1ha2VSb3RhdGlvblg6IGZ1bmN0aW9uICggdGhldGEgKSB7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggdGhldGEgKSwgcyA9IE1hdGguc2luKCB0aGV0YSApO1xuXG4gICAgICAgIHRoaXMuc2V0KFxuXG4gICAgICAgICAgICAxLCAwLCAgMCwgMCxcbiAgICAgICAgICAgIDAsIGMsIC0gcywgMCxcbiAgICAgICAgICAgIDAsIHMsICBjLCAwLFxuICAgICAgICAgICAgMCwgMCwgIDAsIDFcblxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIG1ha2VSb3RhdGlvblk6IGZ1bmN0aW9uICggdGhldGEgKSB7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggdGhldGEgKSwgcyA9IE1hdGguc2luKCB0aGV0YSApO1xuXG4gICAgICAgIHRoaXMuc2V0KFxuXG4gICAgICAgICAgICAgYywgMCwgcywgMCxcbiAgICAgICAgICAgICAwLCAxLCAwLCAwLFxuICAgICAgICAgICAgLSBzLCAwLCBjLCAwLFxuICAgICAgICAgICAgIDAsIDAsIDAsIDFcblxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIG1ha2VSb3RhdGlvblo6IGZ1bmN0aW9uICggdGhldGEgKSB7XG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggdGhldGEgKSwgcyA9IE1hdGguc2luKCB0aGV0YSApO1xuXG4gICAgICAgIHRoaXMuc2V0KFxuXG4gICAgICAgICAgICBjLCAtIHMsIDAsIDAsXG4gICAgICAgICAgICBzLCAgYywgMCwgMCxcbiAgICAgICAgICAgIDAsICAwLCAxLCAwLFxuICAgICAgICAgICAgMCwgIDAsIDAsIDFcblxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIG1ha2VSb3RhdGlvbkF4aXM6IGZ1bmN0aW9uICggYXhpcywgYW5nbGUgKSB7XG5cbiAgICAgICAgLy8gQmFzZWQgb24gaHR0cDovL3d3dy5nYW1lZGV2Lm5ldC9yZWZlcmVuY2UvYXJ0aWNsZXMvYXJ0aWNsZTExOTkuYXNwXG5cbiAgICAgICAgdmFyIGMgPSBNYXRoLmNvcyggYW5nbGUgKTtcbiAgICAgICAgdmFyIHMgPSBNYXRoLnNpbiggYW5nbGUgKTtcbiAgICAgICAgdmFyIHQgPSAxIC0gYztcbiAgICAgICAgdmFyIHggPSBheGlzLngsIHkgPSBheGlzLnksIHogPSBheGlzLno7XG4gICAgICAgIHZhciB0eCA9IHQgKiB4LCB0eSA9IHQgKiB5O1xuXG4gICAgICAgIHRoaXMuc2V0KFxuXG4gICAgICAgICAgICB0eCAqIHggKyBjLCB0eCAqIHkgLSBzICogeiwgdHggKiB6ICsgcyAqIHksIDAsXG4gICAgICAgICAgICB0eCAqIHkgKyBzICogeiwgdHkgKiB5ICsgYywgdHkgKiB6IC0gcyAqIHgsIDAsXG4gICAgICAgICAgICB0eCAqIHogLSBzICogeSwgdHkgKiB6ICsgcyAqIHgsIHQgKiB6ICogeiArIGMsIDAsXG4gICAgICAgICAgICAwLCAwLCAwLCAxXG5cbiAgICAgICAgKTtcblxuICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgbWFrZVNjYWxlOiBmdW5jdGlvbiAoIHgsIHksIHogKSB7XG5cbiAgICAgICAgdGhpcy5zZXQoXG5cbiAgICAgICAgICAgIHgsIDAsIDAsIDAsXG4gICAgICAgICAgICAwLCB5LCAwLCAwLFxuICAgICAgICAgICAgMCwgMCwgeiwgMCxcbiAgICAgICAgICAgIDAsIDAsIDAsIDFcblxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGNvbXBvc2U6IGZ1bmN0aW9uICggcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlICkge1xuXG4gICAgICAgIHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKTtcbiAgICAgICAgdGhpcy5zY2FsZSggc2NhbGUgKTtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbiggcG9zaXRpb24gKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBkZWNvbXBvc2U6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgdmVjdG9yID0gbmV3IExtdlZlY3RvcjMoKTtcbiAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBMbXZNYXRyaXg0KHRydWUpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBzY2FsZSApIHtcblxuICAgICAgICAgICAgdmFyIHRlID0gdGhpcy5lbGVtZW50cztcblxuICAgICAgICAgICAgdmFyIHN4ID0gdmVjdG9yLnNldCggdGVbIDAgXSwgdGVbIDEgXSwgdGVbIDIgXSApLmxlbmd0aCgpO1xuICAgICAgICAgICAgdmFyIHN5ID0gdmVjdG9yLnNldCggdGVbIDQgXSwgdGVbIDUgXSwgdGVbIDYgXSApLmxlbmd0aCgpO1xuICAgICAgICAgICAgdmFyIHN6ID0gdmVjdG9yLnNldCggdGVbIDggXSwgdGVbIDkgXSwgdGVbIDEwIF0gKS5sZW5ndGgoKTtcblxuICAgICAgICAgICAgLy8gaWYgZGV0ZXJtaW5lIGlzIG5lZ2F0aXZlLCB3ZSBuZWVkIHRvIGludmVydCBvbmUgc2NhbGVcbiAgICAgICAgICAgIHZhciBkZXQgPSB0aGlzLmRldGVybWluYW50KCk7XG4gICAgICAgICAgICBpZiAoIGRldCA8IDAgKSB7XG4gICAgICAgICAgICAgICAgc3ggPSAtIHN4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwb3NpdGlvbi54ID0gdGVbIDEyIF07XG4gICAgICAgICAgICBwb3NpdGlvbi55ID0gdGVbIDEzIF07XG4gICAgICAgICAgICBwb3NpdGlvbi56ID0gdGVbIDE0IF07XG5cbiAgICAgICAgICAgIC8vIHNjYWxlIHRoZSByb3RhdGlvbiBwYXJ0XG5cbiAgICAgICAgICAgIG1hdHJpeC5lbGVtZW50cy5zZXQoIHRoaXMuZWxlbWVudHMgKTsgLy8gYXQgdGhpcyBwb2ludCBtYXRyaXggaXMgaW5jb21wbGV0ZSBzbyB3ZSBjYW4ndCB1c2UgLmNvcHkoKVxuXG4gICAgICAgICAgICB2YXIgaW52U1ggPSAxIC8gc3g7XG4gICAgICAgICAgICB2YXIgaW52U1kgPSAxIC8gc3k7XG4gICAgICAgICAgICB2YXIgaW52U1ogPSAxIC8gc3o7XG5cbiAgICAgICAgICAgIG1hdHJpeC5lbGVtZW50c1sgMCBdICo9IGludlNYO1xuICAgICAgICAgICAgbWF0cml4LmVsZW1lbnRzWyAxIF0gKj0gaW52U1g7XG4gICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDIgXSAqPSBpbnZTWDtcblxuICAgICAgICAgICAgbWF0cml4LmVsZW1lbnRzWyA0IF0gKj0gaW52U1k7XG4gICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDUgXSAqPSBpbnZTWTtcbiAgICAgICAgICAgIG1hdHJpeC5lbGVtZW50c1sgNiBdICo9IGludlNZO1xuXG4gICAgICAgICAgICBtYXRyaXguZWxlbWVudHNbIDggXSAqPSBpbnZTWjtcbiAgICAgICAgICAgIG1hdHJpeC5lbGVtZW50c1sgOSBdICo9IGludlNaO1xuICAgICAgICAgICAgbWF0cml4LmVsZW1lbnRzWyAxMCBdICo9IGludlNaO1xuXG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCggbWF0cml4ICk7XG5cbiAgICAgICAgICAgIHNjYWxlLnggPSBzeDtcbiAgICAgICAgICAgIHNjYWxlLnkgPSBzeTtcbiAgICAgICAgICAgIHNjYWxlLnogPSBzejtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfTtcblxuICAgIH0oKSxcblxuICAgIC8vQWRkZWQgZm9yIExNVlxuICAgIHRyYW5zZm9ybVBvaW50OiBmdW5jdGlvbiAocHQpIHtcblxuICAgICAgICAgICAgLy8gaW5wdXQ6IFRIUkVFLk1hdHJpeDQgYWZmaW5lIG1hdHJpeFxuXG4gICAgICAgICAgICB2YXIgeCA9IHB0LngsIHkgPSBwdC55LCB6ID0gcHQuejtcblxuICAgICAgICAgICAgdmFyIGUgPSB0aGlzLmVsZW1lbnRzO1xuXG4gICAgICAgICAgICBwdC54ID0gZVsgMCBdICogeCArIGVbIDQgXSAqIHkgKyBlWyA4IF0gICogeiArIGVbIDEyIF07XG4gICAgICAgICAgICBwdC55ID0gZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5IF0gICogeiArIGVbIDEzIF07XG4gICAgICAgICAgICBwdC56ID0gZVsgMiBdICogeCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICogeiArIGVbIDE0IF07XG5cbiAgICAgICAgICAgIHJldHVybiBwdDtcbiAgICB9LFxuXG4gICAgLy9BZGRlZCBmb3IgTE1WXG4gICAgdHJhbnNmb3JtRGlyZWN0aW9uOiBmdW5jdGlvbih2KSB7XG5cbiAgICAgICAgICAgIC8vIGlucHV0OiBUSFJFRS5NYXRyaXg0IGFmZmluZSBtYXRyaXhcbiAgICAgICAgICAgIC8vIHZlY3RvciBpbnRlcnByZXRlZCBhcyBhIGRpcmVjdGlvblxuXG4gICAgICAgICAgICB2YXIgeCA9IHYueCwgeSA9IHYueSwgeiA9IHYuejtcblxuICAgICAgICAgICAgdmFyIGUgPSB0aGlzLmVsZW1lbnRzO1xuXG4gICAgICAgICAgICB2LnggPSBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAgKiB6O1xuICAgICAgICAgICAgdi55ID0gZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5IF0gICogejtcbiAgICAgICAgICAgIHYueiA9IGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHo7XG5cbiAgICAgICAgICAgIHZhciBsZW4gPSBNYXRoLnNxcnQodi54KnYueCArIHYueSp2LnkgKyB2Lnoqdi56KTtcbiAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlsZW4gPSAxLjAgLyBsZW47XG4gICAgICAgICAgICAgICAgdi54ICo9IGlsZW47XG4gICAgICAgICAgICAgICAgdi55ICo9IGlsZW47XG4gICAgICAgICAgICAgICAgdi56ICo9IGlsZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgIH0sXG5cbiAgICBlcXVhbHMoIG1hdHJpeCApIHtcblxuICAgICAgICBjb25zdCB0ZSA9IHRoaXMuZWxlbWVudHM7XG4gICAgICAgIGNvbnN0IG1lID0gbWF0cml4LmVsZW1lbnRzO1xuXG4gICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IDE2OyBpICsrICkge1xuXG4gICAgICAgICAgICBpZiAoIHRlWyBpIF0gIT09IG1lWyBpIF0gKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgfSxcbiAgICBcbiAgICBmcm9tQXJyYXk6IGZ1bmN0aW9uICggYXJyYXkgKSB7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50cy5zZXQoIGFycmF5ICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRlWyAwIF0sIHRlWyAxIF0sIHRlWyAyIF0sIHRlWyAzIF0sXG4gICAgICAgICAgICB0ZVsgNCBdLCB0ZVsgNSBdLCB0ZVsgNiBdLCB0ZVsgNyBdLFxuICAgICAgICAgICAgdGVbIDggXSwgdGVbIDkgXSwgdGVbIDEwIF0sIHRlWyAxMSBdLFxuICAgICAgICAgICAgdGVbIDEyIF0sIHRlWyAxMyBdLCB0ZVsgMTQgXSwgdGVbIDE1IF1cbiAgICAgICAgXTtcblxuICAgIH0sXG5cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHJldHVybiBuZXcgTG12TWF0cml4NCh0aGlzLmlzRG91YmxlUHJlY2lzaW9uKS5mcm9tQXJyYXkoIHRoaXMuZWxlbWVudHMgKTtcblxuICAgIH1cblxufTtcbiJdLCJuYW1lcyI6WyJMbXZWZWN0b3IzIiwiTG12TWF0cml4NCIsInVzZURvdWJsZVByZWNpc2lvbiIsImVsZW1lbnRzIiwiRmxvYXQ2NEFycmF5IiwiRmxvYXQzMkFycmF5IiwiaXNEb3VibGVQcmVjaXNpb24iLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciIsInNldCIsIm4xMSIsIm4xMiIsIm4xMyIsIm4xNCIsIm4yMSIsIm4yMiIsIm4yMyIsIm4yNCIsIm4zMSIsIm4zMiIsIm4zMyIsIm4zNCIsIm40MSIsIm40MiIsIm40MyIsIm40NCIsInRlIiwiaWRlbnRpdHkiLCJjb3B5IiwibSIsIm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uIiwicSIsIngiLCJ5IiwieiIsInciLCJ4MiIsInkyIiwiejIiLCJ4eCIsInh5IiwieHoiLCJ5eSIsInl6IiwienoiLCJ3eCIsInd5Iiwid3oiLCJtdWx0aXBseSIsIm4iLCJtdWx0aXBseU1hdHJpY2VzIiwiYSIsImIiLCJhZSIsImJlIiwiYTExIiwiYTEyIiwiYTEzIiwiYTE0IiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTMxIiwiYTMyIiwiYTMzIiwiYTM0IiwiYTQxIiwiYTQyIiwiYTQzIiwiYTQ0IiwiYjExIiwiYjEyIiwiYjEzIiwiYjE0IiwiYjIxIiwiYjIyIiwiYjIzIiwiYjI0IiwiYjMxIiwiYjMyIiwiYjMzIiwiYjM0IiwiYjQxIiwiYjQyIiwiYjQzIiwiYjQ0IiwibXVsdGlwbHlUb0FycmF5IiwiciIsIm11bHRpcGx5U2NhbGFyIiwicyIsImRldGVybWluYW50IiwidHJhbnNwb3NlIiwidG1wIiwiZmxhdHRlblRvQXJyYXlPZmZzZXQiLCJhcnJheSIsIm9mZnNldCIsInNldFBvc2l0aW9uIiwidiIsImludmVydCIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsImRldCIsImRldEludiIsImdldEludmVyc2UiLCJ0aHJvd09uSW52ZXJ0aWJsZSIsImNvbnNvbGUiLCJ3YXJuIiwibXNnIiwiRXJyb3IiLCJzY2FsZSIsImdldE1heFNjYWxlT25BeGlzIiwic2NhbGVYU3EiLCJzY2FsZVlTcSIsInNjYWxlWlNxIiwiTWF0aCIsInNxcnQiLCJtYXgiLCJtYWtlVHJhbnNsYXRpb24iLCJtYWtlUm90YXRpb25YIiwidGhldGEiLCJjIiwiY29zIiwic2luIiwibWFrZVJvdGF0aW9uWSIsIm1ha2VSb3RhdGlvbloiLCJtYWtlUm90YXRpb25BeGlzIiwiYXhpcyIsImFuZ2xlIiwidCIsInR4IiwidHkiLCJtYWtlU2NhbGUiLCJjb21wb3NlIiwicG9zaXRpb24iLCJxdWF0ZXJuaW9uIiwiZGVjb21wb3NlIiwidmVjdG9yIiwibWF0cml4Iiwic3giLCJsZW5ndGgiLCJzeSIsInN6IiwiaW52U1giLCJpbnZTWSIsImludlNaIiwic2V0RnJvbVJvdGF0aW9uTWF0cml4IiwidHJhbnNmb3JtUG9pbnQiLCJwdCIsImUiLCJ0cmFuc2Zvcm1EaXJlY3Rpb24iLCJsZW4iLCJpbGVuIiwiZXF1YWxzIiwibWUiLCJpIiwiZnJvbUFycmF5IiwidG9BcnJheSIsImNsb25lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/wgs/scene/LmvMatrix4.js\n"); /***/ }), /***/ "./src/wgs/scene/LmvVector3.js": /*!*************************************!*\ !*** ./src/wgs/scene/LmvVector3.js ***! \*************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__)=> { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LmvVector3: () => (/* binding */ LmvVector3)\n/* harmony export */ });\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author *kile / http://kile.stravaganza.org/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n/* Pruned version of THREE.Vector3, for use in the LMV web worker */\n\nlet LmvVector3 = function (x, y, z) {\n\n this.x = x || 0;\n this.y = y || 0;\n this.z = z || 0;\n\n};\n\nLmvVector3.prototype = {\n\n constructor: LmvVector3,\n\n set: function (x, y, z) {\n\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n\n },\n\n setX: function (x) {\n\n this.x = x;\n\n return this;\n\n },\n\n setY: function (y) {\n\n this.y = y;\n\n return this;\n\n },\n\n setZ: function (z) {\n\n this.z = z;\n\n return this;\n\n },\n\n setComponent: function (index, value) {\n\n switch (index) {\n\n case 0:this.x = value;break;\n case 1:this.y = value;break;\n case 2:this.z = value;break;\n default:throw new Error('index is out of range: ' + index);\n\n }\n\n },\n\n getComponent: function (index) {\n\n switch (index) {\n\n case 0:return this.x;\n case 1:return this.y;\n case 2:return this.z;\n default:throw new Error('index is out of range: ' + index);\n\n }\n\n },\n\n clone: function () {\n\n return new this.constructor(this.x, this.y, this.z);\n\n },\n\n copy: function (v) {\n\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n\n return this;\n\n },\n\n add: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');\n return this.addVectors(v, w);\n\n }\n\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n\n return this;\n\n },\n\n addScalar: function (s) {\n\n this.x += s;\n this.y += s;\n this.z += s;\n\n return this;\n\n },\n\n addVectors: function (a, b) {\n\n this.x = a.x + b.x;\n this.y = a.y + b.y;\n this.z = a.z + b.z;\n\n return this;\n\n },\n\n addScaledVector: function (v, s) {\n\n this.x += v.x * s;\n this.y += v.y * s;\n this.z += v.z * s;\n\n return this;\n\n },\n\n sub: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');\n return this.subVectors(v, w);\n\n }\n\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n\n return this;\n\n },\n\n subScalar: function (s) {\n\n this.x -= s;\n this.y -= s;\n this.z -= s;\n\n return this;\n\n },\n\n subVectors: function (a, b) {\n\n this.x = a.x - b.x;\n this.y = a.y - b.y;\n this.z = a.z - b.z;\n\n return this;\n\n },\n\n multiply: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');\n return this.multiplyVectors(v, w);\n\n }\n\n this.x *= v.x;\n this.y *= v.y;\n this.z *= v.z;\n\n return this;\n\n },\n\n multiplyScalar: function (scalar) {\n\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n\n return this;\n\n },\n\n multiplyVectors: function (a, b) {\n\n this.x = a.x * b.x;\n this.y = a.y * b.y;\n this.z = a.z * b.z;\n\n return this;\n\n },\n\n applyMatrix3: function (m) {\n\n var x = this.x;\n var y = this.y;\n var z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[3] * y + e[6] * z;\n this.y = e[1] * x + e[4] * y + e[7] * z;\n this.z = e[2] * x + e[5] * y + e[8] * z;\n\n return this;\n\n },\n\n applyMatrix4: function (m) {\n\n // input: THREE.Matrix4 affine matrix\n\n var x = this.x,y = this.y,z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n\n return this;\n\n },\n\n applyProjection: function (m) {\n\n // input: THREE.Matrix4 projection matrix\n\n var x = this.x,y = this.y,z = this.z;\n\n var e = m.elements;\n var d = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); // perspective divide\n\n this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * d;\n this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * d;\n this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * d;\n\n return this;\n\n },\n\n applyQuaternion: function (q) {\n\n var x = this.x;\n var y = this.y;\n var z = this.z;\n\n var qx = q.x;\n var qy = q.y;\n var qz = q.z;\n var qw = q.w;\n\n // calculate quat * vector\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n\n this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\n return this;\n\n },\n\n transformDirection: function (m) {\n\n // input: THREE.Matrix4 affine matrix\n // vector interpreted as a direction\n\n var x = this.x,y = this.y,z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z;\n this.y = e[1] * x + e[5] * y + e[9] * z;\n this.z = e[2] * x + e[6] * y + e[10] * z;\n\n this.normalize();\n\n return this;\n\n },\n\n divide: function (v) {\n\n this.x /= v.x;\n this.y /= v.y;\n this.z /= v.z;\n\n return this;\n\n },\n\n divideScalar: function (scalar) {\n\n if (scalar !== 0) {\n\n var invScalar = 1 / scalar;\n\n this.x *= invScalar;\n this.y *= invScalar;\n this.z *= invScalar;\n\n } else {\n\n this.x = 0;\n this.y = 0;\n this.z = 0;\n\n }\n\n return this;\n\n },\n\n min: function (v) {\n\n if (this.x > v.x) {\n\n this.x = v.x;\n\n }\n\n if (this.y > v.y) {\n\n this.y = v.y;\n\n }\n\n if (this.z > v.z) {\n\n this.z = v.z;\n\n }\n\n return this;\n\n },\n\n max: function (v) {\n\n if (this.x < v.x) {\n\n this.x=v .x;\n\n }\n\n if (this.y < v.y) {\n\n this.y=v .y;\n\n }\n\n if (this.z < v.z) {\n\n this.z=v .z;\n\n }\n\n return this;\n\n },\n\n clamp: function (min, max) {\n\n // This function assumes min < max, if this assumption isn 't true it will not operate correctly\n\n if (this.x < min.x) {\n\n this.x = min.x;\n\n } else if (this.x > max.x) {\n\n this.x = max.x;\n\n }\n\n if (this.y < min.y) {\n\n this.y = min.y;\n\n } else if (this.y > max.y) {\n\n this.y = max.y;\n\n }\n\n if (this.z < min.z) {\n\n this.z = min.z;\n\n } else if (this.z > max.z) {\n\n this.z = max.z;\n\n }\n\n return this;\n\n },\n\n clampScalar: function () {\n\n var min, max;\n\n return function clampScalar(minVal, maxVal) {\n\n if (min === undefined) {\n\n min = new LmvVector3();\n max = new LmvVector3();\n\n }\n\n min.set(minVal, minVal, minVal);\n max.set(maxVal, maxVal, maxVal);\n\n return this.clamp(min, max);\n\n };\n\n }(),\n\n floor: function () {\n\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n\n return this;\n\n },\n\n ceil: function () {\n\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n\n return this;\n\n },\n\n round: function () {\n\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n\n return this;\n\n },\n\n roundToZero: function () {\n\n this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\n this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\n this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);\n\n return this;\n\n },\n\n negate: function () {\n\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n\n return this;\n\n },\n\n dot: function (v) {\n\n return this.x * v.x + this.y * v.y + this.z * v.z;\n\n },\n\n lengthSq: function () {\n\n return this.x * this.x + this.y * this.y + this.z * this.z;\n\n },\n\n length: function () {\n\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n\n },\n\n lengthManhattan: function () {\n\n return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n\n },\n\n normalize: function () {\n\n return this.divideScalar(this.length());\n\n },\n\n setLength: function (l) {\n\n var oldLength = this.length();\n\n if (oldLength !== 0 && l !== oldLength) {\n\n this.multiplyScalar(l / oldLength);\n\n }\n\n return this;\n\n },\n\n lerp: function (v, alpha) {\n\n this.x += (v.x - this.x) * alpha;\n this.y += (v.y - this.y) * alpha;\n this.z += (v.z - this.z) * alpha;\n\n return this;\n\n },\n\n lerpVectors: function (v1, v2, alpha) {\n\n this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);\n\n return this;\n\n },\n\n cross: function (v, w) {\n\n if (w !== undefined) {\n\n console.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead. ');\n return this.crossVectors(v, w);\n\n }\n\n var x = this.x,y = this.y,z = this.z;\n\n this.x = y * v.z - z * v.y;\n this.y = z * v.x - x * v.z;\n this.z = x * v.y - y * v.x;\n\n return this;\n\n },\n\n crossVectors: function (a, b) {\n\n var ax = a.x,ay = a.y,az = a.z;\n var bx = b.x,by = b.y,bz = b.z;\n\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n\n return this;\n\n },\n\n projectOnVector: function () {\n\n var v1, dot;\n\n return function projectOnVector(vector) {\n\n if (v1 === undefined) v1 = new LmvVector3();\n\n v1.copy(vector).normalize();\n\n dot = this.dot(v1);\n\n return this.copy(v1).multiplyScalar(dot);\n\n };\n\n }(),\n\n projectOnPlane: function () {\n\n var v1;\n\n return function projectOnPlane(planeNormal) {\n\n if (v1 === undefined) v1 = new LmvVector3();\n\n v1.copy(this).projectOnVector(planeNormal);\n\n return this.sub(v1);\n\n };\n\n }(),\n\n reflect: function () {\n\n // reflect incident vector off plane orthogonal to normal\n // normal is assumed to have unit length\n\n var v1;\n\n return function reflect(normal) {\n\n if (v1 === undefined) v1 = new LmvVector3();\n\n return this.sub(v1.copy(normal).multiplyScalar(2 * this.dot(normal)));\n\n };\n\n }(),\n\n distanceTo: function (v) {\n\n return Math.sqrt(this.distanceToSquared(v));\n\n },\n\n distanceToSquared: function (v) {\n\n var dx = this.x - v.x;\n var dy = this.y - v.y;\n var dz = this.z - v.z;\n\n return dx * dx + dy * dy + dz * dz;\n\n },\n\n setEulerFromRotationMatrix: function (m, order) {\n\n console.error('THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead. ');\n\n },\n\n setEulerFromQuaternion: function (q, order) {\n\n console.error('THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead. ');\n\n },\n\n getPositionFromMatrix: function (m) {\n\n console.warn('THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition(). ');\n\n return this.setFromMatrixPosition(m);\n\n },\n\n getScaleFromMatrix: function (m) {\n\n console.warn('THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale(). ');\n\n return this.setFromMatrixScale(m);\n\n },\n\n getColumnFromMatrix: function (index, matrix) {\n\n console.warn('THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn(). ');\n\n return this.setFromMatrixColumn(index, matrix);\n\n },\n\n setFromMatrixPosition: function (m) {\n\n this.x = m.elements[12];\n this.y = m.elements[13];\n this.z = m.elements[14];\n\n return this;\n\n },\n\n setFromMatrixScale: function (m) {\n\n var sx = this.set(m.elements[0], m.elements[1], m.elements[2]).length();\n var sy = this.set(m.elements[4], m.elements[5], m.elements[6]).length();\n var sz = this.set(m.elements[8], m.elements[9], m.elements[10]).length();\n\n this.x = sx;\n this.y = sy;\n this.z = sz;\n\n return this;\n\n },\n\n setFromMatrixColumn: function (index, matrix) {\n\n var offset = index * 4;\n\n var me = matrix.elements;\n\n this.x = me[offset];\n this.y = me[offset + 1];\n this.z = me[offset + 2];\n\n return this;\n\n },\n\n equals: function (v) {\n\n return v.x === this.x && v.y === this.y && v.z === this.z;\n\n },\n\n fromArray: function (array, offset) {\n\n if (offset === undefined) offset = 0;\n\n this.x = array[offset];\n this.y = array[offset + 1];\n this.z = array[offset + 2];\n\n return this;\n\n },\n\n toArray: function (array, offset) {\n\n if (array === undefined) array = [];\n if (offset === undefined) offset = 0;\n\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n\n return array;\n\n },\n\n fromAttribute: function (attribute, index, offset) {\n\n if (offset === undefined) offset = 0;\n\n index = index * attribute.itemSize + offset;\n\n this.x = attribute.array[index];\n this.y = attribute.array[index + 1];\n this.z = attribute.array[index + 2];\n\n return this;\n\n }\n\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQzs7SUFFdEMxRyxLQUFLLEdBQUdBLEtBQUssR0FBR2lILFNBQVMsQ0FBQ0MsUUFBUSxHQUFHUixNQUFNOztJQUUzQyxJQUFJLENBQUNwSCxDQUFDLEdBQUcySCxTQUFTLENBQUNILEtBQUssQ0FBRTlHLEtBQUssQ0FBRTtJQUNqQyxJQUFJLENBQUNULENBQUMsR0FBRzBILFNBQVMsQ0FBQ0gsS0FBSyxDQUFFOUcsS0FBSyxHQUFHLENBQUMsQ0FBRTtJQUNyQyxJQUFJLENBQUNSLENBQUMsR0FBR3lILFNBQVMsQ0FBQ0gsS0FBSyxDQUFFOUcsS0FBSyxHQUFHLENBQUMsQ0FBRTs7SUFFckMsT0FBTyxJQUFJOztFQUVmOztBQUVKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvd2dzL3NjZW5lL0xtdlZlY3RvcjMuanM/NjQxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vXG4gKiBAYXV0aG9yICpraWxlIC8gaHR0cDovL2tpbGUuc3RyYXZhZ2FuemEub3JnL1xuICogQGF1dGhvciBwaGlsb2diIC8gaHR0cDovL2Jsb2cudGhlaml0Lm9yZy9cbiAqIEBhdXRob3IgbWlrYWVsIGVtdGluZ2VyIC8gaHR0cDovL2dvbW8uc2UvXG4gKiBAYXV0aG9yIGVncmFldGhlciAvIGh0dHA6Ly9lZ3JhZXRoZXIuY29tL1xuICogQGF1dGhvciBXZXN0TGFuZ2xleSAvIGh0dHA6Ly9naXRodWIuY29tL1dlc3RMYW5nbGV5XG4gKi9cbi8qIFBydW5lZCB2ZXJzaW9uIG9mIFRIUkVFLlZlY3RvcjMsIGZvciB1c2UgaW4gdGhlIExNViB3ZWIgd29ya2VyICovXG5cbmV4cG9ydCBsZXQgTG12VmVjdG9yMyA9IGZ1bmN0aW9uKCB4LCB5LCB6ICkge1xuXG4gICAgdGhpcy54ID0geCB8fCAwO1xuICAgIHRoaXMueSA9IHkgfHwgMDtcbiAgICB0aGlzLnogPSB6IHx8IDA7XG5cbn07XG5cbkxtdlZlY3RvcjMucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IExtdlZlY3RvcjMsXG5cbiAgICBzZXQ6IGZ1bmN0aW9uICggeCwgeSwgeiApIHtcblxuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICB0aGlzLnogPSB6O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHNldFg6IGZ1bmN0aW9uICggeCApIHtcblxuICAgICAgICB0aGlzLnggPSB4O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHNldFk6IGZ1bmN0aW9uICggeSApIHtcblxuICAgICAgICB0aGlzLnkgPSB5O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHNldFo6IGZ1bmN0aW9uICggeiApIHtcblxuICAgICAgICB0aGlzLnogPSB6O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHNldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCwgdmFsdWUgKSB7XG5cbiAgICAgICAgc3dpdGNoICggaW5kZXggKSB7XG5cbiAgICAgICAgICAgIGNhc2UgMDogdGhpcy54ID0gdmFsdWU7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOiB0aGlzLnkgPSB2YWx1ZTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6IHRoaXMueiA9IHZhbHVlOyBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4ICk7XG5cbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCApIHtcblxuICAgICAgICBzd2l0Y2ggKCBpbmRleCApIHtcblxuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gdGhpcy54O1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gdGhpcy55O1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gdGhpcy56O1xuICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCAnaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAnICsgaW5kZXggKTtcblxuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoIHRoaXMueCwgdGhpcy55LCB0aGlzLnogKTtcblxuICAgIH0sXG5cbiAgICBjb3B5OiBmdW5jdGlvbiAoIHYgKSB7XG5cbiAgICAgICAgdGhpcy54ID0gdi54O1xuICAgICAgICB0aGlzLnkgPSB2Lnk7XG4gICAgICAgIHRoaXMueiA9IHYuejtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBhZGQ6IGZ1bmN0aW9uICggdiwgdyApIHtcblxuICAgICAgICBpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZFZlY3RvcnMoIHYsIHcgKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy54ICs9IHYueDtcbiAgICAgICAgdGhpcy55ICs9IHYueTtcbiAgICAgICAgdGhpcy56ICs9IHYuejtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBhZGRTY2FsYXI6IGZ1bmN0aW9uICggcyApIHtcblxuICAgICAgICB0aGlzLnggKz0gcztcbiAgICAgICAgdGhpcy55ICs9IHM7XG4gICAgICAgIHRoaXMueiArPSBzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGFkZFZlY3RvcnM6IGZ1bmN0aW9uICggYSwgYiApIHtcblxuICAgICAgICB0aGlzLnggPSBhLnggKyBiLng7XG4gICAgICAgIHRoaXMueSA9IGEueSArIGIueTtcbiAgICAgICAgdGhpcy56ID0gYS56ICsgYi56O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGFkZFNjYWxlZFZlY3RvcjogZnVuY3Rpb24gKCB2LCBzICkge1xuXG4gICAgICAgIHRoaXMueCArPSB2LnggKiBzO1xuICAgICAgICB0aGlzLnkgKz0gdi55ICogcztcbiAgICAgICAgdGhpcy56ICs9IHYueiAqIHM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgc3ViOiBmdW5jdGlvbiAoIHYsIHcgKSB7XG5cbiAgICAgICAgaWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cbiAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2LCB3ICk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMueCAtPSB2Lng7XG4gICAgICAgIHRoaXMueSAtPSB2Lnk7XG4gICAgICAgIHRoaXMueiAtPSB2Lno7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgc3ViU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7XG5cbiAgICAgICAgdGhpcy54IC09IHM7XG4gICAgICAgIHRoaXMueSAtPSBzO1xuICAgICAgICB0aGlzLnogLT0gcztcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBzdWJWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7XG5cbiAgICAgICAgdGhpcy54ID0gYS54IC0gYi54O1xuICAgICAgICB0aGlzLnkgPSBhLnkgLSBiLnk7XG4gICAgICAgIHRoaXMueiA9IGEueiAtIGIuejtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKCB2LCB3ICkge1xuXG4gICAgICAgIGlmICggdyAhPT0gdW5kZWZpbmVkICkge1xuXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLicgKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm11bHRpcGx5VmVjdG9ycyggdiwgdyApO1xuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnggKj0gdi54O1xuICAgICAgICB0aGlzLnkgKj0gdi55O1xuICAgICAgICB0aGlzLnogKj0gdi56O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIG11bHRpcGx5U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHtcblxuICAgICAgICB0aGlzLnggKj0gc2NhbGFyO1xuICAgICAgICB0aGlzLnkgKj0gc2NhbGFyO1xuICAgICAgICB0aGlzLnogKj0gc2NhbGFyO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIG11bHRpcGx5VmVjdG9yczogZnVuY3Rpb24gKCBhLCBiICkge1xuXG4gICAgICAgIHRoaXMueCA9IGEueCAqIGIueDtcbiAgICAgICAgdGhpcy55ID0gYS55ICogYi55O1xuICAgICAgICB0aGlzLnogPSBhLnogKiBiLno7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgYXBwbHlNYXRyaXgzOiBmdW5jdGlvbiAoIG0gKSB7XG5cbiAgICAgICAgdmFyIHggPSB0aGlzLng7XG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xuICAgICAgICB2YXIgeiA9IHRoaXMuejtcblxuICAgICAgICB2YXIgZSA9IG0uZWxlbWVudHM7XG5cbiAgICAgICAgdGhpcy54ID0gZVsgMCBdICogeCArIGVbIDMgXSAqIHkgKyBlWyA2IF0gKiB6O1xuICAgICAgICB0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDcgXSAqIHo7XG4gICAgICAgIHRoaXMueiA9IGVbIDIgXSAqIHggKyBlWyA1IF0gKiB5ICsgZVsgOCBdICogejtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBhcHBseU1hdHJpeDQ6IGZ1bmN0aW9uICggbSApIHtcblxuICAgICAgICAvLyBpbnB1dDogVEhSRUUuTWF0cml4NCBhZmZpbmUgbWF0cml4XG5cbiAgICAgICAgdmFyIHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7XG5cbiAgICAgICAgdmFyIGUgPSBtLmVsZW1lbnRzO1xuXG4gICAgICAgIHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgOCBdICAqIHogKyBlWyAxMiBdO1xuICAgICAgICB0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDkgXSAgKiB6ICsgZVsgMTMgXTtcbiAgICAgICAgdGhpcy56ID0gZVsgMiBdICogeCArIGVbIDYgXSAqIHkgKyBlWyAxMCBdICogeiArIGVbIDE0IF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgYXBwbHlQcm9qZWN0aW9uOiBmdW5jdGlvbiAoIG0gKSB7XG5cbiAgICAgICAgLy8gaW5wdXQ6IFRIUkVFLk1hdHJpeDQgcHJvamVjdGlvbiBtYXRyaXhcblxuICAgICAgICB2YXIgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMuejtcblxuICAgICAgICB2YXIgZSA9IG0uZWxlbWVudHM7XG4gICAgICAgIHZhciBkID0gMSAvICggZVsgMyBdICogeCArIGVbIDcgXSAqIHkgKyBlWyAxMSBdICogeiArIGVbIDE1IF0gKTsgLy8gcGVyc3BlY3RpdmUgZGl2aWRlXG5cbiAgICAgICAgdGhpcy54ID0gKCBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAgKiB6ICsgZVsgMTIgXSApICogZDtcbiAgICAgICAgdGhpcy55ID0gKCBlWyAxIF0gKiB4ICsgZVsgNSBdICogeSArIGVbIDkgXSAgKiB6ICsgZVsgMTMgXSApICogZDtcbiAgICAgICAgdGhpcy56ID0gKCBlWyAyIF0gKiB4ICsgZVsgNiBdICogeSArIGVbIDEwIF0gKiB6ICsgZVsgMTQgXSApICogZDtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBhcHBseVF1YXRlcm5pb246IGZ1bmN0aW9uICggcSApIHtcblxuICAgICAgICB2YXIgeCA9IHRoaXMueDtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnk7XG4gICAgICAgIHZhciB6ID0gdGhpcy56O1xuXG4gICAgICAgIHZhciBxeCA9IHEueDtcbiAgICAgICAgdmFyIHF5ID0gcS55O1xuICAgICAgICB2YXIgcXogPSBxLno7XG4gICAgICAgIHZhciBxdyA9IHEudztcblxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxuXG4gICAgICAgIHZhciBpeCA9ICBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gICAgICAgIHZhciBpeSA9ICBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XG4gICAgICAgIHZhciBpeiA9ICBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG4gICAgICAgIHZhciBpdyA9IC0gcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuXG4gICAgICAgIC8vIGNhbGN1bGF0ZSByZXN1bHQgKiBpbnZlcnNlIHF1YXRcblxuICAgICAgICB0aGlzLnggPSBpeCAqIHF3ICsgaXcgKiAtIHF4ICsgaXkgKiAtIHF6IC0gaXogKiAtIHF5O1xuICAgICAgICB0aGlzLnkgPSBpeSAqIHF3ICsgaXcgKiAtIHF5ICsgaXogKiAtIHF4IC0gaXggKiAtIHF6O1xuICAgICAgICB0aGlzLnogPSBpeiAqIHF3ICsgaXcgKiAtIHF6ICsgaXggKiAtIHF5IC0gaXkgKiAtIHF4O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHRyYW5zZm9ybURpcmVjdGlvbjogZnVuY3Rpb24gKCBtICkge1xuXG4gICAgICAgIC8vIGlucHV0OiBUSFJFRS5NYXRyaXg0IGFmZmluZSBtYXRyaXhcbiAgICAgICAgLy8gdmVjdG9yIGludGVycHJldGVkIGFzIGEgZGlyZWN0aW9uXG5cbiAgICAgICAgdmFyIHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7XG5cbiAgICAgICAgdmFyIGUgPSBtLmVsZW1lbnRzO1xuXG4gICAgICAgIHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyA0IF0gKiB5ICsgZVsgOCBdICAqIHo7XG4gICAgICAgIHRoaXMueSA9IGVbIDEgXSAqIHggKyBlWyA1IF0gKiB5ICsgZVsgOSBdICAqIHo7XG4gICAgICAgIHRoaXMueiA9IGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHo7XG5cbiAgICAgICAgdGhpcy5ub3JtYWxpemUoKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBkaXZpZGU6IGZ1bmN0aW9uICggdiApIHtcblxuICAgICAgICB0aGlzLnggLz0gdi54O1xuICAgICAgICB0aGlzLnkgLz0gdi55O1xuICAgICAgICB0aGlzLnogLz0gdi56O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGRpdmlkZVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7XG5cbiAgICAgICAgaWYgKCBzY2FsYXIgIT09IDAgKSB7XG5cbiAgICAgICAgICAgIHZhciBpbnZTY2FsYXIgPSAxIC8gc2NhbGFyO1xuXG4gICAgICAgICAgICB0aGlzLnggKj0gaW52U2NhbGFyO1xuICAgICAgICAgICAgdGhpcy55ICo9IGludlNjYWxhcjtcbiAgICAgICAgICAgIHRoaXMueiAqPSBpbnZTY2FsYXI7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdGhpcy54ID0gMDtcbiAgICAgICAgICAgIHRoaXMueSA9IDA7XG4gICAgICAgICAgICB0aGlzLnogPSAwO1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBtaW46IGZ1bmN0aW9uICggdiApIHtcblxuICAgICAgICBpZiAoIHRoaXMueCA+IHYueCApIHtcblxuICAgICAgICAgICAgdGhpcy54ID0gdi54O1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMueSA+IHYueSApIHtcblxuICAgICAgICAgICAgdGhpcy55ID0gdi55O1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMueiA+IHYueiApIHtcblxuICAgICAgICAgICAgdGhpcy56ID0gdi56O1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBtYXg6IGZ1bmN0aW9uICggdiApIHtcblxuICAgICAgICBpZiAoIHRoaXMueCA8IHYueCApIHtcblxuICAgICAgICAgICAgdGhpcy54ID0gdi54O1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMueSA8IHYueSApIHtcblxuICAgICAgICAgICAgdGhpcy55ID0gdi55O1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMueiA8IHYueiApIHtcblxuICAgICAgICAgICAgdGhpcy56ID0gdi56O1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBjbGFtcDogZnVuY3Rpb24gKCBtaW4sIG1heCApIHtcblxuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgbWluIDwgbWF4LCBpZiB0aGlzIGFzc3VtcHRpb24gaXNuJ3QgdHJ1ZSBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseVxuXG4gICAgICAgIGlmICggdGhpcy54IDwgbWluLnggKSB7XG5cbiAgICAgICAgICAgIHRoaXMueCA9IG1pbi54O1xuXG4gICAgICAgIH0gZWxzZSBpZiAoIHRoaXMueCA+IG1heC54ICkge1xuXG4gICAgICAgICAgICB0aGlzLnggPSBtYXgueDtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCB0aGlzLnkgPCBtaW4ueSApIHtcblxuICAgICAgICAgICAgdGhpcy55ID0gbWluLnk7XG5cbiAgICAgICAgfSBlbHNlIGlmICggdGhpcy55ID4gbWF4LnkgKSB7XG5cbiAgICAgICAgICAgIHRoaXMueSA9IG1heC55O1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMueiA8IG1pbi56ICkge1xuXG4gICAgICAgICAgICB0aGlzLnogPSBtaW4uejtcblxuICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLnogPiBtYXgueiApIHtcblxuICAgICAgICAgICAgdGhpcy56ID0gbWF4Lno7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGNsYW1wU2NhbGFyOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIG1pbiwgbWF4O1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBjbGFtcFNjYWxhciggbWluVmFsLCBtYXhWYWwgKSB7XG5cbiAgICAgICAgICAgIGlmICggbWluID09PSB1bmRlZmluZWQgKSB7XG5cbiAgICAgICAgICAgICAgICBtaW4gPSBuZXcgTG12VmVjdG9yMygpO1xuICAgICAgICAgICAgICAgIG1heCA9IG5ldyBMbXZWZWN0b3IzKCk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWluLnNldCggbWluVmFsLCBtaW5WYWwsIG1pblZhbCApO1xuICAgICAgICAgICAgbWF4LnNldCggbWF4VmFsLCBtYXhWYWwsIG1heFZhbCApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbGFtcCggbWluLCBtYXggKTtcblxuICAgICAgICB9O1xuXG4gICAgfSgpLFxuXG4gICAgZmxvb3I6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB0aGlzLnggPSBNYXRoLmZsb29yKCB0aGlzLnggKTtcbiAgICAgICAgdGhpcy55ID0gTWF0aC5mbG9vciggdGhpcy55ICk7XG4gICAgICAgIHRoaXMueiA9IE1hdGguZmxvb3IoIHRoaXMueiApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGNlaWw6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB0aGlzLnggPSBNYXRoLmNlaWwoIHRoaXMueCApO1xuICAgICAgICB0aGlzLnkgPSBNYXRoLmNlaWwoIHRoaXMueSApO1xuICAgICAgICB0aGlzLnogPSBNYXRoLmNlaWwoIHRoaXMueiApO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHJvdW5kOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdGhpcy54ID0gTWF0aC5yb3VuZCggdGhpcy54ICk7XG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQoIHRoaXMueSApO1xuICAgICAgICB0aGlzLnogPSBNYXRoLnJvdW5kKCB0aGlzLnogKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICByb3VuZFRvWmVybzogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHRoaXMueCA9ICggdGhpcy54IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnggKSA6IE1hdGguZmxvb3IoIHRoaXMueCApO1xuICAgICAgICB0aGlzLnkgPSAoIHRoaXMueSA8IDAgKSA/IE1hdGguY2VpbCggdGhpcy55ICkgOiBNYXRoLmZsb29yKCB0aGlzLnkgKTtcbiAgICAgICAgdGhpcy56ID0gKCB0aGlzLnogPCAwICkgPyBNYXRoLmNlaWwoIHRoaXMueiApIDogTWF0aC5mbG9vciggdGhpcy56ICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgbmVnYXRlOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdGhpcy54ID0gLSB0aGlzLng7XG4gICAgICAgIHRoaXMueSA9IC0gdGhpcy55O1xuICAgICAgICB0aGlzLnogPSAtIHRoaXMuejtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBkb3Q6IGZ1bmN0aW9uICggdiApIHtcblxuICAgICAgICByZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55ICsgdGhpcy56ICogdi56O1xuXG4gICAgfSxcblxuICAgIGxlbmd0aFNxOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMuejtcblxuICAgIH0sXG5cbiAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnogKTtcblxuICAgIH0sXG5cbiAgICBsZW5ndGhNYW5oYXR0YW46IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICByZXR1cm4gTWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApICsgTWF0aC5hYnMoIHRoaXMueiApO1xuXG4gICAgfSxcblxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRpdmlkZVNjYWxhciggdGhpcy5sZW5ndGgoKSApO1xuXG4gICAgfSxcblxuICAgIHNldExlbmd0aDogZnVuY3Rpb24gKCBsICkge1xuXG4gICAgICAgIHZhciBvbGRMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuXG4gICAgICAgIGlmICggb2xkTGVuZ3RoICE9PSAwICYmIGwgIT09IG9sZExlbmd0aCAgKSB7XG5cbiAgICAgICAgICAgIHRoaXMubXVsdGlwbHlTY2FsYXIoIGwgLyBvbGRMZW5ndGggKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgbGVycDogZnVuY3Rpb24gKCB2LCBhbHBoYSApIHtcblxuICAgICAgICB0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhO1xuICAgICAgICB0aGlzLnkgKz0gKCB2LnkgLSB0aGlzLnkgKSAqIGFscGhhO1xuICAgICAgICB0aGlzLnogKz0gKCB2LnogLSB0aGlzLnogKSAqIGFscGhhO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIGxlcnBWZWN0b3JzOiBmdW5jdGlvbiAoIHYxLCB2MiwgYWxwaGEgKSB7XG5cbiAgICAgICAgdGhpcy5zdWJWZWN0b3JzKCB2MiwgdjEgKS5tdWx0aXBseVNjYWxhciggYWxwaGEgKS5hZGQoIHYxICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgY3Jvc3M6IGZ1bmN0aW9uICggdiwgdyApIHtcblxuICAgICAgICBpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuICAgICAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnMoIHYsIHcgKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHggPSB0aGlzLngsIHkgPSB0aGlzLnksIHogPSB0aGlzLno7XG5cbiAgICAgICAgdGhpcy54ID0geSAqIHYueiAtIHogKiB2Lnk7XG4gICAgICAgIHRoaXMueSA9IHogKiB2LnggLSB4ICogdi56O1xuICAgICAgICB0aGlzLnogPSB4ICogdi55IC0geSAqIHYueDtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBjcm9zc1ZlY3RvcnM6IGZ1bmN0aW9uICggYSwgYiApIHtcblxuICAgICAgICB2YXIgYXggPSBhLngsIGF5ID0gYS55LCBheiA9IGEuejtcbiAgICAgICAgdmFyIGJ4ID0gYi54LCBieSA9IGIueSwgYnogPSBiLno7XG5cbiAgICAgICAgdGhpcy54ID0gYXkgKiBieiAtIGF6ICogYnk7XG4gICAgICAgIHRoaXMueSA9IGF6ICogYnggLSBheCAqIGJ6O1xuICAgICAgICB0aGlzLnogPSBheCAqIGJ5IC0gYXkgKiBieDtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBwcm9qZWN0T25WZWN0b3I6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgdjEsIGRvdDtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcHJvamVjdE9uVmVjdG9yKCB2ZWN0b3IgKSB7XG5cbiAgICAgICAgICAgIGlmICggdjEgPT09IHVuZGVmaW5lZCApIHYxID0gbmV3IExtdlZlY3RvcjMoKTtcblxuICAgICAgICAgICAgdjEuY29weSggdmVjdG9yICkubm9ybWFsaXplKCk7XG5cbiAgICAgICAgICAgIGRvdCA9IHRoaXMuZG90KCB2MSApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3B5KCB2MSApLm11bHRpcGx5U2NhbGFyKCBkb3QgKTtcblxuICAgICAgICB9O1xuXG4gICAgfSgpLFxuXG4gICAgcHJvamVjdE9uUGxhbmU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgdjE7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHByb2plY3RPblBsYW5lKCBwbGFuZU5vcm1hbCApIHtcblxuICAgICAgICAgICAgaWYgKCB2MSA9PT0gdW5kZWZpbmVkICkgdjEgPSBuZXcgTG12VmVjdG9yMygpO1xuXG4gICAgICAgICAgICB2MS5jb3B5KCB0aGlzICkucHJvamVjdE9uVmVjdG9yKCBwbGFuZU5vcm1hbCApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdWIoIHYxICk7XG5cbiAgICAgICAgfTtcblxuICAgIH0oKSxcblxuICAgIHJlZmxlY3Q6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyByZWZsZWN0IGluY2lkZW50IHZlY3RvciBvZmYgcGxhbmUgb3J0aG9nb25hbCB0byBub3JtYWxcbiAgICAgICAgLy8gbm9ybWFsIGlzIGFzc3VtZWQgdG8gaGF2ZSB1bml0IGxlbmd0aFxuXG4gICAgICAgIHZhciB2MTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcmVmbGVjdCggbm9ybWFsICkge1xuXG4gICAgICAgICAgICBpZiAoIHYxID09PSB1bmRlZmluZWQgKSB2MSA9IG5ldyBMbXZWZWN0b3IzKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1YiggdjEuY29weSggbm9ybWFsICkubXVsdGlwbHlTY2FsYXIoIDIgKiB0aGlzLmRvdCggbm9ybWFsICkgKSApO1xuXG4gICAgICAgIH07XG5cbiAgICB9KCksXG5cbiAgICBkaXN0YW5jZVRvOiBmdW5jdGlvbiAoIHYgKSB7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCggdGhpcy5kaXN0YW5jZVRvU3F1YXJlZCggdiApICk7XG5cbiAgICB9LFxuXG4gICAgZGlzdGFuY2VUb1NxdWFyZWQ6IGZ1bmN0aW9uICggdiApIHtcblxuICAgICAgICB2YXIgZHggPSB0aGlzLnggLSB2Lng7XG4gICAgICAgIHZhciBkeSA9IHRoaXMueSAtIHYueTtcbiAgICAgICAgdmFyIGR6ID0gdGhpcy56IC0gdi56O1xuXG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHo7XG5cbiAgICB9LFxuXG4gICAgc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg6IGZ1bmN0aW9uICggbSwgb3JkZXIgKSB7XG5cbiAgICAgICAgY29uc29sZS5lcnJvciggJ1RIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLicgKTtcblxuICAgIH0sXG5cbiAgICBzZXRFdWxlckZyb21RdWF0ZXJuaW9uOiBmdW5jdGlvbiAoIHEsIG9yZGVyICkge1xuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoICdUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuJyApO1xuXG4gICAgfSxcblxuICAgIGdldFBvc2l0aW9uRnJvbU1hdHJpeDogZnVuY3Rpb24gKCBtICkge1xuXG4gICAgICAgIGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4nICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtICk7XG5cbiAgICB9LFxuXG4gICAgZ2V0U2NhbGVGcm9tTWF0cml4OiBmdW5jdGlvbiAoIG0gKSB7XG5cbiAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLicgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUoIG0gKTtcblxuICAgIH0sXG5cbiAgICBnZXRDb2x1bW5Gcm9tTWF0cml4OiBmdW5jdGlvbiAoIGluZGV4LCBtYXRyaXggKSB7XG5cbiAgICAgICAgY29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuJyApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oIGluZGV4LCBtYXRyaXggKTtcblxuICAgIH0sXG5cbiAgICBzZXRGcm9tTWF0cml4UG9zaXRpb246IGZ1bmN0aW9uICggbSApIHtcblxuICAgICAgICB0aGlzLnggPSBtLmVsZW1lbnRzWyAxMiBdO1xuICAgICAgICB0aGlzLnkgPSBtLmVsZW1lbnRzWyAxMyBdO1xuICAgICAgICB0aGlzLnogPSBtLmVsZW1lbnRzWyAxNCBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgfSxcblxuICAgIHNldEZyb21NYXRyaXhTY2FsZTogZnVuY3Rpb24gKCBtICkge1xuXG4gICAgICAgIHZhciBzeCA9IHRoaXMuc2V0KCBtLmVsZW1lbnRzWyAwIF0sIG0uZWxlbWVudHNbIDEgXSwgbS5lbGVtZW50c1sgMiBdICkubGVuZ3RoKCk7XG4gICAgICAgIHZhciBzeSA9IHRoaXMuc2V0KCBtLmVsZW1lbnRzWyA0IF0sIG0uZWxlbWVudHNbIDUgXSwgbS5lbGVtZW50c1sgNiBdICkubGVuZ3RoKCk7XG4gICAgICAgIHZhciBzeiA9IHRoaXMuc2V0KCBtLmVsZW1lbnRzWyA4IF0sIG0uZWxlbWVudHNbIDkgXSwgbS5lbGVtZW50c1sgMTAgXSApLmxlbmd0aCgpO1xuXG4gICAgICAgIHRoaXMueCA9IHN4O1xuICAgICAgICB0aGlzLnkgPSBzeTtcbiAgICAgICAgdGhpcy56ID0gc3o7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9LFxuXG4gICAgc2V0RnJvbU1hdHJpeENvbHVtbjogZnVuY3Rpb24gKCBpbmRleCwgbWF0cml4ICkge1xuXG4gICAgICAgIHZhciBvZmZzZXQgPSBpbmRleCAqIDQ7XG5cbiAgICAgICAgdmFyIG1lID0gbWF0cml4LmVsZW1lbnRzO1xuXG4gICAgICAgIHRoaXMueCA9IG1lWyBvZmZzZXQgXTtcbiAgICAgICAgdGhpcy55ID0gbWVbIG9mZnNldCArIDEgXTtcbiAgICAgICAgdGhpcy56ID0gbWVbIG9mZnNldCArIDIgXTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICBlcXVhbHM6IGZ1bmN0aW9uICggdiApIHtcblxuICAgICAgICByZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMueSApICYmICggdi56ID09PSB0aGlzLnogKSApO1xuXG4gICAgfSxcblxuICAgIGZyb21BcnJheTogZnVuY3Rpb24gKCBhcnJheSwgb2Zmc2V0ICkge1xuXG4gICAgICAgIGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwO1xuXG4gICAgICAgIHRoaXMueCA9IGFycmF5WyBvZmZzZXQgXTtcbiAgICAgICAgdGhpcy55ID0gYXJyYXlbIG9mZnNldCArIDEgXTtcbiAgICAgICAgdGhpcy56ID0gYXJyYXlbIG9mZnNldCArIDIgXTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH0sXG5cbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7XG5cbiAgICAgICAgaWYgKCBhcnJheSA9PT0gdW5kZWZpbmVkICkgYXJyYXkgPSBbXTtcbiAgICAgICAgaWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7XG5cbiAgICAgICAgYXJyYXlbIG9mZnNldCBdID0gdGhpcy54O1xuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGhpcy55O1xuICAgICAgICBhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy56O1xuXG4gICAgICAgIHJldHVybiBhcnJheTtcblxuICAgIH0sXG5cbiAgICBmcm9tQXR0cmlidXRlOiBmdW5jdGlvbiAoIGF0dHJpYnV0ZSwgaW5kZXgsIG9mZnNldCApIHtcblxuICAgICAgICBpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDtcblxuICAgICAgICBpbmRleCA9IGluZGV4ICogYXR0cmlidXRlLml0ZW1TaXplICsgb2Zmc2V0O1xuXG4gICAgICAgIHRoaXMueCA9IGF0dHJpYnV0ZS5hcnJheVsgaW5kZXggXTtcbiAgICAgICAgdGhpcy55ID0gYXR0cmlidXRlLmFycmF5WyBpbmRleCArIDEgXTtcbiAgICAgICAgdGhpcy56ID0gYXR0cmlidXRlLmFycmF5WyBpbmRleCArIDIgXTtcblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH1cblxufTtcbiJdLCJuYW1lcyI6WyJMbXZWZWN0b3IzIiwieCIsInkiLCJ6IiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJzZXQiLCJzZXRYIiwic2V0WSIsInNldFoiLCJzZXRDb21wb25lbnQiLCJpbmRleCIsInZhbHVlIiwiRXJyb3IiLCJnZXRDb21wb25lbnQiLCJjbG9uZSIsImNvcHkiLCJ2IiwiYWRkIiwidyIsInVuZGVmaW5lZCIsImNvbnNvbGUiLCJ3YXJuIiwiYWRkVmVjdG9ycyIsImFkZFNjYWxhciIsInMiLCJhIiwiYiIsImFkZFNjYWxlZFZlY3RvciIsInN1YiIsInN1YlZlY3RvcnMiLCJzdWJTY2FsYXIiLCJtdWx0aXBseSIsIm11bHRpcGx5VmVjdG9ycyIsIm11bHRpcGx5U2NhbGFyIiwic2NhbGFyIiwiYXBwbHlNYXRyaXgzIiwibSIsImUiLCJlbGVtZW50cyIsImFwcGx5TWF0cml4NCIsImFwcGx5UHJvamVjdGlvbiIsImQiLCJhcHBseVF1YXRlcm5pb24iLCJxIiwicXgiLCJxeSIsInF6IiwicXciLCJpeCIsIml5IiwiaXoiLCJpdyIsInRyYW5zZm9ybURpcmVjdGlvbiIsIm5vcm1hbGl6ZSIsImRpdmlkZSIsImRpdmlkZVNjYWxhciIsImludlNjYWxhciIsIm1pbiIsIm1heCIsImNsYW1wIiwiY2xhbXBTY2FsYXIiLCJtaW5WYWwiLCJtYXhWYWwiLCJmbG9vciIsIk1hdGgiLCJjZWlsIiwicm91bmQiLCJyb3VuZFRvWmVybyIsIm5lZ2F0ZSIsImRvdCIsImxlbmd0aFNxIiwibGVuZ3RoIiwic3FydCIsImxlbmd0aE1hbmhhdHRhbiIsImFicyIsInNldExlbmd0aCIsImwiLCJvbGRMZW5ndGgiLCJsZXJwIiwiYWxwaGEiLCJsZXJwVmVjdG9ycyIsInYxIiwidjIiLCJjcm9zcyIsImNyb3NzVmVjdG9ycyIsImF4IiwiYXkiLCJheiIsImJ4IiwiYnkiLCJieiIsInByb2plY3RPblZlY3RvciIsInZlY3RvciIsInByb2plY3RPblBsYW5lIiwicGxhbmVOb3JtYWwiLCJyZWZsZWN0Iiwibm9ybWFsIiwiZGlzdGFuY2VUbyIsImRpc3RhbmNlVG9TcXVhcmVkIiwiZHgiLCJkeSIsImR6Iiwic2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgiLCJvcmRlciIsImVycm9yIiwic2V0RXVsZXJGcm9tUXVhdGVybmlvbiIsImdldFBvc2l0aW9uRnJvbU1hdHJpeCIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsImdldFNjYWxlRnJvbU1hdHJpeCIsInNldEZyb21NYXRyaXhTY2FsZSIsImdldENvbHVtbkZyb21NYXRyaXgiLCJtYXRyaXgiLCJzZXRGcm9tTWF0cml4Q29sdW1uIiwic3giLCJzeSIsInN6Iiwib2Zmc2V0IiwibWUiLCJlcXVhbHMiLCJmcm9tQXJyYXkiLCJhcnJheSIsInRvQXJyYXkiLCJmcm9tQXR0cmlidXRlIiwiYXR0cmlidXRlIiwiaXRlbVNpemUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/wgs/scene/LmvVector3.js\n"); /***/ }), /***/ "./src/wgs/scene/MeshFlags.js": /*!************************************!*\ !*** ./src/wgs/scene/MeshFlags.js ***! \************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MeshFlags: () => (/* binding */ MeshFlags)\n/* harmony export */ });\nlet MeshFlags = {\n // FragmentList flags\n //visibility/highlight bitmask flags\n\n //Byte 0\n\n //NOTE: This is confusing and it should be fixed, but when the MESH_VISIBLE bit is off, the mesh\n //will draw in ghosted mode. To completely skip drawing a mesh, set the HIDE flag.\n MESH_VISIBLE: 1,\n MESH_HIGHLIGHTED: 2,\n MESH_HIDE: 4,\n MESH_ISLINE: 8,\n MESH_MOVED: 0x10, // indicates if an animation matrix is set\n MESH_RENDERFLAG: 0x20,\n MESH_NOTLOADED: 0x40, // the mesh has not yet loaded or has been unloaded\n MESH_ISPOINT: 0x80, // indicates that the mesh is vertex-only\n\n //Byte 1\n //TODO: Two bits are enough to hold ISLINE, ISWIDELINE and ISPOINT, we don't need to waste three,\n //but there is no point to optimizing this as long as the required flags go over one byte.\n MESH_ISWIDELINE: 0x100, // indicates that the mesh is wide line\n MESH_TRAVERSED: 0x200, // only used for paging: drawn fragments are tagged and then skipped by forEach() until the flag is being reset (e.g. on scene/camera changes)\n MESH_DRAWN: 0x400 // only used for paging: drawn fragments are tagged. At the end of all render passes flag is copied to MESH_TRAVERSED.\n // The Memory Limited Extension uses the high order three bits of this byte\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvd2dzL3NjZW5lL01lc2hGbGFncy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8sSUFBSUEsU0FBUyxHQUFHO0VBQ2Y7RUFDQTs7RUFFQTs7RUFFQTtFQUNBO0VBQ0FDLFlBQVksRUFBVSxDQUFDO0VBQ3ZCQyxnQkFBZ0IsRUFBTSxDQUFDO0VBQ3ZCQyxTQUFTLEVBQWEsQ0FBQztFQUN2QkMsV0FBVyxFQUFXLENBQUM7RUFDdkJDLFVBQVUsRUFBUyxJQUFJLEVBQUU7RUFDekJDLGVBQWUsRUFBSSxJQUFJO0VBQ3ZCQyxjQUFjLEVBQUssSUFBSSxFQUFFO0VBQ3pCQyxZQUFZLEVBQU8sSUFBSSxFQUFFOztFQUV6QjtFQUNBO0VBQ0E7RUFDQUMsZUFBZSxFQUFHLEtBQUssRUFBRTtFQUN6QkMsY0FBYyxFQUFJLEtBQUssRUFBRTtFQUN6QkMsVUFBVSxFQUFRLEtBQUssQ0FBRTtFQUN6QjtBQUNKLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9zcmMvd2dzL3NjZW5lL01lc2hGbGFncy5qcz82ODFhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBsZXQgTWVzaEZsYWdzID0ge1xyXG4gICAgICAgIC8vIEZyYWdtZW50TGlzdCBmbGFnc1xyXG4gICAgICAgIC8vdmlzaWJpbGl0eS9oaWdobGlnaHQgYml0bWFzayBmbGFnc1xyXG5cclxuICAgICAgICAvL0J5dGUgMFxyXG5cclxuICAgICAgICAvL05PVEU6IFRoaXMgaXMgY29uZnVzaW5nIGFuZCBpdCBzaG91bGQgYmUgZml4ZWQsIGJ1dCB3aGVuIHRoZSBNRVNIX1ZJU0lCTEUgYml0IGlzIG9mZiwgdGhlIG1lc2hcclxuICAgICAgICAvL3dpbGwgZHJhdyBpbiBnaG9zdGVkIG1vZGUuIFRvIGNvbXBsZXRlbHkgc2tpcCBkcmF3aW5nIGEgbWVzaCwgc2V0IHRoZSBISURFIGZsYWcuXHJcbiAgICAgICAgTUVTSF9WSVNJQkxFOiAgICAgICAgIDEsXHJcbiAgICAgICAgTUVTSF9ISUdITElHSFRFRDogICAgIDIsXHJcbiAgICAgICAgTUVTSF9ISURFOiAgICAgICAgICAgIDQsXHJcbiAgICAgICAgTUVTSF9JU0xJTkU6ICAgICAgICAgIDgsXHJcbiAgICAgICAgTUVTSF9NT1ZFRDogICAgICAgIDB4MTAsIC8vIGluZGljYXRlcyBpZiBhbiBhbmltYXRpb24gbWF0cml4IGlzIHNldFxyXG4gICAgICAgIE1FU0hfUkVOREVSRkxBRzogICAweDIwLFxyXG4gICAgICAgIE1FU0hfTk9UTE9BREVEOiAgICAweDQwLCAvLyB0aGUgbWVzaCBoYXMgbm90IHlldCBsb2FkZWQgb3IgaGFzIGJlZW4gdW5sb2FkZWRcclxuICAgICAgICBNRVNIX0lTUE9JTlQ6ICAgICAgMHg4MCwgLy8gaW5kaWNhdGVzIHRoYXQgdGhlIG1lc2ggaXMgdmVydGV4LW9ubHlcclxuXHJcbiAgICAgICAgLy9CeXRlIDFcclxuICAgICAgICAvL1RPRE86IFR3byBiaXRzIGFyZSBlbm91Z2ggdG8gaG9sZCBJU0xJTkUsIElTV0lERUxJTkUgYW5kIElTUE9JTlQsIHdlIGRvbid0IG5lZWQgdG8gd2FzdGUgdGhyZWUsXHJcbiAgICAgICAgLy9idXQgdGhlcmUgaXMgbm8gcG9pbnQgdG8gb3B0aW1pemluZyB0aGlzIGFzIGxvbmcgYXMgdGhlIHJlcXVpcmVkIGZsYWdzIGdvIG92ZXIgb25lIGJ5dGUuXHJcbiAgICAgICAgTUVTSF9JU1dJREVMSU5FOiAgMHgxMDAsIC8vIGluZGljYXRlcyB0aGF0IHRoZSBtZXNoIGlzIHdpZGUgbGluZVxyXG4gICAgICAgIE1FU0hfVFJBVkVSU0VEOiAgIDB4MjAwLCAvLyBvbmx5IHVzZWQgZm9yIHBhZ2luZzogZHJhd24gZnJhZ21lbnRzIGFyZSB0YWdnZWQgYW5kIHRoZW4gc2tpcHBlZCBieSBmb3JFYWNoKCkgdW50aWwgdGhlIGZsYWcgaXMgYmVpbmcgcmVzZXQgKGUuZy4gb24gc2NlbmUvY2FtZXJhIGNoYW5nZXMpXHJcbiAgICAgICAgTUVTSF9EUkFXTjogICAgICAgMHg0MDAsIC8vIG9ubHkgdXNlZCBmb3IgcGFnaW5nOiBkcmF3biBmcmFnbWVudHMgYXJlIHRhZ2dlZC4gQXQgdGhlIGVuZCBvZiBhbGwgcmVuZGVyIHBhc3NlcyBmbGFnIGlzIGNvcGllZCB0byBNRVNIX1RSQVZFUlNFRC5cclxuICAgICAgICAvLyBUaGUgTWVtb3J5IExpbWl0ZWQgRXh0ZW5zaW9uIHVzZXMgdGhlIGhpZ2ggb3JkZXIgdGhyZWUgYml0cyBvZiB0aGlzIGJ5dGVcclxuICAgIH07XHJcblxyXG4iXSwibmFtZXMiOlsiTWVzaEZsYWdzIiwiTUVTSF9WSVNJQkxFIiwiTUVTSF9ISUdITElHSFRFRCIsIk1FU0hfSElERSIsIk1FU0hfSVNMSU5FIiwiTUVTSF9NT1ZFRCIsIk1FU0hfUkVOREVSRkxBRyIsIk1FU0hfTk9UTE9BREVEIiwiTUVTSF9JU1BPSU5UIiwiTUVTSF9JU1dJREVMSU5FIiwiTUVTSF9UUkFWRVJTRUQiLCJNRVNIX0RSQVdOIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/wgs/scene/MeshFlags.js\n "); /***/ }), /***/ "./src/wgs/scene/VertexEnumerator.js ": /*!*******************************************!*\ !*** ./src/wgs/scene/VertexEnumerator.js ***! \*******************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict "; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VertexEnumerator: ()=> (/* binding */ VertexEnumerator),\n/* harmony export */ enumMeshEdges: () => (/* binding */ enumMeshEdges),\n/* harmony export */ enumMeshIndices: () => (/* binding */ enumMeshIndices),\n/* harmony export */ enumMeshLines: () => (/* binding */ enumMeshLines),\n/* harmony export */ enumMeshTriangles: () => (/* binding */ enumMeshTriangles),\n/* harmony export */ enumMeshVertices: () => (/* binding */ enumMeshVertices),\n/* harmony export */ getIndicesCount: () => (/* binding */ getIndicesCount),\n/* harmony export */ getVertexCount: () => (/* binding */ getVertexCount)\n/* harmony export */ });\n/* harmony import */ var _LmvVector3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LmvVector3 */ \"./src/wgs/scene/LmvVector3.js\");\n\n\n//Utility logic for listing vertex data from LmvBufferGeometry interleaved buffers\n\n\n\n//These functions work for both workers side interleaved buffer structures\n//and main thread side LmvBufferGeometry instances. The difference in naming\n//if the index attribute on both sides is super annoying and should be cleaned up.\n\n\n/** Works for BufferGeometry as well as THREE.BufferGeometry. Supports interleaved and non-interleaved buffers.\n * @param {BufferGeometry|THREE.BufferGeometry} geom\n * @returns {number}\n */\nfunction getVertexCount(geom) {\n if (geom.vb) {\n // interleaved\n return geom.vb.length / geom.vbstride;\n }\n // no interleaved buffer. Return count from position attribute or 0\n return geom.attributes.position ? geom.attributes.position.array.length / 3 : 0;\n}\n\nfunction getIndicesCount(geometry) {\n\n const indices = getIndexBuffer(geometry);\n\n if (indices) {\n\n var groups = geometry.groups;\n\n if (!groups || groups.length === 0) {\n return indices.length;\n }\n\n let res = 0;\n\n for (var oi = 0, ol = groups.length; oi < ol; ++oi) {\n res +=g roups[oi].count;\n }\n\n return res;\n\n } else {\n return getVertexCount(geometry);\n }\n}\n\nvar _p, _n, _uv;\nvar _normalsMatrix;\n\n/**\n * @typedef {Object} PositionVBInfo\n * @property {Float32Array} positions - Vertex buffer containing position data\n * @property {number} poffset - The array buffer offset for position data\n * @property {number} stride - The array buffer stride for both positions and normals\n */\n\n/**\n * @typedef {Object} NormalVBInfo\n * @property {Float32Array} normals - Vertex buffer containing normal data\n * @property {number} noffset - The array buffer offset for normal data\n */\n\n/**\n * Gathers minimum info to traverse the positions stored in an array buffer\n * @param {BufferGeometry|MeshData} geometry\n * @returns {PositionVBInfo}\n */\nfunction extractVertexBufferPositionData(mdata) {\n const attributes=m data.attributes;\n let positions, stride, poffset;\n // Get the offset to positions in the buffer. Be careful, 2D buffers\n // don 't use the 'position ' attribute for positions. Reject those.\n if (mdata.vblayout) {\n if (!mdata.vblayout.position)\n return { positions: undefined, poffset: undefined };\n poffset = mdata.vblayout.position.offset;\n } else if (!attributes.position)\n return { positions: undefined, poffset: undefined };else\n {\n poffset = attributes.position.offset || 0;\n }\n positions = mdata.vb || attributes.position.array;\n stride = mdata.vb ? mdata.vbstride : 3;\n return { positions, stride, poffset };\n}\n\n/**\n * Gathers minimum info to traverse the normals stored in an interleaved array buffer\n * @param {BufferGeometry|MeshData} geometry\n * @returns {NormalVBInfo}\n */\nfunction extractVertexBufferNormalData(geometry) {\n const attributes = geometry.attributes;\n let noffset = 0;\n let noffsetFactor = 1;\n let normals = geometry.vb || attributes.normal && attributes.normal.array;\n let nattr = geometry.vblayout ? geometry.vblayout.normal : attributes.normal || null;\n\n if (nattr) {\n noffset = nattr.offset || 0;\n noffset *= noffsetFactor;\n } else {\n normals = null;\n }\n\n if (nattr && !nattr.array && (nattr.itemSize !== 3 || nattr.bytesPerItem !== 4)) {\n //console.log(\"Normals are packed, will be skipped from enumMeshTriangles. Use packNormals=false load option.\");\n normals = null;\n }\n return { normals, noffset };\n}\n\n/**\n * Extracts the indices array\n * @param {BufferGeometry|MeshData} geometry\n * @returns {Uint16Array|null|undefined}\n */\nfunction getIndexBuffer(geometry) {\n return geometry.ib || geometry.indices || (geometry.index ? geometry.index.array : null);\n}\n\nfunction enumMeshVertices(geometry, callback, matrix) {\n\n var attributes = geometry.attributes;\n\n if (!_p) {\n _p = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n _n = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n _uv = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n }\n\n if (matrix) {\n if (!_normalsMatrix)\n _normalsMatrix = new THREE.Matrix3();\n\n _normalsMatrix.getNormalMatrix(matrix);\n }\n\n const { positions, stride, poffset } = extractVertexBufferPositionData(geometry);\n const { normals, noffset } = extractVertexBufferNormalData(geometry);\n if (!positions) return; // No positions, what to do??\n\n //TODO: UV channel\n\n var vcount = getVertexCount(geometry);\n\n var pi = poffset;\n var ni = noffset;\n for (var i = 0; i < vcount; i++, pi += stride, ni += stride) {\n\n _p.set(positions[pi], positions[pi + 1], positions[pi + 2]);\n\n if (matrix)\n _p.applyMatrix4(matrix);\n\n if (normals) {\n _n.set(normals[ni], normals[ni + 1], normals[ni + 2]);\n\n if (matrix) {\n _n.applyMatrix3(_normalsMatrix);\n }\n }\n\n //TODO: UV channel\n\n callback(_p, normals ? _n : null, null /*, _uv*/, i);\n }\n}\n\nfunction enumMeshIndices(geometry, callback) {\n const indices = getIndexBuffer(geometry);\n\n if (indices) {\n\n let groups = geometry.groups;\n\n if (!groups || groups.length === 0) {\n groups = [{ start: 0, count: indices.length, index: 0 }];\n }\n\n for (let oi = 0, ol = groups.length; oi < ol; ++oi) {\n\n let start = groups[oi].start;\n let count = groups[oi].count;\n let index = groups[oi].index;\n\n for (let i = start, il = start + count; i < il; i += 3) {\n\n let a = index + indices[i];\n let b = index + indices[i + 1];\n let c = index + indices[i + 2];\n\n callback(a, b, c);\n }\n }\n } else {\n\n let vcount = getVertexCount(geometry);\n\n for (let i = 0; i < vcount; i++) {\n\n let a = 3 * i;\n let b = 3 * i + 1;\n let c = 3 * i + 2;\n\n callback(a, b, c);\n }\n }\n}\n\n\nvar vA, vB, vC, nA, nB, nC;\n\nfunction enumMeshTriangles(geometry, callback) {\n\n var a, b, c;\n\n if (!vA) {\n vA = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n vB = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n vC = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n\n nA = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n nB = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n nC = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n }\n\n const { positions, stride, poffset } = extractVertexBufferPositionData(geometry);\n const { normals, noffset } = extractVertexBufferNormalData(geometry);\n const indices = getIndexBuffer(geometry);\n if (!positions) return; // No positions, what to do??\n\n if (indices) {\n\n var groups = geometry.groups;\n\n if (!groups || groups.length === 0) {\n groups = [{ start: 0, count: indices.length, index: 0 }];\n }\n\n for (var oi = 0, ol = groups.length; oi < ol; ++oi) {\n\n var start = groups[oi].start;\n var count = groups[oi].count;\n var index = groups[oi].index;\n\n for (var i = start, il = start + count; i < il; i += 3) {\n\n a = index + indices[i];\n b = index + indices[i + 1];\n c = index + indices[i + 2];\n\n var pa = a * stride + poffset;\n var pb = b * stride + poffset;\n var pc = c * stride + poffset;\n\n vA.x = positions[pa];vA.y = positions[pa + 1];vA.z = positions[pa + 2];\n vB.x = positions[pb];vB.y = positions[pb + 1];vB.z = positions[pb + 2];\n vC.x = positions[pc];vC.y = positions[pc + 1];vC.z = positions[pc + 2];\n\n if (normals) {\n var na = a * stride + noffset;\n var nb = b * stride + noffset;\n var nc = c * stride + noffset;\n\n nA.x = normals[na];nA.y = normals[na + 1];nA.z = normals[na + 2];\n nB.x = normals[nb];nB.y = normals[nb + 1];nB.z = normals[nb + 2];\n nC.x = normals[nc];nC.y = normals[nc + 1];nC.z = normals[nc + 2];\n\n callback(vA, vB, vC, a, b, c, nA, nB, nC, i / 3);\n } else {\n callback(vA, vB, vC, a, b, c, null, null, null, i / 3);\n }\n\n\n }\n\n }\n\n } else {\n\n var vcount = getVertexCount(geometry);\n\n for (var i = 0; i < vcount; i += 3) {\n\n a = i;\n b = i + 1;\n c = i + 2;\n\n var pa = a * stride + poffset;\n var pb = b * stride + poffset;\n var pc = c * stride + poffset;\n\n vA.x = positions[pa];vA.y = positions[pa + 1];vA.z = positions[pa + 2];\n vB.x = positions[pb];vB.y = positions[pb + 1];vB.z = positions[pb + 2];\n vC.x = positions[pc];vC.y = positions[pc + 1];vC.z = positions[pc + 2];\n\n if (normals) {\n var na = a * stride + noffset;\n var nb = b * stride + noffset;\n var nc = c * stride + noffset;\n\n nA.x = normals[na];nA.y = normals[na + 1];nA.z = normals[na + 2];\n nB.x = normals[nb];nB.y = normals[nb + 1];nB.z = normals[nb + 2];\n nC.x = normals[nc];nC.y = normals[nc + 1];nC.z = normals[nc + 2];\n\n callback(vA, vB, vC, a, b, c, nA, nB, nC, i / 3);\n } else {\n callback(vA, vB, vC, a, b, c, null, null, null, i / 3);\n }\n }\n\n }\n}\n\n\nvar vP, vQ;\n\nfunction enumMeshLines(geometry, callback) {\n\n var attributes = geometry.attributes;\n\n var a, b;\n\n if (!vP) {\n vP = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n vQ = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n }\n\n var istep = 2;\n if (geometry.lineWidth) {\n istep = 6;\n }\n\n const indices = getIndexBuffer(geometry);\n\n if (indices) {\n\n let positions, stride;\n positions = geometry.vb ? geometry.vb : attributes.position.array;\n stride = geometry.vb ? geometry.vbstride : 3;\n\n var groups = geometry.groups;\n\n if (!groups || groups.length === 0) {\n\n groups = [{ start: 0, count: indices.length, index: 0 }];\n\n }\n\n for (var oi = 0, ol = groups.length; oi < ol; ++oi) {\n\n var start = groups[oi].start;\n var count = groups[oi].count;\n var index = groups[oi].index;\n\n for (var i = start, il = start + count, lineIdx = start / istep; i < il; i += istep, lineIdx++) {\n\n a = index + indices[i];\n b = index + indices[i + 1];\n\n vP.x = positions[a * stride];vP.y = positions[a * stride + 1];vP.z = positions[a * stride + 2];\n vQ.x = positions[b * stride];vQ.y = positions[b * stride + 1];vQ.z = positions[b * stride + 2];\n\n callback(vP, vQ, a, b, lineIdx);\n }\n\n }\n\n } else {\n\n const positions = geometry.vb ? geometry.vb : attributes.position.array;\n const stride = geometry.vb ? geometry.vbstride : 3;\n\n for (var i = 0, il = positions.length / stride, lineIdx = 0; i < il; i += istep, lineIdx++) {\n\n a = i;\n b = i + 1;\n\n vP.x = positions[a * stride];vP.y = positions[a * stride + 1];vP.z = positions[a * stride + 2];\n vQ.x = positions[b * stride];vQ.y = positions[b * stride + 1];vQ.z = positions[b * stride + 2];\n\n callback(vP, vQ, a, b, lineIdx);\n }\n\n }\n}\n\n\nfunction enumMeshEdges(geometry, callback) {\n\n var a, b;\n\n if (!vP) {\n vP = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n vQ = new _LmvVector3__WEBPACK_IMPORTED_MODULE_0__.LmvVector3();\n }\n\n var istep = 2;\n\n const indices = geometry.iblines;\n\n if (!indices) {\n return;\n }\n\n const positions = geometry.vb ? geometry.vb : attributes.position.array;\n const stride = geometry.vb ? geometry.vbstride : 3;\n\n var groups = geometry.groups;\n\n if (!groups || groups.length === 0) {\n\n groups = [{ start: 0, count: indices.length, index: 0 }];\n\n }\n\n for (var oi = 0, ol = groups.length; oi < ol; ++oi) {\n\n var start = groups[oi].start;\n var count = groups[oi].count;\n var index = groups[oi].index;\n\n for (var i = start, il = start + count; i < il; i += istep) {\n\n a = index + indices[i];\n b = index + indices[i + 1];\n\n vP.x = positions[a * stride];vP.y = positions[a * stride + 1];vP.z = positions[a * stride + 2];\n vQ.x = positions[b * stride];vQ.y = positions[b * stride + 1];vQ.z = positions[b * stride + 2];\n\n callback(vP, vQ, a, b);\n }\n\n }\n}\n\nlet VertexEnumerator = {\n getVertexCount,\n enumMeshVertices,\n enumMeshIndices,\n enumMeshTriangles,\n enumMeshLines,\n enumMeshEdges\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TUFDdEJRLENBQUMsR0FBR2xCLEtBQUssR0FBRzVCLE9BQU8sQ0FBQ3NDLENBQUMsR0FBRyxDQUFDLENBQUM7O01BRTFCMEIsRUFBRSxDQUFDTixDQUFDLEdBQUc3QyxTQUFTLENBQUNnQyxDQUFDLEdBQUMvQixNQUFNLENBQUMsQ0FBRWtELEVBQUUsQ0FBQ0wsQ0FBQyxHQUFHOUMsU0FBUyxDQUFDZ0MsQ0FBQyxHQUFDL0IsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFFa0QsRUFBRSxDQUFDSixDQUFDLEdBQUcvQyxTQUFTLENBQUNnQyxDQUFDLEdBQUMvQixNQUFNLEdBQUMsQ0FBQyxDQUFDO01BQ3RGbUQsRUFBRSxDQUFDUCxDQUFDLEdBQUc3QyxTQUFTLENBQUNpQyxDQUFDLEdBQUNoQyxNQUFNLENBQUMsQ0FBRW1ELEVBQUUsQ0FBQ04sQ0FBQyxHQUFHOUMsU0FBUyxDQUFDaUMsQ0FBQyxHQUFDaEMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFFbUQsRUFBRSxDQUFDTCxDQUFDLEdBQUcvQyxTQUFTLENBQUNpQyxDQUFDLEdBQUNoQyxNQUFNLEdBQUMsQ0FBQyxDQUFDOztNQUV0RmdCLFFBQVEsQ0FBQ2tDLEVBQUUsRUFBRUMsRUFBRSxFQUFFcEIsQ0FBQyxFQUFFQyxDQUFDLENBQUM7SUFDMUI7O0VBRUo7QUFDSjs7QUFFTyxJQUFJMEIsZ0JBQWdCLEdBQUc7RUFDMUJsRixjQUFjO0VBQ2R1QyxnQkFBZ0I7RUFDaEJhLGVBQWU7RUFDZlksaUJBQWlCO0VBQ2pCWSxhQUFhO0VBQ2JJO0FBQ0osQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy93Z3Mvc2NlbmUvVmVydGV4RW51bWVyYXRvci5qcz9jOWY0Il0sInNvdXJjZXNDb250ZW50IjpbIlxuXG4vL1V0aWxpdHkgbG9naWMgZm9yIGxpc3RpbmcgdmVydGV4IGRhdGEgZnJvbSBMbXZCdWZmZXJHZW9tZXRyeSBpbnRlcmxlYXZlZCBidWZmZXJzXG5cbmltcG9ydCB7IExtdlZlY3RvcjMgfSBmcm9tICcuL0xtdlZlY3RvcjMnO1xuXG4vL1RoZXNlIGZ1bmN0aW9ucyB3b3JrIGZvciBib3RoIHdvcmtlcnMgc2lkZSBpbnRlcmxlYXZlZCBidWZmZXIgc3RydWN0dXJlc1xuLy9hbmQgbWFpbiB0aHJlYWQgc2lkZSBMbXZCdWZmZXJHZW9tZXRyeSBpbnN0YW5jZXMuIFRoZSBkaWZmZXJlbmNlIGluIG5hbWluZ1xuLy9pZiB0aGUgaW5kZXggYXR0cmlidXRlIG9uIGJvdGggc2lkZXMgaXMgc3VwZXIgYW5ub3lpbmcgYW5kIHNob3VsZCBiZSBjbGVhbmVkIHVwLlxuXG5cbi8qKiBXb3JrcyBmb3IgQnVmZmVyR2VvbWV0cnkgYXMgd2VsbCBhcyBUSFJFRS5CdWZmZXJHZW9tZXRyeS4gU3VwcG9ydHMgaW50ZXJsZWF2ZWQgYW5kIG5vbi1pbnRlcmxlYXZlZCBidWZmZXJzLlxuICogICBAcGFyYW0ge0J1ZmZlckdlb21ldHJ5fFRIUkVFLkJ1ZmZlckdlb21ldHJ5fSBnZW9tXG4gKiAgIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJ0ZXhDb3VudChnZW9tKSB7XG4gICAgaWYgKGdlb20udmIpIHtcbiAgICAgICAgLy8gaW50ZXJsZWF2ZWRcbiAgICAgICAgcmV0dXJuIGdlb20udmIubGVuZ3RoIC8gZ2VvbS52YnN0cmlkZTtcbiAgICB9XG4gICAgLy8gbm8gaW50ZXJsZWF2ZWQgYnVmZmVyLiBSZXR1cm4gY291bnQgZnJvbSBwb3NpdGlvbiBhdHRyaWJ1dGUgb3IgMFxuICAgIHJldHVybiAoZ2VvbS5hdHRyaWJ1dGVzLnBvc2l0aW9uID8gZ2VvbS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5Lmxlbmd0aCAvIDMgOiAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluZGljZXNDb3VudChnZW9tZXRyeSkge1xuXG4gICAgY29uc3QgaW5kaWNlcyA9IGdldEluZGV4QnVmZmVyKGdlb21ldHJ5KTtcblxuICAgIGlmIChpbmRpY2VzKSB7XG5cbiAgICAgICAgdmFyIGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwcztcblxuICAgICAgICBpZiAoIWdyb3VwcyB8fCBncm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzID0gMDtcblxuICAgICAgICBmb3IgKHZhciBvaSA9IDAsIG9sID0gZ3JvdXBzLmxlbmd0aDsgb2kgPCBvbDsgKytvaSkge1xuICAgICAgICAgICAgcmVzICs9IGdyb3Vwc1tvaV0uY291bnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldFZlcnRleENvdW50KGdlb21ldHJ5KTtcbiAgICB9XG59XG5cbnZhciBfcCwgX24sIF91djtcbnZhciBfbm9ybWFsc01hdHJpeDtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQb3NpdGlvblZCSW5mb1xuICogQHByb3BlcnR5IHtGbG9hdDMyQXJyYXl9IHBvc2l0aW9ucyAtIFZlcnRleCBidWZmZXIgY29udGFpbmluZyBwb3NpdGlvbiBkYXRhXG4gKiBAcHJvcGVydHkge251bWJlcn0gcG9mZnNldCAtIFRoZSBhcnJheSBidWZmZXIgb2Zmc2V0IGZvciBwb3NpdGlvbiBkYXRhXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RyaWRlIC0gVGhlIGFycmF5IGJ1ZmZlciBzdHJpZGUgZm9yIGJvdGggcG9zaXRpb25zIGFuZCBub3JtYWxzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBOb3JtYWxWQkluZm9cbiAqIEBwcm9wZXJ0eSB7RmxvYXQzMkFycmF5fSBub3JtYWxzIC0gVmVydGV4IGJ1ZmZlciBjb250YWluaW5nIG5vcm1hbCBkYXRhXG4gKiBAcHJvcGVydHkge251bWJlcn0gbm9mZnNldCAtIFRoZSBhcnJheSBidWZmZXIgb2Zmc2V0IGZvciBub3JtYWwgZGF0YVxuICovXG5cbi8qKlxuICogR2F0aGVycyBtaW5pbXVtIGluZm8gdG8gdHJhdmVyc2UgdGhlIHBvc2l0aW9ucyBzdG9yZWQgaW4gYW4gYXJyYXkgYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlckdlb21ldHJ5fE1lc2hEYXRhfSBnZW9tZXRyeVxuICogQHJldHVybnMge1Bvc2l0aW9uVkJJbmZvfVxuICovXG5mdW5jdGlvbiBleHRyYWN0VmVydGV4QnVmZmVyUG9zaXRpb25EYXRhKG1kYXRhKSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG1kYXRhLmF0dHJpYnV0ZXM7XG4gICAgbGV0IHBvc2l0aW9ucywgc3RyaWRlLCBwb2Zmc2V0O1xuICAgIC8vIEdldCB0aGUgb2Zmc2V0IHRvIHBvc2l0aW9ucyBpbiB0aGUgYnVmZmVyLiBCZSBjYXJlZnVsLCAyRCBidWZmZXJzXG4gICAgLy8gZG9uJ3QgdXNlIHRoZSAncG9zaXRpb24nIGF0dHJpYnV0ZSBmb3IgcG9zaXRpb25zLiBSZWplY3QgdGhvc2UuXG4gICAgaWYgKG1kYXRhLnZibGF5b3V0KSB7XG4gICAgICAgIGlmICghbWRhdGEudmJsYXlvdXQucG9zaXRpb24pXG4gICAgICAgICAgcmV0dXJuIHtwb3NpdGlvbnM6IHVuZGVmaW5lZCwgcG9mZnNldDogdW5kZWZpbmVkfTtcbiAgICAgICAgcG9mZnNldCA9IG1kYXRhLnZibGF5b3V0LnBvc2l0aW9uLm9mZnNldDtcbiAgICB9IGVsc2UgaWYgKCFhdHRyaWJ1dGVzLnBvc2l0aW9uKVxuICAgICAgICByZXR1cm4ge3Bvc2l0aW9uczogdW5kZWZpbmVkLCBwb2Zmc2V0OiB1bmRlZmluZWR9O1xuICAgIGVsc2Uge1xuICAgICAgICBwb2Zmc2V0ID0gYXR0cmlidXRlcy5wb3NpdGlvbi5vZmZzZXQgfHwgMDtcbiAgICB9XG4gICAgcG9zaXRpb25zID0gbWRhdGEudmIgfHwgYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcbiAgICBzdHJpZGUgPSBtZGF0YS52YiA/IG1kYXRhLnZic3RyaWRlIDogMztcbiAgICByZXR1cm4geyBwb3NpdGlvbnMsIHN0cmlkZSwgcG9mZnNldCB9O1xufVxuXG4vKipcbiAqIEdhdGhlcnMgbWluaW11bSBpbmZvIHRvIHRyYXZlcnNlIHRoZSBub3JtYWxzIHN0b3JlZCBpbiBhbiBpbnRlcmxlYXZlZCBhcnJheSBidWZmZXJcbiAqIEBwYXJhbSB7QnVmZmVyR2VvbWV0cnl8TWVzaERhdGF9IGdlb21ldHJ5XG4gKiBAcmV0dXJucyB7Tm9ybWFsVkJJbmZvfVxuICovXG5mdW5jdGlvbiBleHRyYWN0VmVydGV4QnVmZmVyTm9ybWFsRGF0YShnZW9tZXRyeSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuICAgIGxldCBub2Zmc2V0ID0gMDtcbiAgICBsZXQgbm9mZnNldEZhY3RvciA9IDE7XG4gICAgbGV0IG5vcm1hbHMgPSBnZW9tZXRyeS52YiB8fCAoYXR0cmlidXRlcy5ub3JtYWwgJiYgYXR0cmlidXRlcy5ub3JtYWwuYXJyYXkpO1xuICAgIGxldCBuYXR0ciA9IGdlb21ldHJ5LnZibGF5b3V0ID8gZ2VvbWV0cnkudmJsYXlvdXQubm9ybWFsIDogKGF0dHJpYnV0ZXMubm9ybWFsIHx8IG51bGwpO1xuXG4gICAgaWYgKG5hdHRyKSB7XG4gICAgICBub2Zmc2V0ID0gbmF0dHIub2Zmc2V0IHx8IDA7XG4gICAgICBub2Zmc2V0ICo9IG5vZmZzZXRGYWN0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbm9ybWFscyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5hdHRyICYmICFuYXR0ci5hcnJheSAmJiAobmF0dHIuaXRlbVNpemUgIT09IDMgfHwgbmF0dHIuYnl0ZXNQZXJJdGVtICE9PSA0KSkge1xuICAgICAgLy9jb25zb2xlLmxvZyhcIk5vcm1hbHMgYXJlIHBhY2tlZCwgd2lsbCBiZSBza2lwcGVkIGZyb20gZW51bU1lc2hUcmlhbmdsZXMuIFVzZSBwYWNrTm9ybWFscz1mYWxzZSBsb2FkIG9wdGlvbi5cIik7XG4gICAgICBub3JtYWxzID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtub3JtYWxzLCBub2Zmc2V0fTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgaW5kaWNlcyBhcnJheVxuICogQHBhcmFtIHtCdWZmZXJHZW9tZXRyeXxNZXNoRGF0YX0gZ2VvbWV0cnlcbiAqIEByZXR1cm5zIHtVaW50MTZBcnJheXxudWxsfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0SW5kZXhCdWZmZXIoZ2VvbWV0cnkpIHtcbiAgICByZXR1cm4gKGdlb21ldHJ5LmliIHx8IGdlb21ldHJ5LmluZGljZXMpIHx8IChnZW9tZXRyeS5pbmRleCA/IGdlb21ldHJ5LmluZGV4LmFycmF5IDogbnVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtTWVzaFZlcnRpY2VzKGdlb21ldHJ5LCBjYWxsYmFjaywgbWF0cml4KSB7XG5cbiAgICB2YXIgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cbiAgICBpZiAoIV9wKSB7XG4gICAgICAgIF9wID0gbmV3IExtdlZlY3RvcjMoKTtcbiAgICAgICAgX24gPSBuZXcgTG12VmVjdG9yMygpO1xuICAgICAgICBfdXYgPSBuZXcgTG12VmVjdG9yMygpO1xuICAgIH1cblxuICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgaWYgKCFfbm9ybWFsc01hdHJpeClcbiAgICAgICAgICAgIF9ub3JtYWxzTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDMoKTtcblxuICAgICAgICBfbm9ybWFsc01hdHJpeC5nZXROb3JtYWxNYXRyaXgobWF0cml4KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBvc2l0aW9ucywgc3RyaWRlLCBwb2Zmc2V0IH0gPSBleHRyYWN0VmVydGV4QnVmZmVyUG9zaXRpb25EYXRhKGdlb21ldHJ5KTtcbiAgICBjb25zdCB7IG5vcm1hbHMsIG5vZmZzZXQgfSA9IGV4dHJhY3RWZXJ0ZXhCdWZmZXJOb3JtYWxEYXRhKGdlb21ldHJ5KTtcbiAgICBpZiAoIXBvc2l0aW9ucykgcmV0dXJuOyAvLyBObyBwb3NpdGlvbnMsIHdoYXQgdG8gZG8/P1xuXG4gICAgLy9UT0RPOiBVViBjaGFubmVsXG5cbiAgICB2YXIgdmNvdW50ID0gZ2V0VmVydGV4Q291bnQoZ2VvbWV0cnkpO1xuXG4gICAgdmFyIHBpID0gcG9mZnNldDtcbiAgICB2YXIgbmkgPSBub2Zmc2V0O1xuICAgIGZvciAodmFyIGk9MDsgaTx2Y291bnQ7IGkrKywgcGkgKz0gc3RyaWRlLCBuaSArPSBzdHJpZGUpIHtcblxuICAgICAgICBfcC5zZXQocG9zaXRpb25zW3BpXSwgcG9zaXRpb25zW3BpKzFdLCBwb3NpdGlvbnNbcGkrMl0pO1xuXG4gICAgICAgIGlmIChtYXRyaXgpXG4gICAgICAgICAgICBfcC5hcHBseU1hdHJpeDQobWF0cml4KTtcblxuICAgICAgICBpZiAobm9ybWFscykge1xuICAgICAgICAgICAgX24uc2V0KG5vcm1hbHNbbmldLCBub3JtYWxzW25pKzFdLCBub3JtYWxzW25pKzJdKTtcblxuICAgICAgICAgICAgaWYgKG1hdHJpeCkge1xuICAgICAgICAgICAgICAgIF9uLmFwcGx5TWF0cml4Myhfbm9ybWFsc01hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL1RPRE86IFVWIGNoYW5uZWxcblxuICAgICAgICBjYWxsYmFjayhfcCwgbm9ybWFscyA/IF9uIDogbnVsbCwgbnVsbC8qLCBfdXYqLywgaSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW51bU1lc2hJbmRpY2VzKGdlb21ldHJ5LCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGluZGljZXMgPSBnZXRJbmRleEJ1ZmZlcihnZW9tZXRyeSk7XG5cbiAgICBpZiAoaW5kaWNlcykge1xuXG4gICAgICAgIGxldCBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cbiAgICAgICAgaWYgKCFncm91cHMgfHwgZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ3JvdXBzID0gW3tzdGFydDogMCwgY291bnQ6IGluZGljZXMubGVuZ3RoLCBpbmRleDogMH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgb2kgPSAwLCBvbCA9IGdyb3Vwcy5sZW5ndGg7IG9pIDwgb2w7ICsrb2kpIHtcblxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gZ3JvdXBzW29pXS5zdGFydDtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IGdyb3Vwc1tvaV0uY291bnQ7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBncm91cHNbb2ldLmluZGV4O1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQsIGlsID0gc3RhcnQgKyBjb3VudDsgaSA8IGlsOyBpICs9IDMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gaW5kZXggKyBpbmRpY2VzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBiID0gaW5kZXggKyBpbmRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGluZGV4ICsgaW5kaWNlc1tpICsgMl07XG5cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhhLCBiLCBjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG5cbiAgICAgICAgbGV0IHZjb3VudCA9IGdldFZlcnRleENvdW50KGdlb21ldHJ5KTtcblxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dmNvdW50OyBpKyspIHtcblxuICAgICAgICAgICAgbGV0IGEgPSAzICogaTtcbiAgICAgICAgICAgIGxldCBiID0gMyAqIGkgKyAxO1xuICAgICAgICAgICAgbGV0IGMgPSAzICogaSArIDI7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKGEsIGIsIGMpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbnZhciB2QSwgdkIsIHZDLCBuQSwgbkIsIG5DO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bU1lc2hUcmlhbmdsZXMoZ2VvbWV0cnksIGNhbGxiYWNrKSB7XG5cbiAgICB2YXIgYSwgYiwgYztcblxuICAgIGlmICghdkEpIHtcbiAgICAgICAgdkEgPSBuZXcgTG12VmVjdG9yMygpO1xuICAgICAgICB2QiA9IG5ldyBMbXZWZWN0b3IzKCk7XG4gICAgICAgIHZDID0gbmV3IExtdlZlY3RvcjMoKTtcblxuICAgICAgICBuQSA9IG5ldyBMbXZWZWN0b3IzKCk7XG4gICAgICAgIG5CID0gbmV3IExtdlZlY3RvcjMoKTtcbiAgICAgICAgbkMgPSBuZXcgTG12VmVjdG9yMygpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcG9zaXRpb25zLCBzdHJpZGUsIHBvZmZzZXQgfSA9IGV4dHJhY3RWZXJ0ZXhCdWZmZXJQb3NpdGlvbkRhdGEoZ2VvbWV0cnkpO1xuICAgIGNvbnN0IHsgbm9ybWFscywgbm9mZnNldCB9ID0gZXh0cmFjdFZlcnRleEJ1ZmZlck5vcm1hbERhdGEoZ2VvbWV0cnkpO1xuICAgIGNvbnN0IGluZGljZXMgPSBnZXRJbmRleEJ1ZmZlcihnZW9tZXRyeSk7XG4gICAgaWYgKCFwb3NpdGlvbnMpIHJldHVybjsgLy8gTm8gcG9zaXRpb25zLCB3aGF0IHRvIGRvPz9cblxuICAgIGlmIChpbmRpY2VzKSB7XG5cbiAgICAgICAgdmFyIGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwcztcblxuICAgICAgICBpZiAoIWdyb3VwcyB8fCBncm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBncm91cHMgPSBbe3N0YXJ0OiAwLCBjb3VudDogaW5kaWNlcy5sZW5ndGgsIGluZGV4OiAwfV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBvaSA9IDAsIG9sID0gZ3JvdXBzLmxlbmd0aDsgb2kgPCBvbDsgKytvaSkge1xuXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBncm91cHNbb2ldLnN0YXJ0O1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gZ3JvdXBzW29pXS5jb3VudDtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGdyb3Vwc1tvaV0uaW5kZXg7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydCwgaWwgPSBzdGFydCArIGNvdW50OyBpIDwgaWw7IGkgKz0gMykge1xuXG4gICAgICAgICAgICAgICAgYSA9IGluZGV4ICsgaW5kaWNlc1tpXTtcbiAgICAgICAgICAgICAgICBiID0gaW5kZXggKyBpbmRpY2VzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBjID0gaW5kZXggKyBpbmRpY2VzW2kgKyAyXTtcblxuICAgICAgICAgICAgICAgIHZhciBwYSA9IGEqc3RyaWRlICsgcG9mZnNldDtcbiAgICAgICAgICAgICAgICB2YXIgcGIgPSBiKnN0cmlkZSArIHBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgdmFyIHBjID0gYypzdHJpZGUgKyBwb2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgdkEueCA9IHBvc2l0aW9uc1twYV07IHZBLnkgPSBwb3NpdGlvbnNbcGErMV07IHZBLnogPSBwb3NpdGlvbnNbcGErMl07XG4gICAgICAgICAgICAgICAgdkIueCA9IHBvc2l0aW9uc1twYl07IHZCLnkgPSBwb3NpdGlvbnNbcGIrMV07IHZCLnogPSBwb3NpdGlvbnNbcGIrMl07XG4gICAgICAgICAgICAgICAgdkMueCA9IHBvc2l0aW9uc1twY107IHZDLnkgPSBwb3NpdGlvbnNbcGMrMV07IHZDLnogPSBwb3NpdGlvbnNbcGMrMl07XG5cbiAgICAgICAgICAgICAgICBpZiAobm9ybWFscykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmEgPSBhKnN0cmlkZSArIG5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYiA9IGIqc3RyaWRlICsgbm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5jID0gYypzdHJpZGUgKyBub2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgICAgIG5BLnggPSBub3JtYWxzW25hXTsgbkEueSA9IG5vcm1hbHNbbmErMV07IG5BLnogPSBub3JtYWxzW25hKzJdO1xuICAgICAgICAgICAgICAgICAgICBuQi54ID0gbm9ybWFsc1tuYl07IG5CLnkgPSBub3JtYWxzW25iKzFdOyBuQi56ID0gbm9ybWFsc1tuYisyXTtcbiAgICAgICAgICAgICAgICAgICAgbkMueCA9IG5vcm1hbHNbbmNdOyBuQy55ID0gbm9ybWFsc1tuYysxXTsgbkMueiA9IG5vcm1hbHNbbmMrMl07XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodkEsIHZCLCB2QywgYSwgYiwgYywgbkEsIG5CLCBuQywgaS8zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh2QSwgdkIsIHZDLCBhLCBiLCBjLCBudWxsLCBudWxsLCBudWxsLCBpLzMpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIHtcblxuICAgICAgICB2YXIgdmNvdW50ID0gZ2V0VmVydGV4Q291bnQoZ2VvbWV0cnkpO1xuXG4gICAgICAgIGZvciAodmFyIGk9MDsgaTx2Y291bnQ7IGkrPTMpIHtcblxuICAgICAgICAgICAgYSA9IGk7XG4gICAgICAgICAgICBiID0gaSArIDE7XG4gICAgICAgICAgICBjID0gaSArIDI7XG5cbiAgICAgICAgICAgIHZhciBwYSA9IGEqc3RyaWRlICsgcG9mZnNldDtcbiAgICAgICAgICAgIHZhciBwYiA9IGIqc3RyaWRlICsgcG9mZnNldDtcbiAgICAgICAgICAgIHZhciBwYyA9IGMqc3RyaWRlICsgcG9mZnNldDtcblxuICAgICAgICAgICAgdkEueCA9IHBvc2l0aW9uc1twYV07IHZBLnkgPSBwb3NpdGlvbnNbcGErMV07IHZBLnogPSBwb3NpdGlvbnNbcGErMl07XG4gICAgICAgICAgICB2Qi54ID0gcG9zaXRpb25zW3BiXTsgdkIueSA9IHBvc2l0aW9uc1twYisxXTsgdkIueiA9IHBvc2l0aW9uc1twYisyXTtcbiAgICAgICAgICAgIHZDLnggPSBwb3NpdGlvbnNbcGNdOyB2Qy55ID0gcG9zaXRpb25zW3BjKzFdOyB2Qy56ID0gcG9zaXRpb25zW3BjKzJdO1xuXG4gICAgICAgICAgICBpZiAobm9ybWFscykge1xuICAgICAgICAgICAgICAgIHZhciBuYSA9IGEqc3RyaWRlICsgbm9mZnNldDtcbiAgICAgICAgICAgICAgICB2YXIgbmIgPSBiKnN0cmlkZSArIG5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgdmFyIG5jID0gYypzdHJpZGUgKyBub2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgbkEueCA9IG5vcm1hbHNbbmFdOyBuQS55ID0gbm9ybWFsc1tuYSsxXTsgbkEueiA9IG5vcm1hbHNbbmErMl07XG4gICAgICAgICAgICAgICAgbkIueCA9IG5vcm1hbHNbbmJdOyBuQi55ID0gbm9ybWFsc1tuYisxXTsgbkIueiA9IG5vcm1hbHNbbmIrMl07XG4gICAgICAgICAgICAgICAgbkMueCA9IG5vcm1hbHNbbmNdOyBuQy55ID0gbm9ybWFsc1tuYysxXTsgbkMueiA9IG5vcm1hbHNbbmMrMl07XG5cbiAgICAgICAgICAgICAgICBjYWxsYmFjayh2QSwgdkIsIHZDLCBhLCBiLCBjLCBuQSwgbkIsIG5DLCBpLzMgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodkEsIHZCLCB2QywgYSwgYiwgYywgbnVsbCwgbnVsbCwgbnVsbCwgaS8zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG5cbnZhciB2UCwgdlE7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtTWVzaExpbmVzKGdlb21ldHJ5LCBjYWxsYmFjaykge1xuXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXG4gICAgdmFyIGEsIGI7XG5cbiAgICBpZiAoIXZQKSB7XG4gICAgICAgIHZQID0gbmV3IExtdlZlY3RvcjMoKTtcbiAgICAgICAgdlEgPSBuZXcgTG12VmVjdG9yMygpO1xuICAgIH1cblxuICAgIHZhciBpc3RlcCA9IDI7XG4gICAgaWYgKGdlb21ldHJ5LmxpbmVXaWR0aCkge1xuICAgICAgICBpc3RlcCA9IDY7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kaWNlcyA9IGdldEluZGV4QnVmZmVyKGdlb21ldHJ5KTtcblxuICAgIGlmIChpbmRpY2VzKSB7XG5cbiAgICAgICAgbGV0IHBvc2l0aW9ucywgc3RyaWRlO1xuICAgICAgICBwb3NpdGlvbnMgPSBnZW9tZXRyeS52YiA/IGdlb21ldHJ5LnZiIDogYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcbiAgICAgICAgc3RyaWRlID0gZ2VvbWV0cnkudmIgPyBnZW9tZXRyeS52YnN0cmlkZSA6IDM7XG5cbiAgICAgICAgdmFyIGdyb3VwcyA9IGdlb21ldHJ5Lmdyb3VwcztcblxuICAgICAgICBpZiAoIWdyb3VwcyB8fCBncm91cHMubGVuZ3RoID09PSAwKSB7XG5cbiAgICAgICAgICAgIGdyb3VwcyA9IFt7c3RhcnQ6IDAsIGNvdW50OiBpbmRpY2VzLmxlbmd0aCwgaW5kZXg6IDB9XTtcblxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgb2kgPSAwLCBvbCA9IGdyb3Vwcy5sZW5ndGg7IG9pIDwgb2w7ICsrb2kpIHtcblxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZ3JvdXBzW29pXS5zdGFydDtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IGdyb3Vwc1tvaV0uY291bnQ7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBncm91cHNbb2ldLmluZGV4O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQsIGlsID0gc3RhcnQgKyBjb3VudCwgbGluZUlkeCA9IHN0YXJ0L2lzdGVwOyBpIDwgaWw7IGkgKz0gaXN0ZXAsIGxpbmVJZHgrKykge1xuXG4gICAgICAgICAgICAgICAgYSA9IGluZGV4ICsgaW5kaWNlc1tpXTtcbiAgICAgICAgICAgICAgICBiID0gaW5kZXggKyBpbmRpY2VzW2kgKyAxXTtcblxuICAgICAgICAgICAgICAgIHZQLnggPSBwb3NpdGlvbnNbYSpzdHJpZGVdOyB2UC55ID0gcG9zaXRpb25zW2Eqc3RyaWRlKzFdOyB2UC56ID0gcG9zaXRpb25zW2Eqc3RyaWRlKzJdO1xuICAgICAgICAgICAgICAgIHZRLnggPSBwb3NpdGlvbnNbYipzdHJpZGVdOyB2US55ID0gcG9zaXRpb25zW2Iqc3RyaWRlKzFdOyB2US56ID0gcG9zaXRpb25zW2Iqc3RyaWRlKzJdO1xuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodlAsIHZRLCBhLCBiLCBsaW5lSWR4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGdlb21ldHJ5LnZiID8gZ2VvbWV0cnkudmIgOiBhdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xuICAgICAgICBjb25zdCBzdHJpZGUgPSBnZW9tZXRyeS52YiA/IGdlb21ldHJ5LnZic3RyaWRlIDogMztcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBwb3NpdGlvbnMubGVuZ3RoL3N0cmlkZSwgbGluZUlkeCA9IDA7IGkgPCBpbDsgaSArPSBpc3RlcCwgbGluZUlkeCsrKSB7XG5cbiAgICAgICAgICAgIGEgPSBpO1xuICAgICAgICAgICAgYiA9IGkgKyAxO1xuXG4gICAgICAgICAgICB2UC54ID0gcG9zaXRpb25zW2Eqc3RyaWRlXTsgdlAueSA9IHBvc2l0aW9uc1thKnN0cmlkZSsxXTsgdlAueiA9IHBvc2l0aW9uc1thKnN0cmlkZSsyXTtcbiAgICAgICAgICAgIHZRLnggPSBwb3NpdGlvbnNbYipzdHJpZGVdOyB2US55ID0gcG9zaXRpb25zW2Iqc3RyaWRlKzFdOyB2US56ID0gcG9zaXRpb25zW2Iqc3RyaWRlKzJdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayh2UCwgdlEsIGEsIGIsIGxpbmVJZHgpO1xuICAgICAgICB9XG5cbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1NZXNoRWRnZXMoZ2VvbWV0cnksIGNhbGxiYWNrKSB7XG5cbiAgICB2YXIgYSwgYjtcblxuICAgIGlmICghdlApIHtcbiAgICAgICAgdlAgPSBuZXcgTG12VmVjdG9yMygpO1xuICAgICAgICB2USA9IG5ldyBMbXZWZWN0b3IzKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzdGVwID0gMjtcblxuICAgIGNvbnN0IGluZGljZXMgPSBnZW9tZXRyeS5pYmxpbmVzO1xuXG4gICAgaWYgKCFpbmRpY2VzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbnMgPSBnZW9tZXRyeS52YiA/IGdlb21ldHJ5LnZiIDogYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcbiAgICBjb25zdCBzdHJpZGUgPSBnZW9tZXRyeS52YiA/IGdlb21ldHJ5LnZic3RyaWRlIDogMztcblxuICAgIHZhciBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cbiAgICBpZiAoIWdyb3VwcyB8fCBncm91cHMubGVuZ3RoID09PSAwKSB7XG5cbiAgICAgICAgZ3JvdXBzID0gW3tzdGFydDogMCwgY291bnQ6IGluZGljZXMubGVuZ3RoLCBpbmRleDogMH1dO1xuXG4gICAgfVxuXG4gICAgZm9yICh2YXIgb2kgPSAwLCBvbCA9IGdyb3Vwcy5sZW5ndGg7IG9pIDwgb2w7ICsrb2kpIHtcblxuICAgICAgICB2YXIgc3RhcnQgPSBncm91cHNbb2ldLnN0YXJ0O1xuICAgICAgICB2YXIgY291bnQgPSBncm91cHNbb2ldLmNvdW50O1xuICAgICAgICB2YXIgaW5kZXggPSBncm91cHNbb2ldLmluZGV4O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFydCwgaWwgPSBzdGFydCArIGNvdW50OyBpIDwgaWw7IGkgKz0gaXN0ZXApIHtcblxuICAgICAgICAgICAgYSA9IGluZGV4ICsgaW5kaWNlc1tpXTtcbiAgICAgICAgICAgIGIgPSBpbmRleCArIGluZGljZXNbaSArIDFdO1xuXG4gICAgICAgICAgICB2UC54ID0gcG9zaXRpb25zW2Eqc3RyaWRlXTsgdlAueSA9IHBvc2l0aW9uc1thKnN0cmlkZSsxXTsgdlAueiA9IHBvc2l0aW9uc1thKnN0cmlkZSsyXTtcbiAgICAgICAgICAgIHZRLnggPSBwb3NpdGlvbnNbYipzdHJpZGVdOyB2US55ID0gcG9zaXRpb25zW2Iqc3RyaWRlKzFdOyB2US56ID0gcG9zaXRpb25zW2Iqc3RyaWRlKzJdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayh2UCwgdlEsIGEsIGIpO1xuICAgICAgICB9XG5cbiAgICB9XG59XG5cbmV4cG9ydCBsZXQgVmVydGV4RW51bWVyYXRvciA9IHtcbiAgICBnZXRWZXJ0ZXhDb3VudCxcbiAgICBlbnVtTWVzaFZlcnRpY2VzLFxuICAgIGVudW1NZXNoSW5kaWNlcyxcbiAgICBlbnVtTWVzaFRyaWFuZ2xlcyxcbiAgICBlbnVtTWVzaExpbmVzLFxuICAgIGVudW1NZXNoRWRnZXNcbn07XG4iXSwibmFtZXMiOlsiTG12VmVjdG9yMyIsImdldFZlcnRleENvdW50IiwiZ2VvbSIsInZiIiwibGVuZ3RoIiwidmJzdHJpZGUiLCJhdHRyaWJ1dGVzIiwicG9zaXRpb24iLCJhcnJheSIsImdldEluZGljZXNDb3VudCIsImdlb21ldHJ5IiwiaW5kaWNlcyIsImdldEluZGV4QnVmZmVyIiwiZ3JvdXBzIiwicmVzIiwib2kiLCJvbCIsImNvdW50IiwiX3AiLCJfbiIsIl91diIsIl9ub3JtYWxzTWF0cml4IiwiZXh0cmFjdFZlcnRleEJ1ZmZlclBvc2l0aW9uRGF0YSIsIm1kYXRhIiwicG9zaXRpb25zIiwic3RyaWRlIiwicG9mZnNldCIsInZibGF5b3V0IiwidW5kZWZpbmVkIiwib2Zmc2V0IiwiZXh0cmFjdFZlcnRleEJ1ZmZlck5vcm1hbERhdGEiLCJub2Zmc2V0Iiwibm9mZnNldEZhY3RvciIsIm5vcm1hbHMiLCJub3JtYWwiLCJuYXR0ciIsIml0ZW1TaXplIiwiYnl0ZXNQZXJJdGVtIiwiaWIiLCJpbmRleCIsImVudW1NZXNoVmVydGljZXMiLCJjYWxsYmFjayIsIm1hdHJpeCIsIlRIUkVFIiwiTWF0cml4MyIsImdldE5vcm1hbE1hdHJpeCIsInZjb3VudCIsInBpIiwibmkiLCJpIiwic2V0IiwiYXBwbHlNYXRyaXg0IiwiYXBwbHlNYXRyaXgzIiwiZW51bU1lc2hJbmRpY2VzIiwic3RhcnQiLCJpbCIsImEiLCJiIiwiYyIsInZBIiwidkIiLCJ2QyIsIm5BIiwibkIiLCJuQyIsImVudW1NZXNoVHJpYW5nbGVzIiwicGEiLCJwYiIsInBjIiwieCIsInkiLCJ6IiwibmEiLCJuYiIsIm5jIiwidlAiLCJ2USIsImVudW1NZXNoTGluZXMiLCJpc3RlcCIsImxpbmVXaWR0aCIsImxpbmVJZHgiLCJlbnVtTWVzaEVkZ2VzIiwiaWJsaW5lcyIsIlZlcnRleEVudW1lcmF0b3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/wgs/scene/VertexEnumerator.js\n"); /***/ }), /***/ "./src/wgs/scene/consolidation/GeomMergeTask.js": /*!******************************************************!*\ !*** ./src/wgs/scene/consolidation/GeomMergeTask.js ***! \******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GeomMergeTask: () => (/* binding */ GeomMergeTask),\n/* harmony export */ writeIdToBuffer: () => (/* binding */ writeIdToBuffer)\n/* harmony export */ });\n/**\n * A GeomMergeTask is used for mesh consolidation. It fills vertex buffer and id buffer of a consolidated mesh\n * based on a set of compatible input meshes.\n *\n * GeomMergeTask is shared by main wgs script and worker script, so that the same code can be used for single-threaded\n * and multi-threaded consolidation.\n */\n\n// unique task ids\nvar _nextTaskId = 1;\nfunction createTaskId() {return _nextTaskId++;}\n\nfunction GeomMergeTask() {\n\n // Interleaved vertex buffers as Float32Array.\n this.vb = null;\n\n // floats per vertex\n this.vbstride = 0;\n\n // offsets in floats where to find position/normal in vertex buffer\n this.posOffset = 0;\n this.normalOffset = 0;\n\n // matrices per src-geom (Float32Array with 16 floats per matrix)\n this.matrices = null;\n this.ranges = null;\n\n // must be an Uint32Array that we can efficiently hand-over to the worker\n this.dbIds = null;\n\n // unique task-id used to find BufferGeometry when a merged vb is returned from worker\n this.id = createTaskId();\n}\n\n/**\n * Packs a Vector3 normal vector into 2 components. This is a CPU-side implementation of PackNormalsShaderChunk\n * (see ShaderChunks.js)\n *\n * @param {THREE.Vector3|LmvVector3} normal - InOut normal vector.\n *\n * Note that 'normal ' must be normalized!\n */\nfunction encodeNormal(normal) {\n normal.x = 0.5 * (1.0 + Math.atan2(normal.y, normal.x) / Math.PI);\n normal.y = 0.5 * (1.0 + normal.z);\n normal.z = 0.0; // not used for result\n}\n\n/**\n * @param {THREE.Vector3|LmvVector3} normal - InOut normal vector. Input z is ignored.\n */\nfunction decodeNormal(normal) {\n var angX = 2.0 * normal.x - 1.0;\n var angY = 2.0 * normal.y - 1.0;\n var scthX = Math.sin(angX * Math.PI);\n var scthY = Math.cos(angX * Math.PI);\n var scphiX = Math.sqrt(1.0 - angY * angY);\n var scphiY = angY;\n normal.x = scthY * scphiX;\n normal.y = scthX * scphiX;\n normal.z = scphiY;\n}\n\n/**\n * Writes a dbId into 4 subsequent bytes of an Uint8Array. (4th is only for alignment and always 0)\n * @param {Number} dbId\n * @param {Uint8Array} bufferUint8 - view into the vertex buffer that we write to.\n * @param {Number} writeIndex - Index into the uint8 array where we write the first byte.\n */\nfunction writeIdToBuffer(dbId, bufferUint8, writeIndex) {\n bufferUint8[writeIndex++] = dbId & 0xff;\n bufferUint8[writeIndex++] = dbId >> 8 & 0xff;\n bufferUint8[writeIndex++] = dbId >> 16 & 0xff;\n bufferUint8[writeIndex] = 0; // dbIds are only vec3 in the shader\n}\n\n// We don't have THREE.Matrix3 in a worker, so that we cannot use getNormalTransform()\nfunction getNormalMatrix(matrix, dstMatrix) {\n\n // eliminate translation part\n dstMatrix.copy(matrix);\n dstMatrix[12]=0 ;\n dstMatrix[13]=0 ;\n dstMatrix[14]=0 ;\n\n // tranpose of inverse\n return dstMatrix.invert().transpose();\n}\n\n/**\n * Transforms positions and normals of a vertex buffer range.\n *\n * NOTE: Only interleaved buffers with packed normals are supported.\n *\n * @param {GeomMergeTask} geom\n * @param {Uint16Array} vbUint16 - additional uint16-view to interleaved vertex-buffer\n * @param {LmvMatrix4} matrix\n * @param {Number} [rangeStart] - First vertex to transform. (default: 0)\n * @param {Number} [rangeEnd] - End of vertex range. (default: #vertices)\n * @param {LmvMatrix4} tmpMatrix - reused tmp matrix\n * @param {LmvVector3} tmpVec - reused tmp vector\n */\nvar transformVertexRange=f unction (geom, vbUint16, matrix, rangeStart, rangeEnd, tmpMatrix, tmpVec) {\n\n // transform positions\n var posOffset=g eom.posOffset;\n for (var i=r angeStart; i < rangeEnd; i++) {\n\n // read vertex position i\n var offset=i * geom.vbstride + posOffset;\n tmpVec.set(geom.vb[offset], geom.vb[offset + 1], geom.vb[offset + 2]);\n\n tmpVec.applyMatrix4(matrix);\n\n // write vertex position i\n geom.vb[offset]=t mpVec.x;\n geom.vb[offset + 1]=t mpVec.y;\n geom.vb[offset + 2]=t mpVec.z;\n }\n\n // transform normals (if available)\n if (geom.normalOffset !==- 1) {\n\n // To transform normals, we need an Uint16-view to the data.\n // Packed normals are 2-component Uint16-vectors.\n var uint16PerVertex=g eom.vbstride * 2; // Multiply by 2, because vbstride and offset\n var uint16NormalOffset=g eom.normalOffset * 2; // are counting 32Bit floats.\n var maxUint16=0 xFFFF;\n\n // compute normal transform\n var normalMatrix=g etNormalMatrix(matrix, tmpMatrix);\n\n // transform normal vectors\n for (i=r angeStart; i < rangeEnd; i++) {\n // read byte-normal of vertex i\n var normalIndex=i * uint16PerVertex + uint16NormalOffset;\n tmpVec.set(vbUint16[normalIndex], vbUint16[normalIndex + 1], 0.0);\n\n // decode to vec3 with components in [0,1]\n tmpVec.divideScalar(maxUint16);\n decodeNormal(tmpVec);\n\n // Note that normalMatrix is a LmvMatrix4 (although we only use 3x3 matrix)\n tmpVec.applyMatrix4(normalMatrix);\n\n // Note that encodeNormal requires normalized values. Although a decodedNormal is\n // always normalized, the normalMatrix may involve a scaling.\n tmpVec.normalize();\n\n // encode back to 2-component uint16\n encodeNormal(tmpVec);\n tmpVec.multiplyScalar(maxUint16);\n\n // write back to vertex buffer\n vbUint16[normalIndex]=t mpVec.x;\n vbUint16[normalIndex + 1]=t mpVec.y;\n }\n }\n};\n\n// read matrix i from Float32 array to target LmvMatrix4\nfunction getMatrix(index, array, target) {\n // TypedArray.set does not support a srcOffset parameter. So we have to use manual copy here.\n var offset=1 6 * index;\n for (var i=0 ; i < 16; i++) {\n target.elements[i]=a rray[i + offset];\n }\n}\n\n/**\n * Run merge task. This can be done using Vector/Matrix types from THREE (in main) or LmvVector/LmvMatrix (worker).\n * To define which types to use while keeping the code independent, a preallocated matrix/vector must be provided.\n *\n * @param {LmvMatrix4|THREE.Matrix4} matrix\n * @param {LmvVector3|THREE.Vector3} vector\n * @returns {Object} - merge result r, containing\n * {number} r.id: task id\n * {Float32Array} r.vb: merged interleaved vertex buffer\n * {Uint8Array} r.vertexIds: buffer for separate per-vertex id attribute\n */\nGeomMergeTask.prototype.run=f unction (matrix, vec) {\n\n var vb=t his.vb;\n var vertexCount=v b.length / this.vbstride;\n\n var tmpMatrix=m atrix.clone();\n\n // create buffer for per-vertex ids of consolidated mesh\n var IDBytesPerVertex=3 ;\n var dstIds=n ew Uint8Array(IDBytesPerVertex * vertexCount);\n\n // to transform normals, we need an Uint16-view to the interleaved vertex buffer.\n // packed normals are 2-component Uin16-vectors.\n var hasNormals=t his.normalOffset !==- 1;\n var vbUint16=h asNormals ? new Uint16Array(vb.buffer, vb.byteOffset, vb.length * 2) : null;\n\n // transform vertex-range and write ids. Each range corresponds to a source fragment geometry\n var ranges=t his.ranges;\n var matrices=t his.matrices;\n var numRanges=r anges.length - 1; // note that ranges contains an extra element for the last range end\n for (var j=0 ; j < numRanges; j++) {\n\n // get vertex range corresponding to src geom i\n var rangeBegin=r anges[j];\n var rangeEnd=r anges[j + 1];\n\n // get matrix for src geom i\n getMatrix(j, matrices, matrix);\n\n // transform vertex positions and normals in this range\n transformVertexRange(this, vbUint16, matrix, rangeBegin, rangeEnd, tmpMatrix, vec);\n\n // assign dbId to all vertices of this range\n var dstIdsByteOffset=r angeBegin * IDBytesPerVertex;\n var rangeLength=r angeEnd - rangeBegin;\n var dbId=t his.dbIds[j];\n for (var k=0 ; k < rangeLength; k++) {\n writeIdToBuffer(dbId, dstIds, dstIdsByteOffset);\n dstIdsByteOffset +=I DBytesPerVertex;\n }\n }\n\n // return result object. It contains everything we need to finish a single consolidated mesh.\n return {\n taskId: this.id,\n vb: this.vb, // note that we have to pass back the byte-view\n vertexIds: dstIds\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvd2dzL3NjZW5lL2NvbnNvbGlkYXRpb24vR2VvbU1lcmdlVGFzay5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSUEsV0FBVyxHQUFHLENBQUM7QUFDbkIsU0FBU0MsWUFBWUEsQ0FBQSxFQUFJLENBQUUsT0FBT0QsV0FBVyxFQUFFLENBQUU7O0FBRTFDLFNBQVNFLGFBQWFBLENBQUEsRUFBRzs7RUFFNUI7RUFDQSxJQUFJLENBQUNDLEVBQUUsR0FBRyxJQUFJOztFQUVkO0VBQ0EsSUFBSSxDQUFDQyxRQUFRLEdBQUcsQ0FBQzs7RUFFakI7RUFDQSxJQUFJLENBQUNDLFNBQVMsR0FBTSxDQUFDO0VBQ3JCLElBQUksQ0FBQ0MsWUFBWSxHQUFHLENBQUM7O0VBRXJCO0VBQ0EsSUFBSSxDQUFDQyxRQUFRLEdBQUcsSUFBSTtFQUNwQixJQUFJLENBQUNDLE1BQU0sR0FBSyxJQUFJOztFQUVwQjtFQUNBLElBQUksQ0FBQ0MsS0FBSyxHQUFHLElBQUk7O0VBRWpCO0VBQ0EsSUFBSSxDQUFDQyxFQUFFLEdBQUdULFlBQVksQ0FBQyxDQUFDO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTVSxZQUFZQSxDQUFDQyxNQUFNLEVBQUU7RUFDMUJBLE1BQU0sQ0FBQ0MsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDSCxNQUFNLENBQUNJLENBQUMsRUFBRUosTUFBTSxDQUFDQyxDQUFDLENBQUMsR0FBQ0MsSUFBSSxDQUFDRyxFQUFFLENBQUM7RUFDL0RMLE1BQU0sQ0FBQ0ksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUdKLE1BQU0sQ0FBQ00sQ0FBQyxDQUFDO0VBQ2pDTixNQUFNLENBQUNNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxT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QUNBLE9BQU87SUFDSGEsTUFBTSxFQUFLLElBQUksQ0FBQ3hFLEVBQUU7SUFDbEJQLEVBQUUsRUFBUyxJQUFJLENBQUNBLEVBQUUsRUFBRTtJQUNwQmdGLFNBQVMsRUFBRWI7RUFDZixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy93Z3Mvc2NlbmUvY29uc29saWRhdGlvbi9HZW9tTWVyZ2VUYXNrLmpzPzYxYWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIEdlb21NZXJnZVRhc2sgaXMgdXNlZCBmb3IgbWVzaCBjb25zb2xpZGF0aW9uLiBJdCBmaWxscyB2ZXJ0ZXggYnVmZmVyIGFuZCBpZCBidWZmZXIgb2YgYSBjb25zb2xpZGF0ZWQgbWVzaFxuICogYmFzZWQgb24gYSBzZXQgb2YgY29tcGF0aWJsZSBpbnB1dCBtZXNoZXMuXG4gKlxuICogR2VvbU1lcmdlVGFzayBpcyBzaGFyZWQgYnkgbWFpbiB3Z3Mgc2NyaXB0IGFuZCB3b3JrZXIgc2NyaXB0LCBzbyB0aGF0IHRoZSBzYW1lIGNvZGUgY2FuIGJlIHVzZWQgZm9yIHNpbmdsZS10aHJlYWRlZFxuICogYW5kIG11bHRpLXRocmVhZGVkIGNvbnNvbGlkYXRpb24uXG4gKi9cblxuLy8gdW5pcXVlIHRhc2sgaWRzXG52YXIgX25leHRUYXNrSWQgPSAxO1xuZnVuY3Rpb24gY3JlYXRlVGFza0lkKCkgIHsgcmV0dXJuIF9uZXh0VGFza0lkKys7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIEdlb21NZXJnZVRhc2soKSB7XG5cbiAgICAvLyBJbnRlcmxlYXZlZCB2ZXJ0ZXggYnVmZmVycyBhcyBGbG9hdDMyQXJyYXkuXG4gICAgdGhpcy52YiA9IG51bGw7XG5cbiAgICAvLyBmbG9hdHMgcGVyIHZlcnRleFxuICAgIHRoaXMudmJzdHJpZGUgPSAwO1xuXG4gICAgLy8gb2Zmc2V0cyBpbiBmbG9hdHMgd2hlcmUgdG8gZmluZCBwb3NpdGlvbi9ub3JtYWwgaW4gdmVydGV4IGJ1ZmZlclxuICAgIHRoaXMucG9zT2Zmc2V0ICAgID0gMDtcbiAgICB0aGlzLm5vcm1hbE9mZnNldCA9IDA7XG5cbiAgICAvLyBtYXRyaWNlcyBwZXIgc3JjLWdlb20gKEZsb2F0MzJBcnJheSB3aXRoIDE2IGZsb2F0cyBwZXIgbWF0cml4KVxuICAgIHRoaXMubWF0cmljZXMgPSBudWxsO1xuICAgIHRoaXMucmFuZ2VzICAgPSBudWxsO1xuXG4gICAgLy8gbXVzdCBiZSBhbiBVaW50MzJBcnJheSB0aGF0IHdlIGNhbiBlZmZpY2llbnRseSBoYW5kLW92ZXIgdG8gdGhlIHdvcmtlclxuICAgIHRoaXMuZGJJZHMgPSBudWxsO1xuXG4gICAgLy8gdW5pcXVlIHRhc2staWQgdXNlZCB0byBmaW5kIEJ1ZmZlckdlb21ldHJ5IHdoZW4gYSBtZXJnZWQgdmIgaXMgcmV0dXJuZWQgZnJvbSB3b3JrZXJcbiAgICB0aGlzLmlkID0gY3JlYXRlVGFza0lkKCk7XG59XG5cbi8qKlxuICogIFBhY2tzIGEgVmVjdG9yMyBub3JtYWwgdmVjdG9yIGludG8gMiBjb21wb25lbnRzLiBUaGlzIGlzIGEgQ1BVLXNpZGUgaW1wbGVtZW50YXRpb24gb2YgUGFja05vcm1hbHNTaGFkZXJDaHVua1xuICogIChzZWUgU2hhZGVyQ2h1bmtzLmpzKVxuICpcbiAqICAgQHBhcmFtIHtUSFJFRS5WZWN0b3IzfExtdlZlY3RvcjN9IG5vcm1hbCAtIEluT3V0IG5vcm1hbCB2ZWN0b3IuXG4gKlxuICogIE5vdGUgdGhhdCAnbm9ybWFsJyBtdXN0IGJlIG5vcm1hbGl6ZWQhXG4gKi9cbmZ1bmN0aW9uIGVuY29kZU5vcm1hbChub3JtYWwpIHtcbiAgICBub3JtYWwueCA9IDAuNSAqICgxLjAgKyBNYXRoLmF0YW4yKG5vcm1hbC55LCBub3JtYWwueCkvTWF0aC5QSSk7XG4gICAgbm9ybWFsLnkgPSAwLjUgKiAoMS4wICsgbm9ybWFsLnopO1xuICAgIG5vcm1hbC56ID0gMC4wOyAvLyBub3QgdXNlZCBmb3IgcmVzdWx0XG59XG5cbi8qKlxuICogQHBhcmFtIHtUSFJFRS5WZWN0b3IzfExtdlZlY3RvcjN9IG5vcm1hbCAtIEluT3V0IG5vcm1hbCB2ZWN0b3IuIElucHV0IHogaXMgaWdub3JlZC5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlTm9ybWFsKG5vcm1hbCkge1xuICAgIHZhciBhbmdYICAgPSAyLjAgKiBub3JtYWwueCAtIDEuMDtcbiAgICB2YXIgYW5nWSAgID0gMi4wICogbm9ybWFsLnkgLSAxLjA7XG4gICAgdmFyIHNjdGhYICA9IE1hdGguc2luKGFuZ1ggKiBNYXRoLlBJKTtcbiAgICB2YXIgc2N0aFkgID0gTWF0aC5jb3MoYW5nWCAqIE1hdGguUEkpO1xuICAgIHZhciBzY3BoaVggPSBNYXRoLnNxcnQoMS4wIC0gYW5nWSAqIGFuZ1kpO1xuICAgIHZhciBzY3BoaVkgPSBhbmdZO1xuICAgIG5vcm1hbC54ID0gc2N0aFkgKiBzY3BoaVg7XG4gICAgbm9ybWFsLnkgPSBzY3RoWCAqIHNjcGhpWDtcbiAgICBub3JtYWwueiA9IHNjcGhpWTtcbn1cblxuLyoqXG4gKiAgV3JpdGVzIGEgZGJJZCBpbnRvIDQgc3Vic2VxdWVudCBieXRlcyBvZiBhbiBVaW50OEFycmF5LiAoNHRoIGlzIG9ubHkgZm9yIGFsaWdubWVudCBhbmQgYWx3YXlzIDApXG4gKiAgIEBwYXJhbSB7TnVtYmVyfSAgICAgZGJJZFxuICogICBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlclVpbnQ4IC0gdmlldyBpbnRvIHRoZSB2ZXJ0ZXggYnVmZmVyIHRoYXQgd2Ugd3JpdGUgdG8uXG4gKiAgIEBwYXJhbSB7TnVtYmVyfSAgICAgd3JpdGVJbmRleCAgLSBJbmRleCBpbnRvIHRoZSB1aW50OCBhcnJheSB3aGVyZSB3ZSB3cml0ZSB0aGUgZmlyc3QgYnl0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlSWRUb0J1ZmZlcihkYklkLCBidWZmZXJVaW50OCwgd3JpdGVJbmRleCkge1xuICAgIGJ1ZmZlclVpbnQ4W3dyaXRlSW5kZXgrK10gPSAgZGJJZCAgICAgICAgJiAweGZmO1xuICAgIGJ1ZmZlclVpbnQ4W3dyaXRlSW5kZXgrK10gPSAoZGJJZCA+PiA4KSAgJiAweGZmO1xuICAgIGJ1ZmZlclVpbnQ4W3dyaXRlSW5kZXgrK10gPSAoZGJJZCA+PiAxNikgJiAweGZmO1xuICAgIGJ1ZmZlclVpbnQ4W3dyaXRlSW5kZXhdICAgPSAwOyAvLyBkYklkcyBhcmUgb25seSB2ZWMzIGluIHRoZSBzaGFkZXJcbn1cblxuLy8gV2UgZG9uJ3QgaGF2ZSBUSFJFRS5NYXRyaXgzIGluIGEgd29ya2VyLCBzbyB0aGF0IHdlIGNhbm5vdCB1c2UgZ2V0Tm9ybWFsVHJhbnNmb3JtKClcbmZ1bmN0aW9uIGdldE5vcm1hbE1hdHJpeChtYXRyaXgsIGRzdE1hdHJpeCkge1xuXG4gICAgLy8gZWxpbWluYXRlIHRyYW5zbGF0aW9uIHBhcnRcbiAgICBkc3RNYXRyaXguY29weShtYXRyaXgpO1xuICAgIGRzdE1hdHJpeFsgMTIgXSA9IDA7XG4gICAgZHN0TWF0cml4WyAxMyBdID0gMDtcbiAgICBkc3RNYXRyaXhbIDE0IF0gPSAwO1xuXG4gICAgLy8gdHJhbnBvc2Ugb2YgaW52ZXJzZVxuICAgIHJldHVybiBkc3RNYXRyaXguaW52ZXJ0KCkudHJhbnNwb3NlKCk7XG59XG5cbi8qKlxuICogIFRyYW5zZm9ybXMgcG9zaXRpb25zIGFuZCBub3JtYWxzIG9mIGEgdmVydGV4IGJ1ZmZlciByYW5nZS5cbiAqXG4gKiAgTk9URTogT25seSBpbnRlcmxlYXZlZCBidWZmZXJzIHdpdGggcGFja2VkIG5vcm1hbHMgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiAgIEBwYXJhbSB7R2VvbU1lcmdlVGFza30gZ2VvbVxuICogICBAcGFyYW0ge1VpbnQxNkFycmF5fSAgIHZiVWludDE2ICAgICAtIGFkZGl0aW9uYWwgdWludDE2LXZpZXcgdG8gaW50ZXJsZWF2ZWQgdmVydGV4LWJ1ZmZlclxuICogICBAcGFyYW0ge0xtdk1hdHJpeDR9ICAgIG1hdHJpeFxuICogICBAcGFyYW0ge051bWJlcn0gICAgICAgIFtyYW5nZVN0YXJ0XSAtIEZpcnN0IHZlcnRleCB0byB0cmFuc2Zvcm0uIChkZWZhdWx0OiAwKVxuICogICBAcGFyYW0ge051bWJlcn0gICAgICAgIFtyYW5nZUVuZF0gICAtIEVuZCBvZiB2ZXJ0ZXggcmFuZ2UuICAgICAgIChkZWZhdWx0OiAjdmVydGljZXMpXG4gKiAgIEBwYXJhbSB7TG12TWF0cml4NH0gICAgdG1wTWF0cml4ICAgIC0gcmV1c2VkIHRtcCBtYXRyaXhcbiAqICAgQHBhcmFtIHtMbXZWZWN0b3IzfSAgICB0bXBWZWMgICAgICAgLSByZXVzZWQgdG1wIHZlY3RvclxuICovXG52YXIgdHJhbnNmb3JtVmVydGV4UmFuZ2UgPSBmdW5jdGlvbihnZW9tLCB2YlVpbnQxNiwgbWF0cml4LCByYW5nZVN0YXJ0LCByYW5nZUVuZCwgdG1wTWF0cml4LCB0bXBWZWMpIHtcblxuICAgIC8vIHRyYW5zZm9ybSBwb3NpdGlvbnNcbiAgICB2YXIgcG9zT2Zmc2V0ID0gZ2VvbS5wb3NPZmZzZXQ7XG4gICAgZm9yICh2YXIgaT1yYW5nZVN0YXJ0OyBpPHJhbmdlRW5kOyBpKyspIHtcblxuICAgICAgICAvLyByZWFkIHZlcnRleCBwb3NpdGlvbiBpXG4gICAgICAgIHZhciBvZmZzZXQgPSAgaSAqIGdlb20udmJzdHJpZGUgKyBwb3NPZmZzZXQ7XG4gICAgICAgIHRtcFZlYy5zZXQoZ2VvbS52YltvZmZzZXRdLCBnZW9tLnZiW29mZnNldCsxXSwgZ2VvbS52YltvZmZzZXQrMl0pO1xuXG4gICAgICAgIHRtcFZlYy5hcHBseU1hdHJpeDQobWF0cml4KTtcblxuICAgICAgICAvLyB3cml0ZSB2ZXJ0ZXggcG9zaXRpb24gaVxuICAgICAgICBnZW9tLnZiW29mZnNldF0gICAgID0gdG1wVmVjLng7XG4gICAgICAgIGdlb20udmJbb2Zmc2V0ICsgMV0gPSB0bXBWZWMueTtcbiAgICAgICAgZ2VvbS52YltvZmZzZXQgKyAyXSA9IHRtcFZlYy56O1xuICAgIH1cblxuICAgIC8vIHRyYW5zZm9ybSBub3JtYWxzIChpZiBhdmFpbGFibGUpXG4gICAgaWYgKGdlb20ubm9ybWFsT2Zmc2V0ICE9PSAtMSkge1xuXG4gICAgICAgIC8vIFRvIHRyYW5zZm9ybSBub3JtYWxzLCB3ZSBuZWVkIGFuIFVpbnQxNi12aWV3IHRvIHRoZSBkYXRhLlxuICAgICAgICAvLyBQYWNrZWQgbm9ybWFscyBhcmUgMi1jb21wb25lbnQgVWludDE2LXZlY3RvcnMuXG4gICAgICAgIHZhciB1aW50MTZQZXJWZXJ0ZXggICAgPSBnZW9tLnZic3RyaWRlICogMjsgICAgICAgICAgIC8vIE11bHRpcGx5IGJ5IDIsIGJlY2F1c2UgdmJzdHJpZGUgYW5kIG9mZnNldFxuICAgICAgICB2YXIgdWludDE2Tm9ybWFsT2Zmc2V0ID0gZ2VvbS5ub3JtYWxPZmZzZXQgKiAyOyAvLyBhcmUgY291bnRpbmcgMzJCaXQgZmxvYXRzLlxuICAgICAgICB2YXIgbWF4VWludDE2ICAgICAgICAgID0gMHhGRkZGO1xuXG4gICAgICAgIC8vIGNvbXB1dGUgbm9ybWFsIHRyYW5zZm9ybVxuICAgICAgICB2YXIgbm9ybWFsTWF0cml4ID0gZ2V0Tm9ybWFsTWF0cml4KG1hdHJpeCwgdG1wTWF0cml4KTtcblxuICAgICAgICAvLyB0cmFuc2Zvcm0gbm9ybWFsIHZlY3RvcnNcbiAgICAgICAgZm9yIChpPXJhbmdlU3RhcnQ7IGk8cmFuZ2VFbmQ7IGkrKykge1xuICAgICAgICAgICAgLy8gcmVhZCBieXRlLW5vcm1hbCBvZiB2ZXJ0ZXggaVxuICAgICAgICAgICAgdmFyIG5vcm1hbEluZGV4ID0gaSAqIHVpbnQxNlBlclZlcnRleCArIHVpbnQxNk5vcm1hbE9mZnNldDtcbiAgICAgICAgICAgIHRtcFZlYy5zZXQodmJVaW50MTZbbm9ybWFsSW5kZXhdLCB2YlVpbnQxNltub3JtYWxJbmRleCsxXSwgMC4wKTtcblxuICAgICAgICAgICAgLy8gZGVjb2RlIHRvIHZlYzMgd2l0aCBjb21wb25lbnRzIGluIFswLDFdXG4gICAgICAgICAgICB0bXBWZWMuZGl2aWRlU2NhbGFyKG1heFVpbnQxNik7XG4gICAgICAgICAgICBkZWNvZGVOb3JtYWwodG1wVmVjKTtcblxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IG5vcm1hbE1hdHJpeCBpcyBhIExtdk1hdHJpeDQgKGFsdGhvdWdoIHdlIG9ubHkgdXNlIDN4MyBtYXRyaXgpXG4gICAgICAgICAgICB0bXBWZWMuYXBwbHlNYXRyaXg0KG5vcm1hbE1hdHJpeCk7XG5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBlbmNvZGVOb3JtYWwgcmVxdWlyZXMgbm9ybWFsaXplZCB2YWx1ZXMuIEFsdGhvdWdoIGEgZGVjb2RlZE5vcm1hbCBpc1xuICAgICAgICAgICAgLy8gYWx3YXlzIG5vcm1hbGl6ZWQsIHRoZSBub3JtYWxNYXRyaXggbWF5IGludm9sdmUgYSBzY2FsaW5nLlxuICAgICAgICAgICAgdG1wVmVjLm5vcm1hbGl6ZSgpO1xuXG4gICAgICAgICAgICAvLyBlbmNvZGUgYmFjayB0byAyLWNvbXBvbmVudCB1aW50MTZcbiAgICAgICAgICAgIGVuY29kZU5vcm1hbCh0bXBWZWMpO1xuICAgICAgICAgICAgdG1wVmVjLm11bHRpcGx5U2NhbGFyKG1heFVpbnQxNik7XG5cbiAgICAgICAgICAgIC8vIHdyaXRlIGJhY2sgdG8gdmVydGV4IGJ1ZmZlclxuICAgICAgICAgICAgdmJVaW50MTZbbm9ybWFsSW5kZXhdICAgICA9IHRtcFZlYy54O1xuICAgICAgICAgICAgdmJVaW50MTZbbm9ybWFsSW5kZXggKyAxXSA9IHRtcFZlYy55O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gcmVhZCBtYXRyaXggaSBmcm9tIEZsb2F0MzIgYXJyYXkgdG8gdGFyZ2V0IExtdk1hdHJpeDRcbmZ1bmN0aW9uIGdldE1hdHJpeChpbmRleCwgYXJyYXksIHRhcmdldCkge1xuICAgIC8vIFR5cGVkQXJyYXkuc2V0IGRvZXMgbm90IHN1cHBvcnQgYSBzcmNPZmZzZXQgcGFyYW1ldGVyLiBTbyB3ZSBoYXZlIHRvIHVzZSBtYW51YWwgY29weSBoZXJlLlxuICAgIHZhciBvZmZzZXQgPSAxNiAqIGluZGV4O1xuICAgIGZvciAodmFyIGk9MDsgaTwxNjsgaSsrKSB7XG4gICAgICAgIHRhcmdldC5lbGVtZW50c1tpXSA9IGFycmF5W2krb2Zmc2V0XTtcbiAgICB9XG59XG5cbi8qKlxuICogIFJ1biBtZXJnZSB0YXNrLiBUaGlzIGNhbiBiZSBkb25lIHVzaW5nIFZlY3Rvci9NYXRyaXggdHlwZXMgZnJvbSBUSFJFRSAoaW4gbWFpbikgb3IgTG12VmVjdG9yL0xtdk1hdHJpeCAod29ya2VyKS5cbiAqICBUbyBkZWZpbmUgd2hpY2ggdHlwZXMgdG8gdXNlIHdoaWxlIGtlZXBpbmcgdGhlIGNvZGUgaW5kZXBlbmRlbnQsIGEgcHJlYWxsb2NhdGVkIG1hdHJpeC92ZWN0b3IgbXVzdCBiZSBwcm92aWRlZC5cbiAqXG4gKiAgQHBhcmFtIHtMbXZNYXRyaXg0fFRIUkVFLk1hdHJpeDR9IG1hdHJpeFxuICogIEBwYXJhbSB7TG12VmVjdG9yM3xUSFJFRS5WZWN0b3IzfSB2ZWN0b3JcbiAqICBAcmV0dXJucyB7T2JqZWN0fSAtIG1lcmdlIHJlc3VsdCByLCBjb250YWluaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9ICAgICAgIHIuaWQ6ICAgICAgICB0YXNrIGlkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHtGbG9hdDMyQXJyYXl9IHIudmI6ICAgICAgICBtZXJnZWQgaW50ZXJsZWF2ZWQgdmVydGV4IGJ1ZmZlclxuICogICAgICAgICAgICAgICAgICAgICAgICB7VWludDhBcnJheX0gICByLnZlcnRleElkczogYnVmZmVyIGZvciBzZXBhcmF0ZSBwZXItdmVydGV4IGlkIGF0dHJpYnV0ZVxuICovXG5HZW9tTWVyZ2VUYXNrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbihtYXRyaXgsIHZlYykge1xuXG4gICAgdmFyIHZiICAgICAgICAgID0gdGhpcy52YjtcbiAgICB2YXIgdmVydGV4Q291bnQgPSB2Yi5sZW5ndGggLyB0aGlzLnZic3RyaWRlO1xuXG4gICAgdmFyIHRtcE1hdHJpeCA9IG1hdHJpeC5jbG9uZSgpO1xuXG4gICAgLy8gY3JlYXRlIGJ1ZmZlciBmb3IgcGVyLXZlcnRleCBpZHMgb2YgY29uc29saWRhdGVkIG1lc2hcbiAgICB2YXIgSURCeXRlc1BlclZlcnRleCA9IDM7XG4gICAgdmFyIGRzdElkcyA9IG5ldyBVaW50OEFycmF5KElEQnl0ZXNQZXJWZXJ0ZXggKiB2ZXJ0ZXhDb3VudCk7XG5cbiAgICAvLyB0byB0cmFuc2Zvcm0gbm9ybWFscywgd2UgbmVlZCBhbiBVaW50MTYtdmlldyB0byB0aGUgaW50ZXJsZWF2ZWQgdmVydGV4IGJ1ZmZlci5cbiAgICAvLyBwYWNrZWQgbm9ybWFscyBhcmUgMi1jb21wb25lbnQgVWluMTYtdmVjdG9ycy5cbiAgICB2YXIgaGFzTm9ybWFscyA9ICh0aGlzLm5vcm1hbE9mZnNldCAhPT0gLTEpO1xuICAgIHZhciB2YlVpbnQxNiA9IChoYXNOb3JtYWxzID8gbmV3IFVpbnQxNkFycmF5KHZiLmJ1ZmZlciwgdmIuYnl0ZU9mZnNldCwgdmIubGVuZ3RoICogMikgOiBudWxsKTtcblxuICAgIC8vIHRyYW5zZm9ybSB2ZXJ0ZXgtcmFuZ2UgYW5kIHdyaXRlIGlkcy4gRWFjaCByYW5nZSBjb3JyZXNwb25kcyB0byBhIHNvdXJjZSBmcmFnbWVudCBnZW9tZXRyeVxuICAgIHZhciByYW5nZXMgICAgPSB0aGlzLnJhbmdlcztcbiAgICB2YXIgbWF0cmljZXMgID0gdGhpcy5tYXRyaWNlcztcbiAgICB2YXIgbnVtUmFuZ2VzID0gcmFuZ2VzLmxlbmd0aCAtIDE7IC8vIG5vdGUgdGhhdCByYW5nZXMgY29udGFpbnMgYW4gZXh0cmEgZWxlbWVudCBmb3IgdGhlIGxhc3QgcmFuZ2UgZW5kXG4gICAgZm9yICh2YXIgaj0wOyBqPG51bVJhbmdlczsgaisrKSB7XG5cbiAgICAgICAgLy8gZ2V0IHZlcnRleCByYW5nZSBjb3JyZXNwb25kaW5nIHRvIHNyYyBnZW9tIGlcbiAgICAgICAgdmFyIHJhbmdlQmVnaW4gPSByYW5nZXNbal07XG4gICAgICAgIHZhciByYW5nZUVuZCAgID0gcmFuZ2VzW2orMV07XG5cbiAgICAgICAgLy8gZ2V0IG1hdHJpeCBmb3Igc3JjIGdlb20gaVxuICAgICAgICBnZXRNYXRyaXgoaiwgbWF0cmljZXMsIG1hdHJpeCk7XG5cbiAgICAgICAgLy8gdHJhbnNmb3JtIHZlcnRleCBwb3NpdGlvbnMgYW5kIG5vcm1hbHMgaW4gdGhpcyByYW5nZVxuICAgICAgICB0cmFuc2Zvcm1WZXJ0ZXhSYW5nZSh0aGlzLCB2YlVpbnQxNiwgbWF0cml4LCByYW5nZUJlZ2luLCByYW5nZUVuZCwgdG1wTWF0cml4LCB2ZWMpO1xuXG4gICAgICAgIC8vIGFzc2lnbiBkYklkIHRvIGFsbCB2ZXJ0aWNlcyBvZiB0aGlzIHJhbmdlXG4gICAgICAgIHZhciBkc3RJZHNCeXRlT2Zmc2V0ID0gcmFuZ2VCZWdpbiAqIElEQnl0ZXNQZXJWZXJ0ZXg7XG4gICAgICAgIHZhciByYW5nZUxlbmd0aCA9IHJhbmdlRW5kIC0gcmFuZ2VCZWdpbjtcbiAgICAgICAgdmFyIGRiSWQgPSB0aGlzLmRiSWRzW2pdO1xuICAgICAgICBmb3IgKHZhciBrPTA7IGs8cmFuZ2VMZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgd3JpdGVJZFRvQnVmZmVyKGRiSWQsIGRzdElkcywgZHN0SWRzQnl0ZU9mZnNldCk7XG4gICAgICAgICAgICBkc3RJZHNCeXRlT2Zmc2V0ICs9IElEQnl0ZXNQZXJWZXJ0ZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm4gcmVzdWx0IG9iamVjdC4gSXQgY29udGFpbnMgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGZpbmlzaCBhIHNpbmdsZSBjb25zb2xpZGF0ZWQgbWVzaC5cbiAgICByZXR1cm4ge1xuICAgICAgICB0YXNrSWQ6ICAgIHRoaXMuaWQsXG4gICAgICAgIHZiOiAgICAgICAgdGhpcy52YiwgLy8gbm90ZSB0aGF0IHdlIGhhdmUgdG8gcGFzcyBiYWNrIHRoZSBieXRlLXZpZXdcbiAgICAgICAgdmVydGV4SWRzOiBkc3RJZHMsXG4gICAgfTtcbn07XG4iXSwibmFtZXMiOlsiX25leHRUYXNrSWQiLCJjcmVhdGVUYXNrSWQiLCJHZW9tTWVyZ2VUYXNrIiwidmIiLCJ2YnN0cmlkZSIsInBvc09mZnNldCIsIm5vcm1hbE9mZnNldCIsIm1hdHJpY2VzIiwicmFuZ2VzIiwiZGJJZHMiLCJpZCIsImVuY29kZU5vcm1hbCIsIm5vcm1hbCIsIngiLCJNYXRoIiwiYXRhbjIiLCJ5IiwiUEkiLCJ6IiwiZGVjb2RlTm9ybWFsIiwiYW5nWCIsImFuZ1kiLCJzY3RoWCIsInNpbiIsInNjdGhZIiwiY29zIiwic2NwaGlYIiwic3FydCIsInNjcGhpWSIsIndyaXRlSWRUb0J1ZmZlciIsImRiSWQiLCJidWZmZXJVaW50OCIsIndyaXRlSW5kZXgiLCJnZXROb3JtYWxNYXRyaXgiLCJtYXRyaXgiLCJkc3RNYXRyaXgiLCJjb3B5IiwiaW52ZXJ0IiwidHJhbnNwb3NlIiwidHJhbnNmb3JtVmVydGV4UmFuZ2UiLCJnZW9tIiwidmJVaW50MTYiLCJyYW5nZVN0YXJ0IiwicmFuZ2VFbmQiLCJ0bXBNYXRyaXgiLCJ0bXBWZWMiLCJpIiwib2Zmc2V0Iiwic2V0IiwiYXBwbHlNYXRyaXg0IiwidWludDE2UGVyVmVydGV4IiwidWludDE2Tm9ybWFsT2Zmc2V0IiwibWF4VWludDE2Iiwibm9ybWFsTWF0cml4Iiwibm9ybWFsSW5kZXgiLCJkaXZpZGVTY2FsYXIiLCJub3JtYWxpemUiLCJtdWx0aXBseVNjYWxhciIsImdldE1hdHJpeCIsImluZGV4IiwiYXJyYXkiLCJ0YXJnZXQiLCJlbGVtZW50cyIsInByb3RvdHlwZSIsInJ1biIsInZlYyIsInZlcnRleENvdW50IiwibGVuZ3RoIiwiY2xvbmUiLCJJREJ5dGVzUGVyVmVydGV4IiwiZHN0SWRzIiwiVWludDhBcnJheSIsImhhc05vcm1hbHMiLCJVaW50MTZBcnJheSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJudW1SYW5nZXMiLCJqIiwicmFuZ2VCZWdpbiIsImRzdElkc0J5dGVPZmZzZXQiLCJyYW5nZUxlbmd0aCIsImsiLCJ0YXNrSWQiLCJ2ZXJ0ZXhJZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/wgs/scene/consolidation/GeomMergeTask.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/a-callable.js ": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/a-callable.js ***! \******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\nvar tryToString=_ _webpack_require__(/*! ../internals/try-to-string */ \ "./node_modules/core-js/internals/try-to-string.js\");\n\nvar $TypeError=T ypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports=f unction (argument) {\n if (isCallable(argument)) return argument;\n throw $TypeError(tryToString(argument) + ' is not a function');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxrQkFBa0IsbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcz81OWVkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/a-callable.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/a-constructor.js ": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/a-constructor.js ***! \*********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar isConstructor=_ _webpack_require__(/*! ../internals/is-constructor */ \ "./node_modules/core-js/internals/is-constructor.js\");\nvar tryToString=_ _webpack_require__(/*! ../internals/try-to-string */ \ "./node_modules/core-js/internals/try-to-string.js\");\n\nvar $TypeError=T ypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports=f unction (argument) {\n if (isConstructor(argument)) return argument;\n throw $TypeError(tryToString(argument) + ' is not a constructor');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLG9CQUFvQixtQkFBTyxDQUFDLHVGQUE2QjtBQUN6RCxrQkFBa0IsbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcz81MDg3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/a-constructor.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/a-map.js ": /*!*************************************************!*\ !*** ./node_modules/core-js/internals/a-map.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar has=( __webpack_require__(/*! ../internals/map-helpers */ \ "./node_modules/core-js/internals/map-helpers.js\").has);\n\n// Perform ? RequireInternalSlot(M, [[MapData]])\nmodule.exports=f unction (it) {\n has(it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1tYXAuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLDRHQUF1Qzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLW1hcC5qcz9kYjgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbTWFwRGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/a-map.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/a-possible-prototype.js ": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/a-possible-prototype.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\n\nvar $String=S tring;\nvar $TypeError=T ypeError;\n\nmodule.exports=f unction (argument) {\n if (typeof argument=='object' || isCallable(argument)) return argument;\n throw $TypeError(\ "Can't set \" + $String(argument) + ' as a prototype');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRW5EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanM/M2JiZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/a-possible-prototype.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/a-set.js ": /*!*************************************************!*\ !*** ./node_modules/core-js/internals/a-set.js ***! \*************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar has=( __webpack_require__(/*! ../internals/set-helpers */ \ "./node_modules/core-js/internals/set-helpers.js\").has);\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports=f unction (it) {\n has(it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1zZXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLDRHQUF1Qzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcz9kYzE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/a-set.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/a-weak-map.js ": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/a-weak-map.js ***! \******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar has=( __webpack_require__(/*! ../internals/weak-map-helpers */ \ "./node_modules/core-js/internals/weak-map-helpers.js\").has);\n\n// Perform ? RequireInternalSlot(M, [[WeakMapData]])\nmodule.exports=f unction (it) {\n has(it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS13ZWFrLW1hcC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFVBQVUsc0hBQTRDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Etd2Vhay1tYXAuanM/NmEyOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbV2Vha01hcERhdGFdXSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGhhcyhpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/a-weak-map.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/a-weak-set.js ": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/a-weak-set.js ***! \******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar has=( __webpack_require__(/*! ../internals/weak-set-helpers */ \ "./node_modules/core-js/internals/weak-set-helpers.js\").has);\n\n// Perform ? RequireInternalSlot(M, [[WeakSetData]])\nmodule.exports=f unction (it) {\n has(it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS13ZWFrLXNldC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFVBQVUsc0hBQTRDOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Etd2Vhay1zZXQuanM/OThjZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbV2Vha1NldERhdGFdXSlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGhhcyhpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/a-weak-set.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/add-to-unscopables.js ": /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/add-to-unscopables.js ***! \**************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\nvar create=_ _webpack_require__(/*! ../internals/object-create */ \ "./node_modules/core-js/internals/object-create.js\");\nvar defineProperty=( __webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\").f);\n\nvar UNSCOPABLES=w ellKnownSymbol( 'unscopables');\nvar ArrayPrototype=A rray.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES]===u ndefined) {\n defineProperty(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports=f unction (key) {\n ArrayPrototype[UNSCOPABLES][key]=t rue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELGFBQWEsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDakQscUJBQXFCLGdJQUFnRDs7QUFFckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzPzQ0ZDIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoQXJyYXlQcm90b3R5cGUsIFVOU0NPUEFCTEVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBjcmVhdGUobnVsbClcbiAgfSk7XG59XG5cbi8vIGFkZCBhIGtleSB0byBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/add-to-unscopables.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/an-instance.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/an-instance.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar isPrototypeOf=_ _webpack_require__(/*! ../internals/object-is-prototype-of */ \ "./node_modules/core-js/internals/object-is-prototype-of.js\");\n\nvar $TypeError=T ypeError;\n\nmodule.exports=f unction (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw $TypeError( 'Incorrect invocation');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixvQkFBb0IsbUJBQU8sQ0FBQyx1R0FBcUM7O0FBRWpFOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzPzE5YWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyAkVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/an-instance.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/an-object.js ": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/an-object.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar isObject=_ _webpack_require__(/*! ../internals/is-object */ \ "./node_modules/core-js/internals/is-object.js\");\n\nvar $String=S tring;\nvar $TypeError=T ypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports=f unction (argument) {\n if (isObject(argument)) return argument;\n throw $TypeError($String(argument) + ' is not an object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcz84MjVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/an-object.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/array-buffer-basic-detection.js ": /*!************************************************************************!*\ !*** ./node_modules/core-js/internals/array-buffer-basic-detection.js ***! \************************************************************************/ /***/ ((module) => { "use strict "; eval("\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports=t ypeof ArrayBuffer !='undefined' && typeof DataView !='undefined' ;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLWJhc2ljLWRldGVjdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLWJhc2ljLWRldGVjdGlvbi5qcz80YjExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby10eXBlZC1hcnJheXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIERhdGFWaWV3ICE9ICd1bmRlZmluZWQnO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-buffer-basic-detection.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/array-buffer-non-extensible.js ": /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/array-buffer-non-extensible.js ***! \***********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\n\nmodule.exports=f ails(function () {\n if (typeof ArrayBuffer=='function' ) {\n var buffer=n ew ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxZQUFZLG1CQUFPLENBQUMscUVBQW9COztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSxVQUFVO0FBQ3BGO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanM/ZDg2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGJ1ZmZlcikpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWZmZXIsICdhJywgeyB2YWx1ZTogOCB9KTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-buffer-non-extensible.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/array-buffer-view-core.js ": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/array-buffer-view-core.js ***! \******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar NATIVE_ARRAY_BUFFER=_ _webpack_require__(/*! ../internals/array-buffer-basic-detection */ \ "./node_modules/core-js/internals/array-buffer-basic-detection.js\");\nvar DESCRIPTORS=_ _webpack_require__(/*! ../internals/descriptors */ \ "./node_modules/core-js/internals/descriptors.js\");\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\nvar isObject=_ _webpack_require__(/*! ../internals/is-object */ \ "./node_modules/core-js/internals/is-object.js\");\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar classof=_ _webpack_require__(/*! ../internals/classof */ \ "./node_modules/core-js/internals/classof.js\");\nvar tryToString=_ _webpack_require__(/*! ../internals/try-to-string */ \ "./node_modules/core-js/internals/try-to-string.js\");\nvar createNonEnumerableProperty=_ _webpack_require__(/*! ../internals/create-non-enumerable-property */ \ "./node_modules/core-js/internals/create-non-enumerable-property.js\");\nvar defineBuiltIn=_ _webpack_require__(/*! ../internals/define-built-in */ \ "./node_modules/core-js/internals/define-built-in.js\");\nvar defineBuiltInAccessor=_ _webpack_require__(/*! ../internals/define-built-in-accessor */ \ "./node_modules/core-js/internals/define-built-in-accessor.js\");\nvar isPrototypeOf=_ _webpack_require__(/*! ../internals/object-is-prototype-of */ \ "./node_modules/core-js/internals/object-is-prototype-of.js\");\nvar getPrototypeOf=_ _webpack_require__(/*! ../internals/object-get-prototype-of */ \ "./node_modules/core-js/internals/object-get-prototype-of.js\");\nvar setPrototypeOf=_ _webpack_require__(/*! ../internals/object-set-prototype-of */ \ "./node_modules/core-js/internals/object-set-prototype-of.js\");\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\nvar uid=_ _webpack_require__(/*! ../internals/uid */ \ "./node_modules/core-js/internals/uid.js\");\nvar InternalStateModule=_ _webpack_require__(/*! ../internals/internal-state */ \ "./node_modules/core-js/internals/internal-state.js\");\n\nvar enforceInternalState=I nternalStateModule.enforce;\nvar getInternalState=I nternalStateModule.get;\nvar Int8Array=g lobal.Int8Array;\nvar Int8ArrayPrototype=I nt8Array && Int8Array.prototype;\nvar Uint8ClampedArray=g lobal.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype=U int8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray=I nt8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype=I nt8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype=O bject.prototype;\nvar TypeError=g lobal.TypeError;\n\nvar TO_STRING_TAG=w ellKnownSymbol( 'toStringTag');\nvar TYPED_ARRAY_TAG=u id( 'TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR='TypedArrayConstructor' ;\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS=N ATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !=='Opera' ;\nvar TYPED_ARRAY_TAG_REQUIRED=f alse;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList={ \n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList={ \n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView=f unction isView(it) {\n if (!isObject(it)) return false;\n var klass=c lassof(it);\n return klass==='DataView' \n || hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor=f unction (it) {\n var proto=g etPrototypeOf(it);\n if (!isObject(proto)) return;\n var state=g etInternalState(proto);\n return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray=f unction (it) {\n if (!isObject(it)) return false;\n var klass=c lassof(it);\n return hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray=f unction (it) {\n if (isTypedArray(it)) return it;\n throw TypeError( 'Target is not a typed array');\n};\n\nvar aTypedArrayConstructor=f unction (C) {\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod=f unction (KEY, property, forced, options) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor=g lobal[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) {\n // old WebKit bug - some methods are non-configurable\n try {\n TypedArrayConstructor.prototype[KEY]=p roperty;\n } catch (error2) { /* empty */ }\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n }\n};\n\nvar exportTypedArrayStaticMethod=f unction (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor=g lobal[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor=g lobal[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n defineBuiltIn(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n Constructor=g lobal[NAME];\n Prototype=C onstructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR]=C onstructor;\n else NATIVE_ARRAY_BUFFER_VIEWS=f alse;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n Constructor=g lobal[NAME];\n Prototype=C onstructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR]=C onstructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray===F unction.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray=f unction TypedArray() {\n throw TypeError( 'Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype===O bjectPrototype) {\n TypedArrayPrototype=T ypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !==T ypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQUIRED=t rue;\n defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {\n configurable: true,\n get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n }\n });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports={ \n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n getTypedArrayConstructor: getTypedArrayConstructor,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDBCQUEwQixtQkFBTyxDQUFDLG1IQUEyQztBQUM3RSxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDcEQsYUFBYSxtQkFBTyxDQUFDLHVFQUFxQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxhQUFhLG1CQUFPLENBQUMsMkZBQStCO0FBQ3BELGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7QUFDNUMsa0JBQWtCLG1CQUFPLENBQUMscUZBQTRCO0FBQ3RELGtDQUFrQyxtQkFBTyxDQUFDLHVIQUE2QztBQUN2RixvQkFBb0IsbUJBQU8sQ0FBQyx5RkFBOEI7QUFDMUQsNEJBQTRCLG1CQUFPLENBQUMsMkdBQXVDO0FBQzNFLG9CQUFvQixtQkFBTyxDQUFDLHVHQUFxQztBQUNqRSxxQkFBcUIsbUJBQU8sQ0FBQyx5R0FBc0M7QUFDbkUscUJBQXFCLG1CQUFPLENBQUMseUdBQXNDO0FBQ25FLHNCQUFzQixtQkFBTyxDQUFDLDZGQUFnQztBQUM5RCxVQUFVLG1CQUFPLENBQUMsaUVBQWtCO0FBQ3BDLDBCQUEwQixtQkFBTyxDQUFDLHVGQUE2Qjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlCQUFpQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0JBQWdCO0FBQ3hCLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlLmpzP2ViYjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9BUlJBWV9CVUZGRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLWJhc2ljLWRldGVjdGlvbicpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgSW50OEFycmF5ID0gZ2xvYmFsLkludDhBcnJheTtcbnZhciBJbnQ4QXJyYXlQcm90b3R5cGUgPSBJbnQ4QXJyYXkgJiYgSW50OEFycmF5LnByb3RvdHlwZTtcbnZhciBVaW50OENsYW1wZWRBcnJheSA9IGdsb2JhbC5VaW50OENsYW1wZWRBcnJheTtcbnZhciBVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSA9IFVpbnQ4Q2xhbXBlZEFycmF5ICYmIFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZTtcbnZhciBUeXBlZEFycmF5ID0gSW50OEFycmF5ICYmIGdldFByb3RvdHlwZU9mKEludDhBcnJheSk7XG52YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IEludDhBcnJheVByb3RvdHlwZSAmJiBnZXRQcm90b3R5cGVPZihJbnQ4QXJyYXlQcm90b3R5cGUpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgVFlQRURfQVJSQVlfVEFHID0gdWlkKCdUWVBFRF9BUlJBWV9UQUcnKTtcbnZhciBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiA9ICdUeXBlZEFycmF5Q29uc3RydWN0b3InO1xuLy8gRml4aW5nIG5hdGl2ZSB0eXBlZCBhcnJheXMgaW4gT3BlcmEgUHJlc3RvIGNyYXNoZXMgdGhlIGJyb3dzZXIsIHNlZSAjNTk1XG52YXIgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IE5BVElWRV9BUlJBWV9CVUZGRVIgJiYgISFzZXRQcm90b3R5cGVPZiAmJiBjbGFzc29mKGdsb2JhbC5vcGVyYSkgIT09ICdPcGVyYSc7XG52YXIgVFlQRURfQVJSQVlfVEFHX1JFUVVJUkVEID0gZmFsc2U7XG52YXIgTkFNRSwgQ29uc3RydWN0b3IsIFByb3RvdHlwZTtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0ID0ge1xuICBJbnQ4QXJyYXk6IDEsXG4gIFVpbnQ4QXJyYXk6IDEsXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiAxLFxuICBJbnQxNkFycmF5OiAyLFxuICBVaW50MTZBcnJheTogMixcbiAgSW50MzJBcnJheTogNCxcbiAgVWludDMyQXJyYXk6IDQsXG4gIEZsb2F0MzJBcnJheTogNCxcbiAgRmxvYXQ2NEFycmF5OiA4XG59O1xuXG52YXIgQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0ID0ge1xuICBCaWdJbnQ2NEFycmF5OiA4LFxuICBCaWdVaW50NjRBcnJheTogOFxufTtcblxudmFyIGlzVmlldyA9IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICB2YXIga2xhc3MgPSBjbGFzc29mKGl0KTtcbiAgcmV0dXJuIGtsYXNzID09PSAnRGF0YVZpZXcnXG4gICAgfHwgaGFzT3duKFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0LCBrbGFzcylcbiAgICB8fCBoYXNPd24oQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0LCBrbGFzcyk7XG59O1xuXG52YXIgZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZU9mKGl0KTtcbiAgaWYgKCFpc09iamVjdChwcm90bykpIHJldHVybjtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm90byk7XG4gIHJldHVybiAoc3RhdGUgJiYgaGFzT3duKHN0YXRlLCBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUikpID8gc3RhdGVbVFlQRURfQVJSQVlfQ09OU1RSVUNUT1JdIDogZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKHByb3RvKTtcbn07XG5cbnZhciBpc1R5cGVkQXJyYXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgdmFyIGtsYXNzID0gY2xhc3NvZihpdCk7XG4gIHJldHVybiBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QsIGtsYXNzKVxuICAgIHx8IGhhc093bihCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QsIGtsYXNzKTtcbn07XG5cbnZhciBhVHlwZWRBcnJheSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNUeXBlZEFycmF5KGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBUeXBlRXJyb3IoJ1RhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheScpO1xufTtcblxudmFyIGFUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoQykge1xuICBpZiAoaXNDYWxsYWJsZShDKSAmJiAoIXNldFByb3RvdHlwZU9mIHx8IGlzUHJvdG90eXBlT2YoVHlwZWRBcnJheSwgQykpKSByZXR1cm4gQztcbiAgdGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKEMpICsgJyBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvcicpO1xufTtcblxudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBmdW5jdGlvbiAoS0VZLCBwcm9wZXJ0eSwgZm9yY2VkLCBvcHRpb25zKSB7XG4gIGlmICghREVTQ1JJUFRPUlMpIHJldHVybjtcbiAgaWYgKGZvcmNlZCkgZm9yICh2YXIgQVJSQVkgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgICB2YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZ2xvYmFsW0FSUkFZXTtcbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmIGhhc093bihUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlLCBLRVkpKSB0cnkge1xuICAgICAgZGVsZXRlIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGVbS0VZXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gb2xkIFdlYktpdCBidWcgLSBzb21lIG1ldGhvZHMgYXJlIG5vbi1jb25maWd1cmFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGVbS0VZXSA9IHByb3BlcnR5O1xuICAgICAgfSBjYXRjaCAoZXJyb3IyKSB7IC8qIGVtcHR5ICovIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFUeXBlZEFycmF5UHJvdG90eXBlW0tFWV0gfHwgZm9yY2VkKSB7XG4gICAgZGVmaW5lQnVpbHRJbihUeXBlZEFycmF5UHJvdG90eXBlLCBLRVksIGZvcmNlZCA/IHByb3BlcnR5XG4gICAgICA6IE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgJiYgSW50OEFycmF5UHJvdG90eXBlW0tFWV0gfHwgcHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuXG52YXIgZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCA9IGZ1bmN0aW9uIChLRVksIHByb3BlcnR5LCBmb3JjZWQpIHtcbiAgdmFyIEFSUkFZLCBUeXBlZEFycmF5Q29uc3RydWN0b3I7XG4gIGlmICghREVTQ1JJUFRPUlMpIHJldHVybjtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgaWYgKGZvcmNlZCkgZm9yIChBUlJBWSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZ2xvYmFsW0FSUkFZXTtcbiAgICAgIGlmIChUeXBlZEFycmF5Q29uc3RydWN0b3IgJiYgaGFzT3duKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgS0VZKSkgdHJ5IHtcbiAgICAgICAgZGVsZXRlIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcltLRVldO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIH1cbiAgICBpZiAoIVR5cGVkQXJyYXlbS0VZXSB8fCBmb3JjZWQpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21lIDQ5LTUwIGAlVHlwZWRBcnJheSVgIG1ldGhvZHMgYXJlIG5vbi13cml0YWJsZSBub24tY29uZmlndXJhYmxlXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVmaW5lQnVpbHRJbihUeXBlZEFycmF5LCBLRVksIGZvcmNlZCA/IHByb3BlcnR5IDogTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBUeXBlZEFycmF5W0tFWV0gfHwgcHJvcGVydHkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIH0gZWxzZSByZXR1cm47XG4gIH1cbiAgZm9yIChBUlJBWSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGdsb2JhbFtBUlJBWV07XG4gICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciAmJiAoIVR5cGVkQXJyYXlDb25zdHJ1Y3RvcltLRVldIHx8IGZvcmNlZCkpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBLRVksIHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbn07XG5cbmZvciAoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICBDb25zdHJ1Y3RvciA9IGdsb2JhbFtOQU1FXTtcbiAgUHJvdG90eXBlID0gQ29uc3RydWN0b3IgJiYgQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICBpZiAoUHJvdG90eXBlKSBlbmZvcmNlSW50ZXJuYWxTdGF0ZShQcm90b3R5cGUpW1RZUEVEX0FSUkFZX0NPTlNUUlVDVE9SXSA9IENvbnN0cnVjdG9yO1xuICBlbHNlIE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgPSBmYWxzZTtcbn1cblxuZm9yIChOQU1FIGluIEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICBDb25zdHJ1Y3RvciA9IGdsb2JhbFtOQU1FXTtcbiAgUHJvdG90eXBlID0gQ29uc3RydWN0b3IgJiYgQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICBpZiAoUHJvdG90eXBlKSBlbmZvcmNlSW50ZXJuYWxTdGF0ZShQcm90b3R5cGUpW1RZUEVEX0FSUkFZX0NPTlNUUlVDVE9SXSA9IENvbnN0cnVjdG9yO1xufVxuXG4vLyBXZWJLaXQgYnVnIC0gdHlwZWQgYXJyYXlzIGNvbnN0cnVjdG9ycyBwcm90b3R5cGUgaXMgT2JqZWN0LnByb3RvdHlwZVxuaWYgKCFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTIHx8ICFpc0NhbGxhYmxlKFR5cGVkQXJyYXkpIHx8IFR5cGVkQXJyYXkgPT09IEZ1bmN0aW9uLnByb3RvdHlwZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93IC0tIHNhZmVcbiAgVHlwZWRBcnJheSA9IGZ1bmN0aW9uIFR5cGVkQXJyYXkoKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xuICB9O1xuICBpZiAoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUykgZm9yIChOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgaWYgKGdsb2JhbFtOQU1FXSkgc2V0UHJvdG90eXBlT2YoZ2xvYmFsW05BTUVdLCBUeXBlZEFycmF5KTtcbiAgfVxufVxuXG5pZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfHwgIVR5cGVkQXJyYXlQcm90b3R5cGUgfHwgVHlwZWRBcnJheVByb3RvdHlwZSA9PT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5LnByb3RvdHlwZTtcbiAgaWYgKE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MpIGZvciAoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIGlmIChnbG9iYWxbTkFNRV0pIHNldFByb3RvdHlwZU9mKGdsb2JhbFtOQU1FXS5wcm90b3R5cGUsIFR5cGVkQXJyYXlQcm90b3R5cGUpO1xuICB9XG59XG5cbi8vIFdlYktpdCBidWcgLSBvbmUgbW9yZSBvYmplY3QgaW4gVWludDhDbGFtcGVkQXJyYXkgcHJvdG90eXBlIGNoYWluXG5pZiAoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBnZXRQcm90b3R5cGVPZihVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSkgIT09IFR5cGVkQXJyYXlQcm90b3R5cGUpIHtcbiAgc2V0UHJvdG90eXBlT2YoVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUsIFR5cGVkQXJyYXlQcm90b3R5cGUpO1xufVxuXG5pZiAoREVTQ1JJUFRPUlMgJiYgIWhhc093bihUeXBlZEFycmF5UHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICBUWVBFRF9BUlJBWV9UQUdfUkVRVUlSRUQgPSB0cnVlO1xuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVHlwZWRBcnJheVByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzKSA/IHRoaXNbVFlQRURfQVJSQVlfVEFHXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKE5BTUUgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIGlmIChnbG9iYWxbTkFNRV0pIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsW05BTUVdLCBUWVBFRF9BUlJBWV9UQUcsIE5BTUUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOiBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLFxuICBUWVBFRF9BUlJBWV9UQUc6IFRZUEVEX0FSUkFZX1RBR19SRVFVSVJFRCAmJiBUWVBFRF9BUlJBWV9UQUcsXG4gIGFUeXBlZEFycmF5OiBhVHlwZWRBcnJheSxcbiAgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjogYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixcbiAgZXhwb3J0VHlwZWRBcnJheU1ldGhvZDogZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxcbiAgZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDogZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCxcbiAgZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yOiBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IsXG4gIGlzVmlldzogaXNWaWV3LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgVHlwZWRBcnJheTogVHlwZWRBcnJheSxcbiAgVHlwZWRBcnJheVByb3RvdHlwZTogVHlwZWRBcnJheVByb3RvdHlwZVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-buffer-view-core.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/array-includes.js ": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/array-includes.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar toIndexedObject=_ _webpack_require__(/*! ../internals/to-indexed-object */ \ "./node_modules/core-js/internals/to-indexed-object.js\");\nvar toAbsoluteIndex=_ _webpack_require__(/*! ../internals/to-absolute-index */ \ "./node_modules/core-js/internals/to-absolute-index.js\");\nvar lengthOfArrayLike=_ _webpack_require__(/*! ../internals/length-of-array-like */ \ "./node_modules/core-js/internals/length-of-array-like.js\");\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod=f unction (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O=t oIndexedObject($this);\n var length=l engthOfArrayLike(O);\n var index=t oAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !==e l) while (length> index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDOUQsc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELHdCQUF3QixtQkFBTyxDQUFDLG1HQUFtQzs7QUFFbkUsc0JBQXNCLG1CQUFtQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sV0FBVyxnQkFBZ0I7QUFDakM7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzPzRkNjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-includes.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/array-iteration.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/array-iteration.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ \"./node_modules/core-js/internals/indexed-object.js\");\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \"./node_modules/core-js/internals/to-object.js\");\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \"./node_modules/core-js/internals/length-of-array-like.js\");\nvar arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ \"./node_modules/core-js/internals/array-species-create.js\");\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE === 1;\n var IS_FILTER = TYPE === 2;\n var IS_SOME = TYPE === 3;\n var IS_EVERY = TYPE === 4;\n var IS_FIND_INDEX = TYPE === 6;\n var IS_FILTER_REJECT = TYPE === 7;\n var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsV0FBVyxtQkFBTyxDQUFDLHFHQUFvQztBQUN2RCxrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3pELGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0Msd0JBQXdCLG1CQUFPLENBQUMsbUdBQW1DO0FBQ25FLHlCQUF5QixtQkFBTyxDQUFDLG1HQUFtQzs7QUFFcEU7O0FBRUEsc0JBQXNCLGtFQUFrRTtBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxnQkFBZ0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0EsNENBQTRDO0FBQzVDLDRDQUE0QztBQUM1Qyw0Q0FBNEM7QUFDNUMsNENBQTRDO0FBQzVDLFVBQVU7QUFDViw0Q0FBNEM7QUFDNUMsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcz9iNzI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-iteration.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/array-slice-simple.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/array-slice-simple.js ***! \**************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ \"./node_modules/core-js/internals/to-absolute-index.js\");\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \"./node_modules/core-js/internals/length-of-array-like.js\");\nvar createProperty = __webpack_require__(/*! ../internals/create-property */ \"./node_modules/core-js/internals/create-property.js\");\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n var n = 0;\n for (; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length=n ;\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELHdCQUF3QixtQkFBTyxDQUFDLG1HQUFtQztBQUNuRSxxQkFBcUIsbUJBQU8sQ0FBQyx5RkFBOEI7O0FBRTNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxTQUFTO0FBQ2xCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanM/NGRhZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-slice-simple.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/array-slice.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/array-slice.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\n\nmodule.exports=u ncurryThis([].slice);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7O0FBRTlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzP2YzNmEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-slice.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/array-species-constructor.js ": /*!*********************************************************************!*\ !*** ./node_modules/core-js/internals/array-species-constructor.js ***! \*********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar isArray=_ _webpack_require__(/*! ../internals/is-array */ \ "./node_modules/core-js/internals/is-array.js\");\nvar isConstructor=_ _webpack_require__(/*! ../internals/is-constructor */ \ "./node_modules/core-js/internals/is-constructor.js\");\nvar isObject=_ _webpack_require__(/*! ../internals/is-object */ \ "./node_modules/core-js/internals/is-object.js\");\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar SPECIES=w ellKnownSymbol( 'species');\nvar $Array=A rray;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports=f unction (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C=o riginalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C===$ Array || isArray(C.prototype))) C=u ndefined;\n else if (isObject(C)) {\n C=C [SPECIES];\n if (C===n ull) C=u ndefined;\n }\n } return C===u ndefined ? $Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQywyRUFBdUI7QUFDN0Msb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3pELGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0Msc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDOztBQUU5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzPzBiNDIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-species-constructor.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/array-species-create.js ": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/array-species-create.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar arraySpeciesConstructor=_ _webpack_require__(/*! ../internals/array-species-constructor */ \ "./node_modules/core-js/internals/array-species-constructor.js\");\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports=f unction (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length===0 ? 0 : length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4QkFBOEIsbUJBQU8sQ0FBQyw2R0FBd0M7O0FBRTlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanM/NjVmMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-species-create.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/array-unique-by.js ": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/array-unique-by.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar aCallable=_ _webpack_require__(/*! ../internals/a-callable */ \ "./node_modules/core-js/internals/a-callable.js\");\nvar isNullOrUndefined=_ _webpack_require__(/*! ../internals/is-null-or-undefined */ \ "./node_modules/core-js/internals/is-null-or-undefined.js\");\nvar lengthOfArrayLike=_ _webpack_require__(/*! ../internals/length-of-array-like */ \ "./node_modules/core-js/internals/length-of-array-like.js\");\nvar toObject=_ _webpack_require__(/*! ../internals/to-object */ \ "./node_modules/core-js/internals/to-object.js\");\nvar MapHelpers=_ _webpack_require__(/*! ../internals/map-helpers */ \ "./node_modules/core-js/internals/map-helpers.js\");\nvar iterate=_ _webpack_require__(/*! ../internals/map-iterate */ \ "./node_modules/core-js/internals/map-iterate.js\");\n\nvar Map=M apHelpers.Map;\nvar mapHas=M apHelpers.has;\nvar mapSet=M apHelpers.set;\nvar push=u ncurryThis([].push);\n\n// `Array.prototype.uniqueBy` method\n// https://github.com/tc39/proposal-array-unique\nmodule.exports=f unction uniqueBy(resolver) {\n var that=t oObject(this);\n var length=l engthOfArrayLike(that);\n var result=[ ];\n var map=n ew Map();\n var resolverFunction=! isNullOrUndefined(resolver) ? aCallable(resolver) : function (value) {\n return value;\n };\n var index, item, key;\n for (index=0 ; index < length; index++) {\n item=t hat[index];\n key=r esolverFunction(item);\n if (!mapHas(map, key)) mapSet(map, key, item);\n }\n iterate(map, function (value) {\n push(result, value);\n });\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktdW5pcXVlLWJ5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMscUdBQW9DO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNqRCx3QkFBd0IsbUJBQU8sQ0FBQyxtR0FBbUM7QUFDbkUsd0JBQXdCLG1CQUFPLENBQUMsbUdBQW1DO0FBQ25FLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0MsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXVuaXF1ZS1ieS5qcz80NjczIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBNYXBIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtaXRlcmF0ZScpO1xuXG52YXIgTWFwID0gTWFwSGVscGVycy5NYXA7XG52YXIgbWFwSGFzID0gTWFwSGVscGVycy5oYXM7XG52YXIgbWFwU2V0ID0gTWFwSGVscGVycy5zZXQ7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnVuaXF1ZUJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LXVuaXF1ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlxdWVCeShyZXNvbHZlcikge1xuICB2YXIgdGhhdCA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UodGhhdCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHJlc29sdmVyRnVuY3Rpb24gPSAhaXNOdWxsT3JVbmRlZmluZWQocmVzb2x2ZXIpID8gYUNhbGxhYmxlKHJlc29sdmVyKSA6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgdmFyIGluZGV4LCBpdGVtLCBrZXk7XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGl0ZW0gPSB0aGF0W2luZGV4XTtcbiAgICBrZXkgPSByZXNvbHZlckZ1bmN0aW9uKGl0ZW0pO1xuICAgIGlmICghbWFwSGFzKG1hcCwga2V5KSkgbWFwU2V0KG1hcCwga2V5LCBpdGVtKTtcbiAgfVxuICBpdGVyYXRlKG1hcCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/array-unique-by.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/check-correctness-of-iteration.js ": /*!**************************************************************************!*\ !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! \**************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar ITERATOR=w ellKnownSymbol( 'iterator');\nvar SAFE_CLOSING=f alse;\n\ntry {\n var called=0 ;\n var iteratorWithReturn={ \n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING=t rue;\n }\n };\n iteratorWithReturn[ITERATOR]=f unction () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports=f unction (exec, SKIP_CLOSING) {\n try {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n } catch (error) { return false; } // workaround of old WebKit + `eval` bug\n var ITERATION_SUPPORT=f alse;\n try {\n var object={ };\n object[ITERATOR]=f unction () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT=t rue };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDOztBQUU5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFVBQVU7QUFDekQsRUFBRSxnQkFBZ0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0JBQWdCLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcz8xYzdlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IHJldHVybiBmYWxzZTsgfSAvLyB3b3JrYXJvdW5kIG9mIG9sZCBXZWJLaXQgKyBgZXZhbGAgYnVnXG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/check-correctness-of-iteration.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/classof-raw.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/classof-raw.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\n\nvar toString=u ncurryThis({}.toString);\nvar stringSlice=u ncurryThis( ''.slice);\n\nmodule.exports=f unction (it) {\n return stringSlice(toString(it), 8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7O0FBRTlELDZCQUE2QjtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanM/YzZiNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/classof-raw.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/classof.js ": /*!***************************************************!*\ !*** ./node_modules/core-js/internals/classof.js ***! \***************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar TO_STRING_TAG_SUPPORT=_ _webpack_require__(/*! ../internals/to-string-tag-support */ \ "./node_modules/core-js/internals/to-string-tag-support.js\");\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\nvar classofRaw=_ _webpack_require__(/*! ../internals/classof-raw */ \ "./node_modules/core-js/internals/classof-raw.js\");\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar TO_STRING_TAG=w ellKnownSymbol( 'toStringTag');\nvar $Object=O bject;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS=c lassofRaw(function () { return arguments; }())==='Arguments' ;\n\n// fallback for IE11 Script Access Denied error\nvar tryGet=f unction (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports=T O_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it===u ndefined ? 'Undefined' : it===n ull ? 'Null'\n // @@toStringTag case\n : typeof (tag=t ryGet(O=$ Object(it), TO_STRING_TAG))=='string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result=c lassofRaw(O))==='Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDRCQUE0QixtQkFBTyxDQUFDLHFHQUFvQztBQUN4RSxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELHNCQUFzQixtQkFBTyxDQUFDLDZGQUFnQzs7QUFFOUQ7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRCxtQkFBbUI7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzP2Y1ZGYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/classof.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/collection-from.js ": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/collection-from.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar bind=_ _webpack_require__(/*! ../internals/function-bind-context */ \ "./node_modules/core-js/internals/function-bind-context.js\");\nvar call=_ _webpack_require__(/*! ../internals/function-call */ \ "./node_modules/core-js/internals/function-call.js\");\nvar aCallable=_ _webpack_require__(/*! ../internals/a-callable */ \ "./node_modules/core-js/internals/a-callable.js\");\nvar aConstructor=_ _webpack_require__(/*! ../internals/a-constructor */ \ "./node_modules/core-js/internals/a-constructor.js\");\nvar isNullOrUndefined=_ _webpack_require__(/*! ../internals/is-null-or-undefined */ \ "./node_modules/core-js/internals/is-null-or-undefined.js\");\nvar iterate=_ _webpack_require__(/*! ../internals/iterate */ \ "./node_modules/core-js/internals/iterate.js\");\n\nvar push=[ ].push;\n\nmodule.exports=f unction from(source /* , mapFn, thisArg */) {\n var length=a rguments.length;\n var mapFn=l ength> 1 ? arguments[1] : undefined;\n var mapping, array, n, boundFunction;\n aConstructor(this);\n mapping = mapFn !== undefined;\n if (mapping) aCallable(mapFn);\n if (isNullOrUndefined(source)) return new this();\n array = [];\n if (mapping) {\n n = 0;\n boundFunction = bind(mapFn, length > 2 ? arguments[2] : undefined);\n iterate(source, function (nextItem) {\n call(push, array, boundFunction(nextItem, n++));\n });\n } else {\n iterate(source, push, { that: array });\n }\n return new this(array);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1mcm9tLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxXQUFXLG1CQUFPLENBQUMscUdBQW9DO0FBQ3ZELFdBQVcsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXlCO0FBQ2pELG1CQUFtQixtQkFBTyxDQUFDLHFGQUE0QjtBQUN2RCx3QkFBd0IsbUJBQU8sQ0FBQyxtR0FBbUM7QUFDbkUsY0FBYyxtQkFBTyxDQUFDLHlFQUFzQjs7QUFFNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0osNEJBQTRCLGFBQWE7QUFDekM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tZnJvbS5qcz9hOThlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcEZuID0gbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcsIGFycmF5LCBuLCBib3VuZEZ1bmN0aW9uO1xuICBhQ29uc3RydWN0b3IodGhpcyk7XG4gIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgYUNhbGxhYmxlKG1hcEZuKTtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHNvdXJjZSkpIHJldHVybiBuZXcgdGhpcygpO1xuICBhcnJheSA9IFtdO1xuICBpZiAobWFwcGluZykge1xuICAgIG4gPSAwO1xuICAgIGJvdW5kRnVuY3Rpb24gPSBiaW5kKG1hcEZuLCBsZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICBpdGVyYXRlKHNvdXJjZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICBjYWxsKHB1c2gsIGFycmF5LCBib3VuZEZ1bmN0aW9uKG5leHRJdGVtLCBuKyspKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlKHNvdXJjZSwgcHVzaCwgeyB0aGF0OiBhcnJheSB9KTtcbiAgfVxuICByZXR1cm4gbmV3IHRoaXMoYXJyYXkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/collection-from.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/collection-of.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/collection-of.js ***! \*********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice */ \"./node_modules/core-js/internals/array-slice.js\");\n\n// https://tc39.github.io/proposal-setmap-offrom/\nmodule.exports = function of() {\n return new this(arraySlice(arguments));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1vZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1vZi5qcz8zZmRlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb2YoKSB7XG4gIHJldHVybiBuZXcgdGhpcyhhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/collection-of.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/collection-strong.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/collection-strong.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar create = __webpack_require__(/*! ../internals/object-create */ \"./node_modules/core-js/internals/object-create.js\");\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \"./node_modules/core-js/internals/define-built-in-accessor.js\");\nvar defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ \"./node_modules/core-js/internals/define-built-ins.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \"./node_modules/core-js/internals/an-instance.js\");\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \"./node_modules/core-js/internals/is-null-or-undefined.js\");\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \"./node_modules/core-js/internals/iterate.js\");\nvar defineIterator = __webpack_require__(/*! ../internals/iterator-define */ \"./node_modules/core-js/internals/iterator-define.js\");\nvar createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ \"./node_modules/core-js/internals/create-iter-result-object.js\");\nvar setSpecies = __webpack_require__(/*! ../internals/set-species */ \"./node_modules/core-js/internals/set-species.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar fastKey = (__webpack_require__(/*! ../internals/internal-metadata */ \"./node_modules/core-js/internals/internal-metadata.js\").fastKey);\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \"./node_modules/core-js/internals/internal-state.js\");\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key === key) return entry;\n }\n };\n\n defineBuiltIns(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first === entry) state.first = next;\n if (state.last === entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n // return step by kind\n if (kind === 'keys') return createIterResultObject(entry.key, false);\n if (kind === 'values') return createIterResultObject(entry.value, false);\n return createIterResultObject([entry.key, entry.value], false);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMscUZBQTRCO0FBQ2pELDRCQUE0QixtQkFBTyxDQUFDLDJHQUF1QztBQUMzRSxxQkFBcUIsbUJBQU8sQ0FBQywyRkFBK0I7QUFDNUQsV0FBVyxtQkFBTyxDQUFDLHFHQUFvQztBQUN2RCxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsbUdBQW1DO0FBQ25FLGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7QUFDNUMscUJBQXFCLG1CQUFPLENBQUMseUZBQThCO0FBQzNELDZCQUE2QixtQkFBTyxDQUFDLDZHQUF3QztBQUM3RSxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELGNBQWMsNEhBQWlEO0FBQy9ELDBCQUEwQixtQkFBTyxDQUFDLHVGQUE2Qjs7QUFFL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHlFQUF5RSxnQ0FBZ0M7QUFDekcsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsWUFBWSxVQUFVO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsT0FBTztBQUNQLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLFVBQVUsYUFBYSxtQ0FBbUM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzPzY1NjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgICAgaWYgKGtpbmQgPT09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/collection-strong.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/collection-weak.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/collection-weak.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ \"./node_modules/core-js/internals/define-built-ins.js\");\nvar getWeakData = (__webpack_require__(/*! ../internals/internal-metadata */ \"./node_modules/core-js/internals/internal-metadata.js\").getWeakData);\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \"./node_modules/core-js/internals/an-instance.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \"./node_modules/core-js/internals/is-null-or-undefined.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \"./node_modules/core-js/internals/iterate.js\");\nvar ArrayIterationModule = __webpack_require__(/*! ../internals/array-iteration */ \"./node_modules/core-js/internals/array-iteration.js\");\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \"./node_modules/core-js/internals/has-own-property.js\");\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \"./node_modules/core-js/internals/internal-state.js\");\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (state) {\n return state.frozen || (state.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) splice(this.entries, index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n defineBuiltIns(Prototype, {\n // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && hasOwn(data, state.id) && delete data[state.id];\n },\n // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && hasOwn(data, state.id);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `WeakMap.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // `WeakMap.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // `WeakSet.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return Constructor;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMscUdBQW9DO0FBQzlELHFCQUFxQixtQkFBTyxDQUFDLDJGQUErQjtBQUM1RCxrQkFBa0IsZ0lBQXFEO0FBQ3ZFLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLHdCQUF3QixtQkFBTyxDQUFDLG1HQUFtQztBQUNuRSxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7QUFDNUMsMkJBQTJCLG1CQUFPLENBQUMseUZBQThCO0FBQ2pFLGFBQWEsbUJBQU8sQ0FBQywyRkFBK0I7QUFDcEQsMEJBQTBCLG1CQUFPLENBQUMsdUZBQTZCOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLHlFQUF5RSxnQ0FBZ0M7QUFDekcsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsuanM/YWNhYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGdldFdlYWtEYXRhID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZ2V0V2Vha0RhdGE7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgQXJyYXlJdGVyYXRpb25Nb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xudmFyIGZpbmQgPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kO1xudmFyIGZpbmRJbmRleCA9IEFycmF5SXRlcmF0aW9uTW9kdWxlLmZpbmRJbmRleDtcbnZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZnJvemVuIHx8IChzdGF0ZS5mcm96ZW4gPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG5cbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbn07XG5cbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gZmluZChzdG9yZS5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuXG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5lbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHNwbGljZSh0aGlzLmVudHJpZXMsIGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGlkOiBpZCsrLFxuICAgICAgICBmcm96ZW46IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgZWxzZSBkYXRhW3N0YXRlLmlkXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpICYmIGRlbGV0ZSBkYXRhW3N0YXRlLmlkXTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBXZWFrTWFwLCBXZWFrU2V0IH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YVtzdGF0ZS5pZF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/collection-weak.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/collection.js": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/collection.js ***! \******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar isForced = __webpack_require__(/*! ../internals/is-forced */ \"./node_modules/core-js/internals/is-forced.js\");\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \"./node_modules/core-js/internals/define-built-in.js\");\nvar InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ \"./node_modules/core-js/internals/internal-metadata.js\");\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \"./node_modules/core-js/internals/iterate.js\");\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \"./node_modules/core-js/internals/an-instance.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \"./node_modules/core-js/internals/is-null-or-undefined.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\nvar checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ \"./node_modules/core-js/internals/check-correctness-of-iteration.js\");\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \"./node_modules/core-js/internals/set-to-string-tag.js\");\nvar inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ \"./node_modules/core-js/internals/inherit-if-required.js\");\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n defineBuiltIn(NativePrototype, KEY,\n KEY === 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY === 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY === 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY === 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsYUFBYSxtQkFBTyxDQUFDLHVFQUFxQjtBQUMxQyxrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxvQkFBb0IsbUJBQU8sQ0FBQyx5RkFBOEI7QUFDMUQsNkJBQTZCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3JFLGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCx3QkFBd0IsbUJBQU8sQ0FBQyxtR0FBbUM7QUFDbkUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxZQUFZLG1CQUFPLENBQUMscUVBQW9CO0FBQ3hDLGtDQUFrQyxtQkFBTyxDQUFDLHVIQUE2QztBQUN2RixxQkFBcUIsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDN0Qsd0JBQXdCLG1CQUFPLENBQUMsaUdBQWtDOztBQUVsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQSxtREFBbUQsa0JBQWtCO0FBQ3JFO0FBQ0E7QUFDQSw2RUFBNkUsa0NBQWtDO0FBQy9HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSxnQ0FBZ0M7QUFDM0c7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSw0RUFBNEU7O0FBRWxGOztBQUVBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcz82ZDYxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUsIHdyYXBwZXIsIGNvbW1vbikge1xuICB2YXIgSVNfTUFQID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdNYXAnKSAhPT0gLTE7XG4gIHZhciBJU19XRUFLID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdXZWFrJykgIT09IC0xO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxbQ09OU1RSVUNUT1JfTkFNRV07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHZhciBDb25zdHJ1Y3RvciA9IE5hdGl2ZUNvbnN0cnVjdG9yO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcblxuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciB1bmN1cnJpZWROYXRpdmVNZXRob2QgPSB1bmN1cnJ5VGhpcyhOYXRpdmVQcm90b3R5cGVbS0VZXSk7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm90b3R5cGUsIEtFWSxcbiAgICAgIEtFWSA9PT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIHZhbHVlID09PSAwID8gMCA6IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9IDogS0VZID09PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyBmYWxzZSA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IHVuZGVmaW5lZCA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IGZhbHNlIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgdmFyIFJFUExBQ0UgPSBpc0ZvcmNlZChcbiAgICBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKSB8fCAhKElTX1dFQUsgfHwgTmF0aXZlUHJvdG90eXBlLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7XG4gICAgfSkpXG4gICk7XG5cbiAgaWYgKFJFUExBQ0UpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSBpZiAoaXNGb3JjZWQoQ09OU1RSVUNUT1JfTkFNRSwgdHJ1ZSkpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9IGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHsgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGl0ZXJhYmxlKTsgfSk7XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcblxuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uIChkdW1teSwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZShkdW1teSwgTmF0aXZlUHJvdG90eXBlKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgTmF0aXZlQ29uc3RydWN0b3IoKSwgZHVtbXksIENvbnN0cnVjdG9yKTtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE5hdGl2ZVByb3RvdHlwZTtcbiAgICAgIE5hdGl2ZVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgIH1cblxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cblxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuXG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBOYXRpdmVQcm90b3R5cGUuY2xlYXIpIGRlbGV0ZSBOYXRpdmVQcm90b3R5cGUuY2xlYXI7XG4gIH1cblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiBDb25zdHJ1Y3RvciAhPT0gTmF0aXZlQ29uc3RydWN0b3IgfSwgZXhwb3J0ZWQpO1xuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/collection.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/composite-key.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/composite-key.js ***! \*********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\n__webpack_require__(/*! ../modules/es.map */ \"./node_modules/core-js/modules/es.map.js\");\n__webpack_require__(/*! ../modules/es.weak-map */ \"./node_modules/core-js/modules/es.weak-map.js\");\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \"./node_modules/core-js/internals/get-built-in.js\");\nvar create = __webpack_require__(/*! ../internals/object-create */ \"./node_modules/core-js/internals/object-create.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\n\nvar $Object = Object;\nvar $TypeError = TypeError;\nvar Map = getBuiltIn('Map');\nvar WeakMap = getBuiltIn('WeakMap');\n\nvar Node = function () {\n // keys\n this.object = null;\n this.symbol = null;\n // child nodes\n this.primitives = null;\n this.objectsByIndex = create(null);\n};\n\nNode.prototype.get = function (key, initializer) {\n return this[key] || (this[key] = initializer());\n};\n\nNode.prototype.next = function (i, it, IS_OBJECT) {\n var store = IS_OBJECT\n ? this.objectsByIndex[i] || (this.objectsByIndex[i] = new WeakMap())\n : this.primitives || (this.primitives = new Map());\n var entry = store.get(it);\n if (!entry) store.set(it, entry = new Node());\n return entry;\n};\n\nvar root = new Node();\n\nmodule.exports = function () {\n var active = root;\n var length = arguments.length;\n var i, it;\n // for prevent leaking, start from objects\n for (i = 0; i < length; i++) {\n if (isObject(it=a rguments[i])) active=a ctive.next(i, it, true);\n }\n if (this===$ Object && active===r oot) throw $TypeError( 'Composite keys must contain a non-primitive component');\n for (i=0 ; i < length; i++) {\n if (!isObject(it=a rguments[i])) active=a ctive.next(i, it, false);\n } return active;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29tcG9zaXRlLWtleS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxtRUFBbUI7QUFDM0IsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDaEMsaUJBQWlCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxZQUFZO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLGNBQWMsWUFBWTtBQUMxQjtBQUNBLElBQUk7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb21wb3NpdGUta2V5LmpzP2E3OTkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMubWFwJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLndlYWstbWFwJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1hcCA9IGdldEJ1aWx0SW4oJ01hcCcpO1xudmFyIFdlYWtNYXAgPSBnZXRCdWlsdEluKCdXZWFrTWFwJyk7XG5cbnZhciBOb2RlID0gZnVuY3Rpb24gKCkge1xuICAvLyBrZXlzXG4gIHRoaXMub2JqZWN0ID0gbnVsbDtcbiAgdGhpcy5zeW1ib2wgPSBudWxsO1xuICAvLyBjaGlsZCBub2Rlc1xuICB0aGlzLnByaW1pdGl2ZXMgPSBudWxsO1xuICB0aGlzLm9iamVjdHNCeUluZGV4ID0gY3JlYXRlKG51bGwpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSwgaW5pdGlhbGl6ZXIpIHtcbiAgcmV0dXJuIHRoaXNba2V5XSB8fCAodGhpc1trZXldID0gaW5pdGlhbGl6ZXIoKSk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKGksIGl0LCBJU19PQkpFQ1QpIHtcbiAgdmFyIHN0b3JlID0gSVNfT0JKRUNUXG4gICAgPyB0aGlzLm9iamVjdHNCeUluZGV4W2ldIHx8ICh0aGlzLm9iamVjdHNCeUluZGV4W2ldID0gbmV3IFdlYWtNYXAoKSlcbiAgICA6IHRoaXMucHJpbWl0aXZlcyB8fCAodGhpcy5wcmltaXRpdmVzID0gbmV3IE1hcCgpKTtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuZ2V0KGl0KTtcbiAgaWYgKCFlbnRyeSkgc3RvcmUuc2V0KGl0LCBlbnRyeSA9IG5ldyBOb2RlKCkpO1xuICByZXR1cm4gZW50cnk7XG59O1xuXG52YXIgcm9vdCA9IG5ldyBOb2RlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYWN0aXZlID0gcm9vdDtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpLCBpdDtcbiAgLy8gZm9yIHByZXZlbnQgbGVha2luZywgc3RhcnQgZnJvbSBvYmplY3RzXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChpc09iamVjdChpdCA9IGFyZ3VtZW50c1tpXSkpIGFjdGl2ZSA9IGFjdGl2ZS5uZXh0KGksIGl0LCB0cnVlKTtcbiAgfVxuICBpZiAodGhpcyA9PT0gJE9iamVjdCAmJiBhY3RpdmUgPT09IHJvb3QpIHRocm93ICRUeXBlRXJyb3IoJ0NvbXBvc2l0ZSBrZXlzIG11c3QgY29udGFpbiBhIG5vbi1wcmltaXRpdmUgY29tcG9uZW50Jyk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmICghaXNPYmplY3QoaXQgPSBhcmd1bWVudHNbaV0pKSBhY3RpdmUgPSBhY3RpdmUubmV4dChpLCBpdCwgZmFsc2UpO1xuICB9IHJldHVybiBhY3RpdmU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/composite-key.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/copy-constructor-properties.js ": /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! \***********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar ownKeys=_ _webpack_require__(/*! ../internals/own-keys */ \ "./node_modules/core-js/internals/own-keys.js\");\nvar getOwnPropertyDescriptorModule=_ _webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \ "./node_modules/core-js/internals/object-get-own-property-descriptor.js\");\nvar definePropertyModule=_ _webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\");\n\nmodule.exports=f unction (target, source, exceptions) {\n var keys=o wnKeys(source);\n var defineProperty=d efinePropertyModule.f;\n var getOwnPropertyDescriptor=g etOwnPropertyDescriptorModule.f;\n for (var i=0 ; i < keys.length; i++) {\n var key=k eys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLDJGQUErQjtBQUNwRCxjQUFjLG1CQUFPLENBQUMsMkVBQXVCO0FBQzdDLHFDQUFxQyxtQkFBTyxDQUFDLCtIQUFpRDtBQUM5RiwyQkFBMkIsbUJBQU8sQ0FBQyx1R0FBcUM7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzP2U4OTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/copy-constructor-properties.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/correct-prototype-getter.js ": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***! \********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\n\nmodule.exports=! fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor=n ull;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !==F .prototype;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFeEM7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanM/ZTE3NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/correct-prototype-getter.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/create-iter-result-object.js ": /*!*********************************************************************!*\ !*** ./node_modules/core-js/internals/create-iter-result-object.js ***! \*********************************************************************/ /***/ ((module) => { "use strict "; eval("\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports=f unction (value, done) {\n return { value: value, done: done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzPzQ3NTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/create-iter-result-object.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/create-non-enumerable-property.js ": /*!**************************************************************************!*\ !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! \**************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar DESCRIPTORS=_ _webpack_require__(/*! ../internals/descriptors */ \ "./node_modules/core-js/internals/descriptors.js\");\nvar definePropertyModule=_ _webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\");\nvar createPropertyDescriptor=_ _webpack_require__(/*! ../internals/create-property-descriptor */ \ "./node_modules/core-js/internals/create-property-descriptor.js\");\n\nmodule.exports=D ESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key]=v alue;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELDJCQUEyQixtQkFBTyxDQUFDLHVHQUFxQztBQUN4RSwrQkFBK0IsbUJBQU8sQ0FBQywrR0FBeUM7O0FBRWhGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcz85MTEyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/create-non-enumerable-property.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/create-property-descriptor.js ": /*!**********************************************************************!*\ !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! \**********************************************************************/ /***/ ((module) => { "use strict "; eval("\nmodule.exports=f unction (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzPzVjNmMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/create-property-descriptor.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/create-property.js ": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/create-property.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar toPropertyKey=_ _webpack_require__(/*! ../internals/to-property-key */ \ "./node_modules/core-js/internals/to-property-key.js\");\nvar definePropertyModule=_ _webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\");\nvar createPropertyDescriptor=_ _webpack_require__(/*! ../internals/create-property-descriptor */ \ "./node_modules/core-js/internals/create-property-descriptor.js\");\n\nmodule.exports=f unction (object, key, value) {\n var propertyKey=t oPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey]=v alue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isb0JBQW9CLG1CQUFPLENBQUMseUZBQThCO0FBQzFELDJCQUEyQixtQkFBTyxDQUFDLHVHQUFxQztBQUN4RSwrQkFBK0IsbUJBQU8sQ0FBQywrR0FBeUM7O0FBRWhGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzPzg0MTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/create-property.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/define-built-in-accessor.js ": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/define-built-in-accessor.js ***! \********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar makeBuiltIn=_ _webpack_require__(/*! ../internals/make-built-in */ \ "./node_modules/core-js/internals/make-built-in.js\");\nvar defineProperty=_ _webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\");\n\nmodule.exports=f unction (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMscUZBQTRCO0FBQ3RELHFCQUFxQixtQkFBTyxDQUFDLHVHQUFxQzs7QUFFbEU7QUFDQSwwREFBMEQsY0FBYztBQUN4RSwwREFBMEQsY0FBYztBQUN4RTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcz9lZGQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/define-built-in-accessor.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/define-built-in.js ": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/define-built-in.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\nvar definePropertyModule=_ _webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\");\nvar makeBuiltIn=_ _webpack_require__(/*! ../internals/make-built-in */ \ "./node_modules/core-js/internals/make-built-in.js\");\nvar defineGlobalProperty=_ _webpack_require__(/*! ../internals/define-global-property */ \ "./node_modules/core-js/internals/define-global-property.js\");\n\nmodule.exports=f unction (O, key, value, options) {\n if (!options) options={ };\n var simple=o ptions.enumerable;\n var name=o ptions.name !==u ndefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key]=v alue;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple=t rue;\n } catch (error) { /* empty */ }\n if (simple) O[key]=v alue;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELDJCQUEyQixtQkFBTyxDQUFDLHVHQUFxQztBQUN4RSxrQkFBa0IsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDdEQsMkJBQTJCLG1CQUFPLENBQUMsdUdBQXFDOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU0sZ0JBQWdCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzP2NiMmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/define-built-in.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/define-built-ins.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/define-built-ins.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar defineBuiltIn=_ _webpack_require__(/*! ../internals/define-built-in */ \ "./node_modules/core-js/internals/define-built-in.js\");\n\nmodule.exports=f unction (target, src, options) {\n for (var key in src) defineBuiltIn(target, key, src[key], options);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLG9CQUFvQixtQkFBTyxDQUFDLHlGQUE4Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcz82OTY0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/define-built-ins.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/define-global-property.js ": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/define-global-property.js ***! \******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty=O bject.defineProperty;\n\nmodule.exports=f unction (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key]=v alue;\n } return value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7O0FBRTFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxrREFBa0Q7QUFDcEYsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanM/NjM3NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/define-global-property.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/descriptors.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/descriptors.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\n\n// Detect IE8 's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixZQUFZLG1CQUFPLENBQUMscUVBQW9COztBQUV4QztBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsT0FBTyxtQkFBbUIsYUFBYTtBQUN4RSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzPzgzYWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/descriptors.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/document-all.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/document-all.js ***! \********************************************************/ /***/ ((module) => { "use strict"; eval("\nvar documentAll = typeof document == 'object ' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined ' && documentAll !== undefined;\n\nmodule.exports = {\n all: documentAll,\n IS_HTMLDDA: IS_HTMLDDA\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcz84ZWExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBJU19IVE1MRERBID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbGw6IGRvY3VtZW50QWxsLFxuICBJU19IVE1MRERBOiBJU19IVE1MRERBXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/document-all.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/document-create-element.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/document-create-element.js ***! \*******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\n\nvar document = global.document;\n// typeof document.createElement is 'object ' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRS9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanM/Y2MxMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/document-create-element.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/engine-is-bun.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/engine-is-bun.js ***! \*********************************************************/ /***/ ((module) => { "use strict"; eval("\n/* global Bun -- Deno case */\nmodule.exports = typeof Bun == 'function ' && Bun && typeof Bun.version == 'string ';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bi5qcz9jNmE3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/engine-is-bun.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/engine-is-ios.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/engine-is-ios.js ***! \*********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ \"./node_modules/core-js/internals/engine-user-agent.js\");\n\n// eslint-disable-next-line redos/no-vulnerable -- safe\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGdCQUFnQixtQkFBTyxDQUFDLDZGQUFnQzs7QUFFeEQ7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzPzFjZGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/engine-is-ios.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/engine-is-node.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/engine-is-node.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \"./node_modules/core-js/internals/classof-raw.js\");\n\nmodule.exports = classof(global.process) === 'process ';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzPzYwNWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT09ICdwcm9jZXNzJztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/engine-is-node.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/engine-user-agent.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/engine-user-agent.js ***! \*************************************************************/ /***/ ((module) => { "use strict"; eval("\nmodule.exports = typeof navigator != 'undefined ' && String(navigator.userAgent) || ' ';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcz8zNDJmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/engine-user-agent.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/engine-v8-version.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/engine-v8-version.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ \"./node_modules/core-js/internals/engine-user-agent.js\");\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('. ');\n // in old Chrome, versions of V8 isn't V8=C hrome / 10\n // but their correct versions are not interesting for us\n version=m atch[0]> 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match=u serAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1]>= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLDZGQUFnQzs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzPzJkMDAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/engine-v8-version.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/enum-bug-keys.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! \*********************************************************/ /***/ ((module) => { "use strict"; eval("\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanM/NzgzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/enum-bug-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/export.js": /*!**************************************************!*\ !*** ./node_modules/core-js/internals/export.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \"./node_modules/core-js/internals/object-get-own-property-descriptor.js\").f);\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \"./node_modules/core-js/internals/create-non-enumerable-property.js\");\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \"./node_modules/core-js/internals/define-built-in.js\");\nvar defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ \"./node_modules/core-js/internals/define-global-property.js\");\nvar copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ \"./node_modules/core-js/internals/copy-constructor-properties.js\");\nvar isForced = __webpack_require__(/*! ../internals/is-forced */ \"./node_modules/core-js/internals/is-forced.js\");\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLHVFQUFxQjtBQUMxQywrQkFBK0Isd0pBQTREO0FBQzNGLGtDQUFrQyxtQkFBTyxDQUFDLHVIQUE2QztBQUN2RixvQkFBb0IsbUJBQU8sQ0FBQyx5RkFBOEI7QUFDMUQsMkJBQTJCLG1CQUFPLENBQUMsdUdBQXFDO0FBQ3hFLGdDQUFnQyxtQkFBTyxDQUFDLGlIQUEwQztBQUNsRixlQUFlLG1CQUFPLENBQUMsNkVBQXdCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiw4REFBOEQ7QUFDOUQsSUFBSTtBQUNKLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzPzIzZTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/export.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/fails.js": /*!*************************************************!*\ !*** ./node_modules/core-js/internals/fails.js ***! \*************************************************/ /***/ ((module) => { "use strict"; eval("\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzP2QwMzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/fails.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/freezing.js": /*!****************************************************!*\ !*** ./node_modules/core-js/internals/freezing.js ***! \****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixZQUFZLG1CQUFPLENBQUMscUVBQW9COztBQUV4QztBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hELENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnJlZXppbmcuanM/YmIyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/freezing.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/function-apply.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/function-apply.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ \"./node_modules/core-js/internals/function-bind-native.js\");\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxtR0FBbUM7O0FBRTdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzPzJiYTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/function-apply.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/function-bind-context.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/function-bind-context.js ***! \*****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ \"./node_modules/core-js/internals/function-uncurry-this-clause.js\");\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \"./node_modules/core-js/internals/a-callable.js\");\nvar NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ \"./node_modules/core-js/internals/function-bind-native.js\");\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMsbUhBQTJDO0FBQ3JFLGdCQUFnQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNqRCxrQkFBa0IsbUJBQU8sQ0FBQyxtR0FBbUM7O0FBRTdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcz8wMzY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/function-bind-context.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/function-bind-native.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/function-bind-native.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixZQUFZLG1CQUFPLENBQUMscUVBQW9COztBQUV4QztBQUNBO0FBQ0EsNEJBQTRCLGFBQWE7QUFDekM7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanM/NDBkNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/function-bind-native.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/function-call.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/function-call.js ***! \*********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ \"./node_modules/core-js/internals/function-bind-native.js\");\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLG1HQUFtQzs7QUFFN0Q7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanM/YzY1YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/function-call.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/function-name.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/function-name.js ***! \*********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \"./node_modules/core-js/internals/has-own-property.js\");\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNwRCxhQUFhLG1CQUFPLENBQUMsMkZBQStCOztBQUVwRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtDQUErQyxhQUFhO0FBQzVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcz81ZTc3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/function-name.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/function-uncurry-this-accessor.js": /*!**************************************************************************!*\ !*** ./node_modules/core-js/internals/function-uncurry-this-accessor.js ***! \**************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \"./node_modules/core-js/internals/a-callable.js\");\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMscUdBQW9DO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLCtFQUF5Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanM/NzI4MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/function-uncurry-this-accessor.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/function-uncurry-this-clause.js": /*!************************************************************************!*\ !*** ./node_modules/core-js/internals/function-uncurry-this-clause.js ***! \************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar classofRaw = __webpack_require__(/*! ../internals/classof-raw */ \"./node_modules/core-js/internals/classof-raw.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\n\nmodule.exports = function (fn) {\n // Nashorn bug:\n // https://github.com/zloirock/core-js/issues/1128\n // https://github.com/zloirock/core-js/issues/1130\n if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzPzQ2MjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/function-uncurry-this-clause.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/function-uncurry-this.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/function-uncurry-this.js ***! \*****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ \"./node_modules/core-js/internals/function-bind-native.js\");\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMsbUdBQW1DOztBQUU3RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanM/ZTMzMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/function-uncurry-this.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/get-built-in.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/get-built-in.js ***! \********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLHVFQUFxQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzP2QwNjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pIDogZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/get-built-in.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/get-iterator-direct.js ": /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/get-iterator-direct.js ***! \***************************************************************/ /***/ ((module) => { "use strict "; eval("\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/proposal-iterator-helpers/#sec-getiteratordirect\nmodule.exports=f unction (obj) {\n return {\n iterator: obj,\n next: obj.next,\n done: false\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0LmpzPzQ2YzQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/get-iterator-direct.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/get-iterator-method.js ": /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/get-iterator-method.js ***! \***************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar classof=_ _webpack_require__(/*! ../internals/classof */ \ "./node_modules/core-js/internals/classof.js\");\nvar getMethod=_ _webpack_require__(/*! ../internals/get-method */ \ "./node_modules/core-js/internals/get-method.js\");\nvar isNullOrUndefined=_ _webpack_require__(/*! ../internals/is-null-or-undefined */ \ "./node_modules/core-js/internals/is-null-or-undefined.js\");\nvar Iterators=_ _webpack_require__(/*! ../internals/iterators */ \ "./node_modules/core-js/internals/iterators.js\");\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar ITERATOR=w ellKnownSymbol( 'iterator');\n\nmodule.exports=f unction (it) {\n if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7QUFDNUMsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXlCO0FBQ2pELHdCQUF3QixtQkFBTyxDQUFDLG1HQUFtQztBQUNuRSxnQkFBZ0IsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDOztBQUU5RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanM/MzVhMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/get-iterator-method.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/get-iterator.js ": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/get-iterator.js ***! \********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar call=_ _webpack_require__(/*! ../internals/function-call */ \ "./node_modules/core-js/internals/function-call.js\");\nvar aCallable=_ _webpack_require__(/*! ../internals/a-callable */ \ "./node_modules/core-js/internals/a-callable.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\nvar tryToString=_ _webpack_require__(/*! ../internals/try-to-string */ \ "./node_modules/core-js/internals/try-to-string.js\");\nvar getIteratorMethod=_ _webpack_require__(/*! ../internals/get-iterator-method */ \ "./node_modules/core-js/internals/get-iterator-method.js\");\n\nvar $TypeError=T ypeError;\n\nmodule.exports=f unction (argument, usingIterator) {\n var iteratorMethod=a rguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw $TypeError(tryToString(argument) + ' is not iterable');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsV0FBVyxtQkFBTyxDQUFDLHFGQUE0QjtBQUMvQyxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxrQkFBa0IsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDdEQsd0JBQXdCLG1CQUFPLENBQUMsaUdBQWtDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcz85YTFmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/get-iterator.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/get-method.js ": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/get-method.js ***! \******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar aCallable=_ _webpack_require__(/*! ../internals/a-callable */ \ "./node_modules/core-js/internals/a-callable.js\");\nvar isNullOrUndefined=_ _webpack_require__(/*! ../internals/is-null-or-undefined */ \ "./node_modules/core-js/internals/is-null-or-undefined.js\");\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports=f unction (V, P) {\n var func=V [P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGdCQUFnQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNqRCx3QkFBd0IsbUJBQU8sQ0FBQyxtR0FBbUM7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzP2RjNGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/get-method.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/get-set-record.js ": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/get-set-record.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar aCallable=_ _webpack_require__(/*! ../internals/a-callable */ \ "./node_modules/core-js/internals/a-callable.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\nvar call=_ _webpack_require__(/*! ../internals/function-call */ \ "./node_modules/core-js/internals/function-call.js\");\nvar toIntegerOrInfinity=_ _webpack_require__(/*! ../internals/to-integer-or-infinity */ \ "./node_modules/core-js/internals/to-integer-or-infinity.js\");\nvar getIteratorDirect=_ _webpack_require__(/*! ../internals/get-iterator-direct */ \ "./node_modules/core-js/internals/get-iterator-direct.js\");\n\nvar INVALID_SIZE='Invalid size' ;\nvar $RangeError=R angeError;\nvar $TypeError=T ypeError;\nvar max=M ath.max;\n\nvar SetRecord=f unction (set, size, has, keys) {\n this.set=s et;\n this.size=s ize;\n this.has=h as;\n this.keys=k eys;\n};\n\nSetRecord.prototype={ \n getIterator: function () {\n return getIteratorDirect(anObject(call(this.keys, this.set)));\n },\n includes: function (it) {\n return call(this.has, this.set, it);\n }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports=f unction (obj) {\n anObject(obj);\n var numSize=+ obj.size;\n // NOTE: If size is undefined, then numSize will be NaN\n // eslint-disable-next-line no-self-compare -- NaN check\n if (numSize !==n umSize) throw $TypeError(INVALID_SIZE);\n var intSize=t oIntegerOrInfinity(numSize);\n if (intSize < 0) throw $RangeError(INVALID_SIZE);\n return new SetRecord(\n obj,\n max(intSize, 0),\n aCallable(obj.has),\n aCallable(obj.keys)\n );\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxXQUFXLG1CQUFPLENBQUMscUZBQTRCO0FBQy9DLDBCQUEwQixtQkFBTyxDQUFDLHVHQUFxQztBQUN2RSx3QkFBd0IsbUJBQU8sQ0FBQyxpR0FBa0M7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LXJlY29yZC5qcz83ZjY1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyIElOVkFMSURfU0laRSA9ICdJbnZhbGlkIHNpemUnO1xudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgU2V0UmVjb3JkID0gZnVuY3Rpb24gKHNldCwgc2l6ZSwgaGFzLCBrZXlzKSB7XG4gIHRoaXMuc2V0ID0gc2V0O1xuICB0aGlzLnNpemUgPSBzaXplO1xuICB0aGlzLmhhcyA9IGhhcztcbiAgdGhpcy5rZXlzID0ga2V5cztcbn07XG5cblNldFJlY29yZC5wcm90b3R5cGUgPSB7XG4gIGdldEl0ZXJhdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEl0ZXJhdG9yRGlyZWN0KGFuT2JqZWN0KGNhbGwodGhpcy5rZXlzLCB0aGlzLnNldCkpKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBjYWxsKHRoaXMuaGFzLCB0aGlzLnNldCwgaXQpO1xuICB9XG59O1xuXG4vLyBgR2V0U2V0UmVjb3JkYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jc2VjLWdldHNldHJlY29yZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIGFuT2JqZWN0KG9iaik7XG4gIHZhciBudW1TaXplID0gK29iai5zaXplO1xuICAvLyBOT1RFOiBJZiBzaXplIGlzIHVuZGVmaW5lZCwgdGhlbiBudW1TaXplIHdpbGwgYmUgTmFOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1TaXplICE9PSBudW1TaXplKSB0aHJvdyAkVHlwZUVycm9yKElOVkFMSURfU0laRSk7XG4gIHZhciBpbnRTaXplID0gdG9JbnRlZ2VyT3JJbmZpbml0eShudW1TaXplKTtcbiAgaWYgKGludFNpemUgPCAwKSB0aHJvdyAkUmFuZ2VFcnJvcihJTlZBTElEX1NJWkUpO1xuICByZXR1cm4gbmV3IFNldFJlY29yZChcbiAgICBvYmosXG4gICAgbWF4KGludFNpemUsIDApLFxuICAgIGFDYWxsYWJsZShvYmouaGFzKSxcbiAgICBhQ2FsbGFibGUob2JqLmtleXMpXG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/get-set-record.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/global.js ": /*!**************************************************!*\ !*** ./node_modules/core-js/internals/global.js ***! \**************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict "; eval("\nvar check=f unction (it) {\n return it && it.Math===M ath && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports=\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis=='object' && globalThis) ||\n check(typeof window=='object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self=='object' && self) ||\n check(typeof __webpack_require__.g=='object' && __webpack_require__.g) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || this || Function( 'return this')();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxxQkFBTSxnQkFBZ0IscUJBQU07QUFDM0M7QUFDQSxpQkFBaUIsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanM/ZGE4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgdGhpcyB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/global.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/has-own-property.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/has-own-property.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar toObject=_ _webpack_require__(/*! ../internals/to-object */ \ "./node_modules/core-js/internals/to-object.js\");\n\nvar hasOwnProperty=u ncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports=O bject.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCxlQUFlLG1CQUFPLENBQUMsNkVBQXdCOztBQUUvQyxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzPzFhMmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/has-own-property.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/hidden-keys.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/hidden-keys.js ***! \*******************************************************/ /***/ ((module) => { "use strict "; eval("\nmodule.exports={ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcz9kMDEyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/hidden-keys.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/host-report-errors.js ": /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/host-report-errors.js ***! \**************************************************************/ /***/ ((module) => { "use strict "; eval("\nmodule.exports=f unction (a, b) {\n try {\n // eslint-disable-next-line no-console -- safe\n arguments.length===1 ? console.error(a) : console.error(a, b);\n } catch (error) { /* empty */ }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanM/NDRkZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/host-report-errors.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/html.js ": /*!************************************************!*\ !*** ./node_modules/core-js/internals/html.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar getBuiltIn=_ _webpack_require__(/*! ../internals/get-built-in */ \ "./node_modules/core-js/internals/get-built-in.js\");\n\nmodule.exports=g etBuiltIn( 'document', 'documentElement');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLG1GQUEyQjs7QUFFcEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcz8xYmU0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/html.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/ie8-dom-define.js ": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar DESCRIPTORS=_ _webpack_require__(/*! ../internals/descriptors */ \ "./node_modules/core-js/internals/descriptors.js\");\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\nvar createElement=_ _webpack_require__(/*! ../internals/document-create-element */ \ "./node_modules/core-js/internals/document-create-element.js\");\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports=! DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement( 'div'), 'a', {\n get: function () { return 7; }\n }).a !==7 ;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDcEQsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjtBQUN4QyxvQkFBb0IsbUJBQU8sQ0FBQyx5R0FBc0M7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLEdBQUc7QUFDSCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzPzBjZmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/ie8-dom-define.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/indexed-object.js ": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/indexed-object.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\nvar classof=_ _webpack_require__(/*! ../internals/classof-raw */ \ "./node_modules/core-js/internals/classof-raw.js\");\n\nvar $Object=O bject;\nvar split=u ncurryThis( ''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports=f ails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object( 'z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it)==='String' ? split(it, '') : $Object(it);\n} : $Object;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjtBQUN4QyxjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxFQUFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzPzQ0YWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/indexed-object.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/inherit-if-required.js ": /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/inherit-if-required.js ***! \***************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\nvar isObject=_ _webpack_require__(/*! ../internals/is-object */ \ "./node_modules/core-js/internals/is-object.js\");\nvar setPrototypeOf=_ _webpack_require__(/*! ../internals/object-set-prototype-of */ \ "./node_modules/core-js/internals/object-set-prototype-of.js\");\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports=f unction ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven 't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLHFCQUFxQixtQkFBTyxDQUFDLHlHQUFzQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzPzcxNTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBtYWtlcyBzdWJjbGFzc2luZyB3b3JrIGNvcnJlY3QgZm9yIHdyYXBwZWQgYnVpbHQtaW5zXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkdGhpcywgZHVtbXksIFdyYXBwZXIpIHtcbiAgdmFyIE5ld1RhcmdldCwgTmV3VGFyZ2V0UHJvdG90eXBlO1xuICBpZiAoXG4gICAgLy8gaXQgY2FuIHdvcmsgb25seSB3aXRoIG5hdGl2ZSBgc2V0UHJvdG90eXBlT2ZgXG4gICAgc2V0UHJvdG90eXBlT2YgJiZcbiAgICAvLyB3ZSBoYXZlbid0IGNvbXBsZXRlbHkgY29ycmVjdCBwcmUtRVM2IHdheSBmb3IgZ2V0dGluZyBgbmV3LnRhcmdldGAsIHNvIHVzZSB0aGlzXG4gICAgaXNDYWxsYWJsZShOZXdUYXJnZXQgPSBkdW1teS5jb25zdHJ1Y3RvcikgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/inherit-if-required.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/inspect-source.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/inspect-source.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar store = __webpack_require__(/*! ../internals/shared-store */ \"./node_modules/core-js/internals/shared-store.js\");\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource=f unction (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports=s tore.inspectSource;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELFlBQVksbUJBQU8sQ0FBQyxtRkFBMkI7O0FBRS9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcz84OTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/inspect-source.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/internal-metadata.js ": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/internal-metadata.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar hiddenKeys=_ _webpack_require__(/*! ../internals/hidden-keys */ \ "./node_modules/core-js/internals/hidden-keys.js\");\nvar isObject=_ _webpack_require__(/*! ../internals/is-object */ \ "./node_modules/core-js/internals/is-object.js\");\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar defineProperty=( __webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\").f);\nvar getOwnPropertyNamesModule=_ _webpack_require__(/*! ../internals/object-get-own-property-names */ \ "./node_modules/core-js/internals/object-get-own-property-names.js\");\nvar getOwnPropertyNamesExternalModule=_ _webpack_require__(/*! ../internals/object-get-own-property-names-external */ \ "./node_modules/core-js/internals/object-get-own-property-names-external.js\");\nvar isExtensible=_ _webpack_require__(/*! ../internals/object-is-extensible */ \ "./node_modules/core-js/internals/object-is-extensible.js\");\nvar uid=_ _webpack_require__(/*! ../internals/uid */ \ "./node_modules/core-js/internals/uid.js\");\nvar FREEZING=_ _webpack_require__(/*! ../internals/freezing */ \ "./node_modules/core-js/internals/freezing.js\");\n\nvar REQUIRED=f alse;\nvar METADATA=u id( 'meta');\nvar id=0 ;\n\nvar setMetadata=f unction (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey=f unction (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it=='symbol' ? it : (typeof it=='string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can 't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F ';\n // not necessary to add metadata\n if (!create) return 'E ';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze=f unction (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable=f unction () {\n meta.enable=f unction () { /* empty */ };\n REQUIRED=t rue;\n var getOwnPropertyNames=g etOwnPropertyNamesModule.f;\n var splice=u ncurryThis([].splice);\n var test={ };\n test[METADATA]=1 ;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f=f unction (it) {\n var result=g etOwnPropertyNames(it);\n for (var i=0 , length=r esult.length; i < length; i++) {\n if (result[i]===M ETADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta=m odule.exports={ \n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA]=t rue;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxhQUFhLG1CQUFPLENBQUMsMkZBQStCO0FBQ3BELHFCQUFxQixnSUFBZ0Q7QUFDckUsZ0NBQWdDLG1CQUFPLENBQUMscUhBQTRDO0FBQ3BGLHdDQUF3QyxtQkFBTyxDQUFDLHVJQUFxRDtBQUNyRyxtQkFBbUIsbUJBQU8sQ0FBQyxtR0FBbUM7QUFDOUQsVUFBVSxtQkFBTyxDQUFDLGlFQUFrQjtBQUNwQyxlQUFlLG1CQUFPLENBQUMsMkVBQXVCOztBQUU5QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQSwwQkFBMEI7QUFDMUIsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxZQUFZO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOztBQUVBLFFBQVEsNENBQTRDO0FBQ3BEO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzP2YxODMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/internal-metadata.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/internal-state.js ": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/internal-state.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar NATIVE_WEAK_MAP=_ _webpack_require__(/*! ../internals/weak-map-basic-detection */ \ "./node_modules/core-js/internals/weak-map-basic-detection.js\");\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\nvar isObject=_ _webpack_require__(/*! ../internals/is-object */ \ "./node_modules/core-js/internals/is-object.js\");\nvar createNonEnumerableProperty=_ _webpack_require__(/*! ../internals/create-non-enumerable-property */ \ "./node_modules/core-js/internals/create-non-enumerable-property.js\");\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar shared=_ _webpack_require__(/*! ../internals/shared-store */ \ "./node_modules/core-js/internals/shared-store.js\");\nvar sharedKey=_ _webpack_require__(/*! ../internals/shared-key */ \ "./node_modules/core-js/internals/shared-key.js\");\nvar hiddenKeys=_ _webpack_require__(/*! ../internals/hidden-keys */ \ "./node_modules/core-js/internals/hidden-keys.js\");\n\nvar OBJECT_ALREADY_INITIALIZED='Object already initialized' ;\nvar TypeError=g lobal.TypeError;\nvar WeakMap=g lobal.WeakMap;\nvar set, get, has;\n\nvar enforce=f unction (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor=f unction (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state=g et(it)).type !==T YPE) {\n throw TypeError( 'Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store=s hared.state || (shared.state=n ew WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get=s tore.get;\n store.has=s tore.has;\n store.set=s tore.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set=f unction (it, metadata) {\n if (store.has(it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade=i t;\n store.set(it, metadata);\n return metadata;\n };\n get=f unction (it) {\n return store.get(it) || {};\n };\n has=f unction (it) {\n return store.has(it);\n };\n} else {\n var STATE=s haredKey( 'state');\n hiddenKeys[STATE]=t rue;\n set=f unction (it, metadata) {\n if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade=i t;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get=f unction (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has=f unction (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports={ \n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQywyR0FBdUM7QUFDckUsYUFBYSxtQkFBTyxDQUFDLHVFQUFxQjtBQUMxQyxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLGtDQUFrQyxtQkFBTyxDQUFDLHVIQUE2QztBQUN2RixhQUFhLG1CQUFPLENBQUMsMkZBQStCO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDaEQsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXlCO0FBQ2pELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcz82OWYzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/internal-state.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/is-array-iterator-method.js ": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! \********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\nvar Iterators=_ _webpack_require__(/*! ../internals/iterators */ \ "./node_modules/core-js/internals/iterators.js\");\n\nvar ITERATOR=w ellKnownSymbol( 'iterator');\nvar ArrayPrototype=A rray.prototype;\n\n// check on default Array iterator\nmodule.exports=f unction (it) {\n return it !==u ndefined && (Iterators.Array===i t || ArrayPrototype[ITERATOR]===i t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanM/ZTk1YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-array-iterator-method.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/is-array.js ": /*!****************************************************!*\ !*** ./node_modules/core-js/internals/is-array.js ***! \****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar classof=_ _webpack_require__(/*! ../internals/classof-raw */ \ "./node_modules/core-js/internals/classof-raw.js\");\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports=A rray.isArray || function isArray(argument) {\n return classof(argument)==='Array' ;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanM/ZThiNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-array.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/is-callable.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/is-callable.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $documentAll=_ _webpack_require__(/*! ../internals/document-all */ \ "./node_modules/core-js/internals/document-all.js\");\n\nvar documentAll=$ documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports=$ documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument=='function' || argument===d ocumentAll;\n} : function (argument) {\n return typeof argument=='function' ;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixtQkFBbUIsbUJBQU8sQ0FBQyxtRkFBMkI7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanM/MTYyNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-callable.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/is-constructor.js ": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/is-constructor.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\nvar classof=_ _webpack_require__(/*! ../internals/classof */ \ "./node_modules/core-js/internals/classof.js\");\nvar getBuiltIn=_ _webpack_require__(/*! ../internals/get-built-in */ \ "./node_modules/core-js/internals/get-built-in.js\");\nvar inspectSource=_ _webpack_require__(/*! ../internals/inspect-source */ \ "./node_modules/core-js/internals/inspect-source.js\");\n\nvar noop=f unction () { /* empty */ };\nvar empty=[ ];\nvar construct=g etBuiltIn( 'Reflect', 'construct');\nvar constructorRegExp=/ ^\\s*(?:class|function)\\b/;\nvar exec=u ncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING=! constructorRegExp.exec(noop);\n\nvar isConstructorModern=f unction isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy=f unction isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can 't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham=t rue;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports=! construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called=t rue; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsY0FBYyxtQkFBTyxDQUFDLHlFQUFzQjtBQUM1QyxpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDcEQsb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCOztBQUV6RCx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxnQkFBZ0I7QUFDMUQ7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzPzY4ZWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-constructor.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/is-forced.js ": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-forced.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\n\nvar replacement=/ #|\\.prototype\\./;\n\nvar isForced=f unction (feature, detection) {\n var value=d ata[normalize(feature)];\n return value===P OLYFILL ? true\n : value===N ATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize=i sForced.normalize=f unction (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data=i sForced.data={ };\nvar NATIVE=i sForced.NATIVE='N' ;\nvar POLYFILL=i sForced.POLYFILL='P' ;\n\nmodule.exports=i sForced;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRW5EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzPzk0Y2EiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-forced.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/is-iterable.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/is-iterable.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar classof=_ _webpack_require__(/*! ../internals/classof */ \ "./node_modules/core-js/internals/classof.js\");\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar isNullOrUndefined=_ _webpack_require__(/*! ../internals/is-null-or-undefined */ \ "./node_modules/core-js/internals/is-null-or-undefined.js\");\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\nvar Iterators=_ _webpack_require__(/*! ../internals/iterators */ \ "./node_modules/core-js/internals/iterators.js\");\n\nvar ITERATOR=w ellKnownSymbol( 'iterator');\nvar $Object=O bject;\n\nmodule.exports=f unction (it) {\n if (isNullOrUndefined(it)) return false;\n var O=$ Object(it);\n return O[ITERATOR] !==u ndefined\n || '@@iterator' in O\n || hasOwn(Iterators, classof(O));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtaXRlcmFibGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMseUVBQXNCO0FBQzVDLGFBQWEsbUJBQU8sQ0FBQywyRkFBK0I7QUFDcEQsd0JBQXdCLG1CQUFPLENBQUMsbUdBQW1DO0FBQ25FLHNCQUFzQixtQkFBTyxDQUFDLDZGQUFnQztBQUM5RCxnQkFBZ0IsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRWhEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtaXRlcmFibGUuanM/OGNlZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBmYWxzZTtcbiAgdmFyIE8gPSAkT2JqZWN0KGl0KTtcbiAgcmV0dXJuIE9bSVRFUkFUT1JdICE9PSB1bmRlZmluZWRcbiAgICB8fCAnQEBpdGVyYXRvcicgaW4gT1xuICAgIHx8IGhhc093bihJdGVyYXRvcnMsIGNsYXNzb2YoTykpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-iterable.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/is-null-or-undefined.js ": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/is-null-or-undefined.js ***! \****************************************************************/ /***/ ((module) => { "use strict "; eval("\n// we can 't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzPzcyMzQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-null-or-undefined.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/is-object.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-object.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar $documentAll = __webpack_require__(/*! ../internals/document-all */ \"./node_modules/core-js/internals/document-all.js\");\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object ' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object ' ? it !== null : isCallable(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELG1CQUFtQixtQkFBTyxDQUFDLG1GQUEyQjs7QUFFdEQ7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcz84NjFkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpIHx8IGl0ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-object.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/is-pure.js": /*!***************************************************!*\ !*** ./node_modules/core-js/internals/is-pure.js ***! \***************************************************/ /***/ ((module) => { "use strict"; eval("\nmodule.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanM/YzQzMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-pure.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/is-symbol.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/is-symbol.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \"./node_modules/core-js/internals/get-built-in.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \"./node_modules/core-js/internals/object-is-prototype-of.js\");\nvar USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ \"./node_modules/core-js/internals/use-symbol-as-uid.js\");\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol ';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol ');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsaUJBQWlCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3BELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxvQkFBb0IsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDakUsd0JBQXdCLG1CQUFPLENBQUMsNkZBQWdDOztBQUVoRTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1zeW1ib2wuanM/ZDliNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/is-symbol.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/iterate-simple.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/iterate-simple.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n var next = record.next;\n var step, result;\n while (!(step = call(next, iterator)).done) {\n result = fn(step.value);\n if (result !== undefined) return result;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixXQUFXLG1CQUFPLENBQUMscUZBQTRCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUuanM/NTM4OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/iterate-simple.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/iterate.js": /*!***************************************************!*\ !*** ./node_modules/core-js/internals/iterate.js ***! \***************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar tryToString = __webpack_require__(/*! ../internals/try-to-string */ \"./node_modules/core-js/internals/try-to-string.js\");\nvar isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ \"./node_modules/core-js/internals/is-array-iterator-method.js\");\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \"./node_modules/core-js/internals/length-of-array-like.js\");\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \"./node_modules/core-js/internals/object-is-prototype-of.js\");\nvar getIterator = __webpack_require__(/*! ../internals/get-iterator */ \"./node_modules/core-js/internals/get-iterator.js\");\nvar getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ \"./node_modules/core-js/internals/get-iterator-method.js\");\nvar iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ \"./node_modules/core-js/internals/iterator-close.js\");\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_RECORD = !!(options && options.IS_RECORD);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal ', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_RECORD) {\n iterator = iterable.iterator;\n } else if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw $TypeError(tryToString(iterable) + ' is not iterable ');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = IS_RECORD ? iterable.next : iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw ', error);\n }\n if (typeof result == 'object ' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDdkQsV0FBVyxtQkFBTyxDQUFDLHFGQUE0QjtBQUMvQyxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLHFGQUE0QjtBQUN0RCw0QkFBNEIsbUJBQU8sQ0FBQywyR0FBdUM7QUFDM0Usd0JBQXdCLG1CQUFPLENBQUMsbUdBQW1DO0FBQ25FLG9CQUFvQixtQkFBTyxDQUFDLHVHQUFxQztBQUNqRSxrQkFBa0IsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDckQsd0JBQXdCLG1CQUFPLENBQUMsaUdBQWtDO0FBQ2xFLG9CQUFvQixtQkFBTyxDQUFDLHVGQUE2Qjs7QUFFekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELGdCQUFnQjtBQUM1RTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcz8yMjY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/iterate.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/iterator-close.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/iterator-close.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \"./node_modules/core-js/internals/get-method.js\");\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return ');\n if (!innerResult) {\n if (kind === 'throw ') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw ') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixXQUFXLG1CQUFPLENBQUMscUZBQTRCO0FBQy9DLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXlCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzPzJhNjIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/iterator-close.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/iterator-create-constructor.js": /*!***********************************************************************!*\ !*** ./node_modules/core-js/internals/iterator-create-constructor.js ***! \***********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar IteratorPrototype = (__webpack_require__(/*! ../internals/iterators-core */ \"./node_modules/core-js/internals/iterators-core.js\").IteratorPrototype);\nvar create = __webpack_require__(/*! ../internals/object-create */ \"./node_modules/core-js/internals/object-create.js\");\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \"./node_modules/core-js/internals/create-property-descriptor.js\");\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \"./node_modules/core-js/internals/set-to-string-tag.js\");\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \"./node_modules/core-js/internals/iterators.js\");\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator ';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isd0JBQXdCLGdJQUF3RDtBQUNoRixhQUFhLG1CQUFPLENBQUMscUZBQTRCO0FBQ2pELCtCQUErQixtQkFBTyxDQUFDLCtHQUF5QztBQUNoRixxQkFBcUIsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDN0QsZ0JBQWdCLG1CQUFPLENBQUMsNkVBQXdCOztBQUVoRCwrQkFBK0I7O0FBRS9CO0FBQ0E7QUFDQSw4REFBOEQseURBQXlEO0FBQ3ZIO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcz9kY2MzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/iterator-create-constructor.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/iterator-define.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/iterator-define.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \"./node_modules/core-js/internals/is-pure.js\");\nvar FunctionName = __webpack_require__(/*! ../internals/function-name */ \"./node_modules/core-js/internals/function-name.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ \"./node_modules/core-js/internals/iterator-create-constructor.js\");\nvar getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ \"./node_modules/core-js/internals/object-get-prototype-of.js\");\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \"./node_modules/core-js/internals/object-set-prototype-of.js\");\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \"./node_modules/core-js/internals/set-to-string-tag.js\");\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \"./node_modules/core-js/internals/create-non-enumerable-property.js\");\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \"./node_modules/core-js/internals/define-built-in.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \"./node_modules/core-js/internals/iterators.js\");\nvar IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ \"./node_modules/core-js/internals/iterators-core.js\");\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator ');\nvar KEYS = 'keys ';\nvar VALUES = 'values ';\nvar ENTRIES = 'entries ';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator ';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator ']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array ' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name ', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMscUZBQTRCO0FBQy9DLGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7QUFDNUMsbUJBQW1CLG1CQUFPLENBQUMscUZBQTRCO0FBQ3ZELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxnQ0FBZ0MsbUJBQU8sQ0FBQyxpSEFBMEM7QUFDbEYscUJBQXFCLG1CQUFPLENBQUMseUdBQXNDO0FBQ25FLHFCQUFxQixtQkFBTyxDQUFDLHlHQUFzQztBQUNuRSxxQkFBcUIsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDN0Qsa0NBQWtDLG1CQUFPLENBQUMsdUhBQTZDO0FBQ3ZGLG9CQUFvQixtQkFBTyxDQUFDLHlGQUE4QjtBQUMxRCxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDOUQsZ0JBQWdCLG1CQUFPLENBQUMsNkVBQXdCO0FBQ2hELG9CQUFvQixtQkFBTyxDQUFDLHVGQUE2Qjs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7O0FBRS9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDLDhDQUE4QztBQUM5QyxnREFBZ0Q7QUFDaEQ7O0FBRUEseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sU0FBUyxvRkFBb0Y7QUFDbkc7O0FBRUE7QUFDQTtBQUNBLGtFQUFrRSxlQUFlO0FBQ2pGO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUuanM/YzZkMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/iterator-define.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/iterators-core.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/iterators-core.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\nvar create = __webpack_require__(/*! ../internals/object-create */ \"./node_modules/core-js/internals/object-create.js\");\nvar getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ \"./node_modules/core-js/internals/object-get-prototype-of.js\");\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \"./node_modules/core-js/internals/define-built-in.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \"./node_modules/core-js/internals/is-pure.js\");\n\nvar ITERATOR = wellKnownSymbol('iterator ');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next ' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixZQUFZLG1CQUFPLENBQUMscUVBQW9CO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLGFBQWEsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDakQscUJBQXFCLG1CQUFPLENBQUMseUdBQXNDO0FBQ25FLG9CQUFvQixtQkFBTyxDQUFDLHlGQUE4QjtBQUMxRCxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLHlFQUFzQjs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcz9hZTkzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/iterators-core.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/iterators.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/iterators.js ***! \*****************************************************/ /***/ ((module) => { "use strict"; eval("\nmodule.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzPzNmOGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/iterators.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/length-of-array-like.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/length-of-array-like.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \"./node_modules/core-js/internals/to-length.js\");\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsNkVBQXdCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzPzA3ZmEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/length-of-array-like.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/make-built-in.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/make-built-in.js ***! \*********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \"./node_modules/core-js/internals/has-own-property.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(/*! ../internals/function-name */ \"./node_modules/core-js/internals/function-name.js\").CONFIGURABLE);\nvar inspectSource = __webpack_require__(/*! ../internals/inspect-source */ \"./node_modules/core-js/internals/inspect-source.js\");\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \"./node_modules/core-js/internals/internal-state.js\");\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(' '.slice);\nvar replace = uncurryThis(' '.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length ', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String ');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol( ') {\n name = '[ ' + replace($String(name), /^Symbol\\(([^)]*)\\)/, '$1 ') + '] ';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name ') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name ', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity ') && value.length !== options.arity) {\n defineProperty(value, 'length ', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor ') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype ', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source ')) {\n state.source = join(TEMPLATE, typeof name == 'string ' ? name : ' ');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString ');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCxZQUFZLG1CQUFPLENBQUMscUVBQW9CO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxhQUFhLG1CQUFPLENBQUMsMkZBQStCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNwRCxpQ0FBaUMseUhBQWtEO0FBQ25GLG9CQUFvQixtQkFBTyxDQUFDLHVGQUE2QjtBQUN6RCwwQkFBMEIsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0MsYUFBYSxjQUFjLFVBQVU7QUFDM0UsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxpQ0FBaUM7QUFDdEY7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLHNCQUFzQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQSw0REFBNEQsaUJBQWlCO0FBQzdFO0FBQ0EsTUFBTTtBQUNOLElBQUksZ0JBQWdCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbi5qcz8xM2QyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkNPTkZJR1VSQUJMRTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/make-built-in.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/map-helpers.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/map-helpers.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\n\n// eslint-disable-next-line es/no-map -- safe\nvar MapPrototype = Map.prototype;\n\nmodule.exports = {\n // eslint-disable-next-line es/no-map -- safe\n Map: Map,\n set: uncurryThis(MapPrototype.set),\n get: uncurryThis(MapPrototype.get),\n has: uncurryThis(MapPrototype.has),\n remove: uncurryThis(MapPrototype['delete ']),\n proto: MapPrototype\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFwLWhlbHBlcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7O0FBRTlEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hcC1oZWxwZXJzLmpzPzA5NGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWFwIC0tIHNhZmVcbnZhciBNYXBQcm90b3R5cGUgPSBNYXAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hcCAtLSBzYWZlXG4gIE1hcDogTWFwLFxuICBzZXQ6IHVuY3VycnlUaGlzKE1hcFByb3RvdHlwZS5zZXQpLFxuICBnZXQ6IHVuY3VycnlUaGlzKE1hcFByb3RvdHlwZS5nZXQpLFxuICBoYXM6IHVuY3VycnlUaGlzKE1hcFByb3RvdHlwZS5oYXMpLFxuICByZW1vdmU6IHVuY3VycnlUaGlzKE1hcFByb3RvdHlwZVsnZGVsZXRlJ10pLFxuICBwcm90bzogTWFwUHJvdG90eXBlXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/map-helpers.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/map-iterate.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/map-iterate.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ \"./node_modules/core-js/internals/iterate-simple.js\");\nvar MapHelpers = __webpack_require__(/*! ../internals/map-helpers */ \"./node_modules/core-js/internals/map-helpers.js\");\n\nvar Map = MapHelpers.Map;\nvar MapPrototype = MapHelpers.proto;\nvar forEach = uncurryThis(MapPrototype.forEach);\nvar entries = uncurryThis(MapPrototype.entries);\nvar next = entries(new Map()).next;\n\nmodule.exports = function (map, fn, interruptible) {\n return interruptible ? iterateSimple({ iterator: entries(map), next: next }, function (entry) {\n return fn(entry[1], entry[0]);\n }) : forEach(map, fn);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFwLWl0ZXJhdGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3pELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlDQUF5QyxvQ0FBb0M7QUFDN0U7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFwLWl0ZXJhdGUuanM/ZjI5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIE1hcEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLWhlbHBlcnMnKTtcblxudmFyIE1hcCA9IE1hcEhlbHBlcnMuTWFwO1xudmFyIE1hcFByb3RvdHlwZSA9IE1hcEhlbHBlcnMucHJvdG87XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKE1hcFByb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBlbnRyaWVzID0gdW5jdXJyeVRoaXMoTWFwUHJvdG90eXBlLmVudHJpZXMpO1xudmFyIG5leHQgPSBlbnRyaWVzKG5ldyBNYXAoKSkubmV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWFwLCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoeyBpdGVyYXRvcjogZW50cmllcyhtYXApLCBuZXh0OiBuZXh0IH0sIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgIHJldHVybiBmbihlbnRyeVsxXSwgZW50cnlbMF0pO1xuICB9KSA6IGZvckVhY2gobWFwLCBmbik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/map-iterate.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/math-fround.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/math-fround.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar sign = __webpack_require__(/*! ../internals/math-sign */ \"./node_modules/core-js/internals/math-sign.js\");\n\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n// `Math.fround` method implementation\n// https://tc39.es/ecma262/#sec-math.fround\n// eslint-disable-next-line es/no-math-fround -- safe\nmodule.exports = Math.fround || function fround(x) {\n var n = +x;\n var $abs = abs(n);\n var $sign = sign(n);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (result > MAX32 || result !== result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC1mcm91bmQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixXQUFXLG1CQUFPLENBQUMsNkVBQXdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLWZyb3VuZC5qcz9iZThlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtc2lnbicpO1xuXG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG4vLyBgTWF0aC5mcm91bmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmZyb3VuZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtZnJvdW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mcm91bmQgfHwgZnVuY3Rpb24gZnJvdW5kKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgdmFyICRhYnMgPSBhYnMobik7XG4gIHZhciAkc2lnbiA9IHNpZ24obik7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT09IHJlc3VsdCkgcmV0dXJuICRzaWduICogSW5maW5pdHk7XG4gIHJldHVybiAkc2lnbiAqIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/math-fround.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/math-scale.js": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/math-scale.js ***! \******************************************************/ /***/ ((module) => { "use strict"; eval("\n// `Math.scale` method implementation\n// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n var nx = +x;\n var nInLow = +inLow;\n var nInHigh = +inHigh;\n var nOutLow = +outLow;\n var nOutHigh = +outHigh;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (nx !== nx || nInLow !== nInLow || nInHigh !== nInHigh || nOutLow !== nOutLow || nOutHigh !== nOutHigh) return NaN;\n if (nx === Infinity || nx === -Infinity) return nx;\n return (nx - nInLow) * (nOutHigh - nOutLow) / (nInHigh - nInLow) + nOutLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC1zY2FsZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hdGgtc2NhbGUuanM/YmU4YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBgTWF0aC5zY2FsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIHZhciBueCA9ICt4O1xuICB2YXIgbkluTG93ID0gK2luTG93O1xuICB2YXIgbkluSGlnaCA9ICtpbkhpZ2g7XG4gIHZhciBuT3V0TG93ID0gK291dExvdztcbiAgdmFyIG5PdXRIaWdoID0gK291dEhpZ2g7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChueCAhPT0gbnggfHwgbkluTG93ICE9PSBuSW5Mb3cgfHwgbkluSGlnaCAhPT0gbkluSGlnaCB8fCBuT3V0TG93ICE9PSBuT3V0TG93IHx8IG5PdXRIaWdoICE9PSBuT3V0SGlnaCkgcmV0dXJuIE5hTjtcbiAgaWYgKG54ID09PSBJbmZpbml0eSB8fCBueCA9PT0gLUluZmluaXR5KSByZXR1cm4gbng7XG4gIHJldHVybiAobnggLSBuSW5Mb3cpICogKG5PdXRIaWdoIC0gbk91dExvdykgLyAobkluSGlnaCAtIG5JbkxvdykgKyBuT3V0TG93O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/math-scale.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/math-sign.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/math-sign.js ***! \*****************************************************/ /***/ ((module) => { "use strict"; eval("\n// `Math.sign` method implementation\n// https://tc39.es/ecma262/#sec-math.sign\n// eslint-disable-next-line es/no-math-sign -- safe\nmodule.exports = Math.sign || function sign(x) {\n var n = +x;\n // eslint-disable-next-line no-self-compare -- NaN check\n return n === 0 || n !== n ? n : n < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC1zaWduLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXNpZ24uanM/Zjc0OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBgTWF0aC5zaWduYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5zaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1zaWduIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICB2YXIgbiA9ICt4O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbiA9PT0gMCB8fCBuICE9PSBuID8gbiA6IG4gPCAwID8gLTEgOiAxO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/math-sign.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/math-trunc.js": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/math-trunc.js ***! \******************************************************/ /***/ ((module) => { "use strict"; eval("\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcz9iNDJlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/math-trunc.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/new-promise-capability.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/new-promise-capability.js ***! \******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \"./node_modules/core-js/internals/a-callable.js\");\n\nvar $TypeError = TypeError;\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw $TypeError('Bad Promise constructor ');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGdCQUFnQixtQkFBTyxDQUFDLCtFQUF5Qjs7QUFFakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9mMDY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/new-promise-capability.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/number-is-finite.js": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/number-is-finite.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number ' && globalIsFinite(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLWlzLWZpbml0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7O0FBRTFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItaXMtZmluaXRlLmpzP2UyODUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGdsb2JhbElzRmluaXRlID0gZ2xvYmFsLmlzRmluaXRlO1xuXG4vLyBgTnVtYmVyLmlzRmluaXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzZmluaXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbnVtYmVyLWlzZmluaXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgZ2xvYmFsSXNGaW5pdGUoaXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/number-is-finite.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/number-parse-int.js": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/number-parse-int.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar toString = __webpack_require__(/*! ../internals/to-string */ \"./node_modules/core-js/internals/to-string.js\");\nvar trim = (__webpack_require__(/*! ../internals/string-trim */ \"./node_modules/core-js/internals/string-trim.js\").trim);\nvar whitespaces = __webpack_require__(/*! ../internals/whitespaces */ \"./node_modules/core-js/internals/whitespaces.js\");\n\nvar $parseInt = global.parseInt;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08 ') !== 8 || $parseInt(whitespaces + '0x16 ') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxXQUFXLDZHQUF3QztBQUNuRCxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDhCQUE4Qjs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludC5qcz9jMjBkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgJHBhcnNlSW50ID0gZ2xvYmFsLnBhcnNlSW50O1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgSVRFUkFUT1IgPSBTeW1ib2wgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIGhleCA9IC9eWystXT8weC9pO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhoZXguZXhlYyk7XG52YXIgRk9SQ0VEID0gJHBhcnNlSW50KHdoaXRlc3BhY2VzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdoaXRlc3BhY2VzICsgJzB4MTYnKSAhPT0gMjJcbiAgLy8gTVMgRWRnZSAxOC0gYnJva2VuIHdpdGggYm94ZWQgc3ltYm9sc1xuICB8fCAoSVRFUkFUT1IgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgJHBhcnNlSW50KE9iamVjdChJVEVSQVRPUikpOyB9KSk7XG5cbi8vIGBwYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRUQgPyBmdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4KSB7XG4gIHZhciBTID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgcmV0dXJuICRwYXJzZUludChTLCAocmFkaXggPj4+IDApIHx8IChleGVjKGhleCwgUykgPyAxNiA6IDEwKSk7XG59IDogJHBhcnNlSW50O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/number-parse-int.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-create.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/object-create.js ***! \*********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar definePropertiesModule = __webpack_require__(/*! ../internals/object-define-properties */ \"./node_modules/core-js/internals/object-define-properties.js\");\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \"./node_modules/core-js/internals/enum-bug-keys.js\");\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \"./node_modules/core-js/internals/hidden-keys.js\");\nvar html = __webpack_require__(/*! ../internals/html */ \"./node_modules/core-js/internals/html.js\");\nvar documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ \"./node_modules/core-js/internals/document-create-element.js\");\nvar sharedKey = __webpack_require__(/*! ../internals/shared-key */ \"./node_modules/core-js/internals/shared-key.js\");\n\nvar GT = '>';\nvar LT = ' < ';\nvar PROTOTYPE = 'prototype ';\nvar SCRIPT = 'script ';\nvar IE_PROTO = sharedKey('IE_PROTO ');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/ ' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(' '));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe ');\n var JS = 'java ' + SCRIPT + ': ';\n var iframeDocument;\n iframe.style.display = 'none ';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object '));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile ');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined '\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyw2QkFBNkIsbUJBQU8sQ0FBQywyR0FBdUM7QUFDNUUsa0JBQWtCLG1CQUFPLENBQUMscUZBQTRCO0FBQ3RELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxXQUFXLG1CQUFPLENBQUMsbUVBQW1CO0FBQ3RDLDRCQUE0QixtQkFBTyxDQUFDLHlHQUFzQztBQUMxRSxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0JBQWdCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzPzdjNzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-create.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-define-properties.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/object-define-properties.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval("\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ \"./node_modules/core-js/internals/v8-prototype-define-bug.js\");\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \"./node_modules/core-js/internals/object-define-property.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \"./node_modules/core-js/internals/to-indexed-object.js\");\nvar objectKeys = __webpack_require__(/*! ../internals/object-keys */ \"./node_modules/core-js/internals/object-keys.js\");\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELDhCQUE4QixtQkFBTyxDQUFDLHlHQUFzQztBQUM1RSwyQkFBMkIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDeEUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDOUQsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCOztBQUVuRDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcz8zN2U4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-define-properties.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-define-property.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/object-define-property.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval("\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ \"./node_modules/core-js/internals/ie8-dom-define.js\");\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ \"./node_modules/core-js/internals/v8-prototype-define-bug.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ \"./node_modules/core-js/internals/to-property-key.js\");\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable ';\nvar CONFIGURABLE = 'configurable ';\nvar WRITABLE = 'writable ';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function ' && P === 'prototype ' && 'value ' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get ' in Attributes || 'set ' in Attributes) throw $TypeError('Accessors not supported ');\n if ('value ' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNwRCxxQkFBcUIsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDMUQsOEJBQThCLG1CQUFPLENBQUMseUdBQXNDO0FBQzVFLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0Msb0JBQW9CLG1CQUFPLENBQUMseUZBQThCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzPzliZjIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-define-property.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-get-own-property-descriptor.js": /*!******************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval("\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ \"./node_modules/core-js/internals/object-property-is-enumerable.js\");\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \"./node_modules/core-js/internals/create-property-descriptor.js\");\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \"./node_modules/core-js/internals/to-indexed-object.js\");\nvar toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ \"./node_modules/core-js/internals/to-property-key.js\");\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \"./node_modules/core-js/internals/has-own-property.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ \"./node_modules/core-js/internals/ie8-dom-define.js\");\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNwRCxXQUFXLG1CQUFPLENBQUMscUZBQTRCO0FBQy9DLGlDQUFpQyxtQkFBTyxDQUFDLHFIQUE0QztBQUNyRiwrQkFBK0IsbUJBQU8sQ0FBQywrR0FBeUM7QUFDaEYsc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELG9CQUFvQixtQkFBTyxDQUFDLHlGQUE4QjtBQUMxRCxhQUFhLG1CQUFPLENBQUMsMkZBQStCO0FBQ3BELHFCQUFxQixtQkFBTyxDQUFDLHVGQUE2Qjs7QUFFMUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDcEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzPzA2Y2YiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-get-own-property-descriptor.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-get-own-property-names-external.js": /*!**********************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-names-external.js ***! \**********************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \"./node_modules/core-js/internals/classof-raw.js\");\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \"./node_modules/core-js/internals/to-indexed-object.js\");\nvar $getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ \"./node_modules/core-js/internals/object-get-own-property-names.js\").f);\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice-simple */ \"./node_modules/core-js/internals/array-slice-simple.js\");\n\nvar windowNames = typeof window == 'object ' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) === 'Window '\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELDJCQUEyQiw4SUFBdUQ7QUFDbEYsaUJBQWlCLG1CQUFPLENBQUMsK0ZBQWlDOztBQUUxRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanM/MDU3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-get-own-property-names-external.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-get-own-property-names.js": /*!*************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval("\nvar internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ \"./node_modules/core-js/internals/object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \"./node_modules/core-js/internals/enum-bug-keys.js\");\n\nvar hiddenKeys = enumBugKeys.concat('length ', 'prototype ');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYix5QkFBeUIsbUJBQU8sQ0FBQyxtR0FBbUM7QUFDcEUsa0JBQWtCLG1CQUFPLENBQUMscUZBQTRCOztBQUV0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcz8yNDFjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-get-own-property-names.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-get-own-property-symbols.js": /*!***************************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! \***************************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; eval("\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsU0FBUyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzPzc0MTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-get-own-property-symbols.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-get-prototype-of.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***! \*******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \"./node_modules/core-js/internals/has-own-property.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \"./node_modules/core-js/internals/to-object.js\");\nvar sharedKey = __webpack_require__(/*! ../internals/shared-key */ \"./node_modules/core-js/internals/shared-key.js\");\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ \"./node_modules/core-js/internals/correct-prototype-getter.js\");\n\nvar IE_PROTO = sharedKey('IE_PROTO ');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsMkZBQStCO0FBQ3BELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLGdCQUFnQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNqRCwrQkFBK0IsbUJBQU8sQ0FBQywyR0FBdUM7O0FBRTlFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanM/ZTE2MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-get-prototype-of.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-is-extensible.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/object-is-extensible.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \"./node_modules/core-js/internals/classof-raw.js\");\nvar ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(/*! ../internals/array-buffer-non-extensible */ \"./node_modules/core-js/internals/array-buffer-non-extensible.js\");\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer ') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixZQUFZLG1CQUFPLENBQUMscUVBQW9CO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLGlGQUEwQjtBQUNoRCxrQ0FBa0MsbUJBQU8sQ0FBQyxpSEFBMEM7O0FBRXBGO0FBQ0E7QUFDQSw4Q0FBOEMsbUJBQW1COztBQUVqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzPzRmYWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-is-extensible.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-is-prototype-of.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/object-is-prototype-of.js ***! \******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQzs7QUFFOUQsK0JBQStCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanM/M2E5YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-is-prototype-of.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-keys-internal.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/object-keys-internal.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \"./node_modules/core-js/internals/has-own-property.js\");\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \"./node_modules/core-js/internals/to-indexed-object.js\");\nvar indexOf = (__webpack_require__(/*! ../internals/array-includes */ \"./node_modules/core-js/internals/array-includes.js\").indexOf);\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \"./node_modules/core-js/internals/hidden-keys.js\");\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length> i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsYUFBYSxtQkFBTyxDQUFDLDJGQUErQjtBQUNwRCxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDOUQsY0FBYyxzSEFBOEM7QUFDNUQsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCOztBQUVuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2E4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-keys-internal.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-keys.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/object-keys.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ \"./node_modules/core-js/internals/object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \"./node_modules/core-js/internals/enum-bug-keys.js\");\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYix5QkFBeUIsbUJBQU8sQ0FBQyxtR0FBbUM7QUFDcEUsa0JBQWtCLG1CQUFPLENBQUMscUZBQTRCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanM/ZGY3NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-property-is-enumerable.js": /*!*************************************************************************!*\ !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; eval("\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBLDRFQUE0RSxNQUFNOztBQUVsRjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxFQUFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzP2QxZTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-property-is-enumerable.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/object-set-prototype-of.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***! \*******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = __webpack_require__(/*! ../internals/function-uncurry-this-accessor */ \"./node_modules/core-js/internals/function-uncurry-this-accessor.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ \"./node_modules/core-js/internals/a-possible-prototype.js\");\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDBCQUEwQixtQkFBTyxDQUFDLHVIQUE2QztBQUMvRSxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLHlCQUF5QixtQkFBTyxDQUFDLG1HQUFtQzs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanM/ZDJiYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/object-set-prototype-of.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/observable-forced.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/observable-forced.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar $$OBSERVABLE = wellKnownSymbol('observable');\nvar NativeObservable = global.Observable;\nvar NativeObservablePrototype = NativeObservable && NativeObservable.prototype;\n\nmodule.exports = !isCallable(NativeObservable)\n || !isCallable(NativeObservable.from)\n || !isCallable(NativeObservable.of)\n || !isCallable(NativeObservablePrototype.subscribe)\n || !isCallable(NativeObservablePrototype[$$OBSERVABLE]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JzZXJ2YWJsZS1mb3JjZWQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7O0FBRTlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29ic2VydmFibGUtZm9yY2VkLmpzP2UwMGIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkJE9CU0VSVkFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbnZhciBOYXRpdmVPYnNlcnZhYmxlID0gZ2xvYmFsLk9ic2VydmFibGU7XG52YXIgTmF0aXZlT2JzZXJ2YWJsZVByb3RvdHlwZSA9IE5hdGl2ZU9ic2VydmFibGUgJiYgTmF0aXZlT2JzZXJ2YWJsZS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gIWlzQ2FsbGFibGUoTmF0aXZlT2JzZXJ2YWJsZSlcbiAgfHwgIWlzQ2FsbGFibGUoTmF0aXZlT2JzZXJ2YWJsZS5mcm9tKVxuICB8fCAhaXNDYWxsYWJsZShOYXRpdmVPYnNlcnZhYmxlLm9mKVxuICB8fCAhaXNDYWxsYWJsZShOYXRpdmVPYnNlcnZhYmxlUHJvdG90eXBlLnN1YnNjcmliZSlcbiAgfHwgIWlzQ2FsbGFibGUoTmF0aXZlT2JzZXJ2YWJsZVByb3RvdHlwZVskJE9CU0VSVkFCTEVdKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/observable-forced.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/ordinary-to-primitive.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/ordinary-to-primitive.js ***! \*****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw $TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsV0FBVyxtQkFBTyxDQUFDLHFGQUE0QjtBQUMvQyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcz80ODVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/ordinary-to-primitive.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/own-keys.js": /*!****************************************************!*\ !*** ./node_modules/core-js/internals/own-keys.js ***! \****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \"./node_modules/core-js/internals/get-built-in.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ \"./node_modules/core-js/internals/object-get-own-property-names.js\");\nvar getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ \"./node_modules/core-js/internals/object-get-own-property-symbols.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3duLWtleXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDcEQsa0JBQWtCLG1CQUFPLENBQUMscUdBQW9DO0FBQzlELGdDQUFnQyxtQkFBTyxDQUFDLHFIQUE0QztBQUNwRixrQ0FBa0MsbUJBQU8sQ0FBQyx5SEFBOEM7QUFDeEYsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzPzU2ZWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/own-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/path.js": /*!************************************************!*\ !*** ./node_modules/core-js/internals/path.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\n\nmodule.exports = global;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7O0FBRTFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanM/NDI4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/path.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/perform.js": /*!***************************************************!*\ !*** ./node_modules/core-js/internals/perform.js ***! \***************************************************/ /***/ ((module) => { "use strict"; eval("\nmodule.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsSUFBSTtBQUNKLGFBQWE7QUFDYjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BlcmZvcm0uanM/ZTY2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/perform.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/reflect-metadata.js": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/reflect-metadata.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\n__webpack_require__(/*! ../modules/es.map */ \"./node_modules/core-js/modules/es.map.js\");\n__webpack_require__(/*! ../modules/es.weak-map */ \"./node_modules/core-js/modules/es.weak-map.js\");\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \"./node_modules/core-js/internals/get-built-in.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar shared = __webpack_require__(/*! ../internals/shared */ \"./node_modules/core-js/internals/shared.js\");\n\nvar Map = getBuiltIn('Map');\nvar WeakMap = getBuiltIn('WeakMap');\nvar push = uncurryThis([].push);\n\nvar metadata = shared('metadata');\nvar store = metadata.store || (metadata.store = new WeakMap());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\n\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\n\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\n\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\n\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { push(keys, key); });\n return keys;\n};\n\nvar toMetadataKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\n\nmodule.exports = {\n store: store,\n getMap: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n toKey: toMetadataKey\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxtRUFBbUI7QUFDM0IsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDaEMsaUJBQWlCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3BELGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCxhQUFhLG1CQUFPLENBQUMsdUVBQXFCOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELGtCQUFrQjtBQUM3RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YS5qcz83ODNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm1hcCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy53ZWFrLW1hcCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xuXG52YXIgTWFwID0gZ2V0QnVpbHRJbignTWFwJyk7XG52YXIgV2Vha01hcCA9IGdldEJ1aWx0SW4oJ1dlYWtNYXAnKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBtZXRhZGF0YSA9IHNoYXJlZCgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlIHx8IChtZXRhZGF0YS5zdG9yZSA9IG5ldyBXZWFrTWFwKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybjtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xuXG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xuXG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcblxudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcblxudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsgcHVzaChrZXlzLCBrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xuXG52YXIgdG9NZXRhZGF0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBnZXRNYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICB0b0tleTogdG9NZXRhZGF0YUtleVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/reflect-metadata.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/regexp-flags.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/regexp-flags.js ***! \********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcz9hZDZkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/regexp-flags.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/require-object-coercible.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/require-object-coercible.js ***! \********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \"./node_modules/core-js/internals/is-null-or-undefined.js\");\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw $TypeError(\"Can't call method on \" + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isd0JBQXdCLG1CQUFPLENBQUMsbUdBQW1DOztBQUVuRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzPzFkODAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/require-object-coercible.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/same-value-zero.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/same-value-zero.js ***! \***********************************************************/ /***/ ((module) => { "use strict"; eval("\n// `SameValueZero` abstract operation\n// https://tc39.es/ecma262/#sec-samevaluezero\nmodule.exports = function (x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y || x !== x && y !== y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2FtZS12YWx1ZS16ZXJvLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NhbWUtdmFsdWUtemVyby5qcz84Yjg1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGBTYW1lVmFsdWVaZXJvYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2FtZXZhbHVlemVyb1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4geCA9PT0geSB8fCB4ICE9PSB4ICYmIHkgIT09IHk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/same-value-zero.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/schedulers-fix.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/schedulers-fix.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar apply = __webpack_require__(/*! ../internals/function-apply */ \"./node_modules/core-js/internals/function-apply.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar ENGINE_IS_BUN = __webpack_require__(/*! ../internals/engine-is-bun */ \"./node_modules/core-js/internals/engine-is-bun.js\");\nvar USER_AGENT = __webpack_require__(/*! ../internals/engine-user-agent */ \"./node_modules/core-js/internals/engine-user-agent.js\");\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice */ \"./node_modules/core-js/internals/array-slice.js\");\nvar validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ \"./node_modules/core-js/internals/validate-arguments-length.js\");\n\nvar Function = global.Function;\n// dirty IE9- and Bun 0.3.0- checks\nvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENGINE_IS_BUN && (function () {\n var version = global.Bun.version.split('.');\n return version.length < 3 || version[0]==='0' && (version[1] < 3 || version[1]==='3' && version[2]==='0' );\n})();\n\n// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n// https://github.com/oven-sh/bun/issues/1633\nmodule.exports=f unction (scheduler, hasTimeArg) {\n var firstParamIndex=h asTimeArg ? 2 : 1;\n return WRAP ? function (handler, timeout /* , ...arguments */) {\n var boundArgs=v alidateArgumentsLength(arguments.length, 1)> firstParamIndex;\n var fn = isCallable(handler) ? handler : Function(handler);\n var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];\n var callback = boundArgs ? function () {\n apply(fn, this, params);\n } : fn;\n return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);\n } : scheduler;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyx1RkFBNkI7QUFDakQsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLHFGQUE0QjtBQUN4RCxpQkFBaUIsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDekQsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELDhCQUE4QixtQkFBTyxDQUFDLDZHQUF3Qzs7QUFFOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeC5qcz8yMGNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/schedulers-fix.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/set-clone.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/set-clone.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ \"./node_modules/core-js/internals/set-helpers.js\");\nvar iterate = __webpack_require__(/*! ../internals/set-iterate */ \"./node_modules/core-js/internals/set-iterate.js\");\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n var result = new Set();\n iterate(set, function (it) {\n add(result, it);\n });\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWNsb25lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtY2xvbmUuanM/ODNiOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIGFkZCA9IFNldEhlbHBlcnMuYWRkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBTZXQoKTtcbiAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-clone.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/set-difference.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/internals/set-difference.js ***! \**********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar aSet = __webpack_require__(/*! ../internals/a-set */ \"./node_modules/core-js/internals/a-set.js\");\nvar SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ \"./node_modules/core-js/internals/set-helpers.js\");\nvar clone = __webpack_require__(/*! ../internals/set-clone */ \"./node_modules/core-js/internals/set-clone.js\");\nvar size = __webpack_require__(/*! ../internals/set-size */ \"./node_modules/core-js/internals/set-size.js\");\nvar getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ \"./node_modules/core-js/internals/get-set-record.js\");\nvar iterateSet = __webpack_require__(/*! ../internals/set-iterate */ \"./node_modules/core-js/internals/set-iterate.js\");\nvar iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ \"./node_modules/core-js/internals/iterate-simple.js\");\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function difference(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n var result = clone(O);\n if (size(O) <=o therRec.size) iterateSet(O, function (e) {\n if (otherRec.includes(e)) remove(result, e);\n });\n else iterateSimple(otherRec.getIterator(), function (e) {\n if (has(O, e)) remove(result, e);\n });\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxZQUFZLG1CQUFPLENBQUMsNkVBQXdCO0FBQzVDLFdBQVcsbUJBQU8sQ0FBQywyRUFBdUI7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxvQkFBb0IsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXpEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UuanM/YTVmNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgZWxzZSBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-difference.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-helpers.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/set-helpers.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\n\n// eslint-disable-next-line es/no-set -- safe\nvar SetPrototype=S et.prototype;\n\nmodule.exports={ \n // eslint-disable-next-line es/no-set -- safe\n Set: Set,\n add: uncurryThis(SetPrototype.add),\n has: uncurryThis(SetPrototype.has),\n remove: uncurryThis(SetPrototype[ 'delete']),\n proto: SetPrototype\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7O0FBRTlEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaGVscGVycy5qcz9jYjI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxuICBTZXQ6IFNldCxcbiAgYWRkOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuYWRkKSxcbiAgaGFzOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGVbJ2RlbGV0ZSddKSxcbiAgcHJvdG86IFNldFByb3RvdHlwZVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-helpers.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-intersection.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/set-intersection.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar aSet=_ _webpack_require__(/*! ../internals/a-set */ \ "./node_modules/core-js/internals/a-set.js\");\nvar SetHelpers=_ _webpack_require__(/*! ../internals/set-helpers */ \ "./node_modules/core-js/internals/set-helpers.js\");\nvar size=_ _webpack_require__(/*! ../internals/set-size */ \ "./node_modules/core-js/internals/set-size.js\");\nvar getSetRecord=_ _webpack_require__(/*! ../internals/get-set-record */ \ "./node_modules/core-js/internals/get-set-record.js\");\nvar iterateSet=_ _webpack_require__(/*! ../internals/set-iterate */ \ "./node_modules/core-js/internals/set-iterate.js\");\nvar iterateSimple=_ _webpack_require__(/*! ../internals/iterate-simple */ \ "./node_modules/core-js/internals/iterate-simple.js\");\n\nvar Set=S etHelpers.Set;\nvar add=S etHelpers.add;\nvar has=S etHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports=f unction intersection(other) {\n var O=a Set(this);\n var otherRec=g etSetRecord(other);\n var result=n ew Set();\n\n if (size(O)> otherRec.size) {\n iterateSimple(otherRec.getIterator(), function (e) {\n if (has(O, e)) add(result, e);\n });\n } else {\n iterateSet(O, function (e) {\n if (otherRec.includes(e)) add(result, e);\n });\n }\n\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQywyRUFBdUI7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxvQkFBb0IsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWludGVyc2VjdGlvbi5qcz85NTNiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-intersection.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/set-is-disjoint-from.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/internals/set-is-disjoint-from.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar aSet = __webpack_require__(/*! ../internals/a-set */ \"./node_modules/core-js/internals/a-set.js\");\nvar has = (__webpack_require__(/*! ../internals/set-helpers */ \"./node_modules/core-js/internals/set-helpers.js\").has);\nvar size = __webpack_require__(/*! ../internals/set-size */ \"./node_modules/core-js/internals/set-size.js\");\nvar getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ \"./node_modules/core-js/internals/get-set-record.js\");\nvar iterateSet = __webpack_require__(/*! ../internals/set-iterate */ \"./node_modules/core-js/internals/set-iterate.js\");\nvar iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ \"./node_modules/core-js/internals/iterate-simple.js\");\nvar iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ \"./node_modules/core-js/internals/iterator-close.js\");\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom\nmodule.exports = function isDisjointFrom(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n if (size(O) <=o therRec.size) return iterateSet(O, function (e) {\n if (otherRec.includes(e)) return false;\n }, true) !==f alse;\n var iterator=o therRec.getIterator();\n return iterateSimple(iterator, function (e) {\n if (has(O, e)) return iteratorClose(iterator, 'normal', false);\n }) !==f alse;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLFVBQVUsNEdBQXVDO0FBQ2pELFdBQVcsbUJBQU8sQ0FBQywyRUFBdUI7QUFDMUMsbUJBQW1CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxvQkFBb0IsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDekQsb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20uanM/YjRiYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEaXNqb2ludEZyb20ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8PSBvdGhlclJlYy5zaXplKSByZXR1cm4gaXRlcmF0ZVNldChPLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG4gIHZhciBpdGVyYXRvciA9IG90aGVyUmVjLmdldEl0ZXJhdG9yKCk7XG4gIHJldHVybiBpdGVyYXRlU2ltcGxlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-is-disjoint-from.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-is-subset-of.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/set-is-subset-of.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar aSet=_ _webpack_require__(/*! ../internals/a-set */ \ "./node_modules/core-js/internals/a-set.js\");\nvar size=_ _webpack_require__(/*! ../internals/set-size */ \ "./node_modules/core-js/internals/set-size.js\");\nvar iterate=_ _webpack_require__(/*! ../internals/set-iterate */ \ "./node_modules/core-js/internals/set-iterate.js\");\nvar getSetRecord=_ _webpack_require__(/*! ../internals/get-set-record */ \ "./node_modules/core-js/internals/get-set-record.js\");\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf\nmodule.exports=f unction isSubsetOf(other) {\n var O=a Set(this);\n var otherRec=g etSetRecord(other);\n if (size(O)> otherRec.size) return false;\n return iterate(O, function (e) {\n if (!otherRec.includes(e)) return false;\n }, true) !== false;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLDJFQUF1QjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsaUZBQTBCO0FBQ2hELG1CQUFtQixtQkFBTyxDQUFDLHVGQUE2Qjs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mLmpzPzY4ZGYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIG90aGVyUmVjID0gZ2V0U2V0UmVjb3JkKG90aGVyKTtcbiAgaWYgKHNpemUoTykgPiBvdGhlclJlYy5zaXplKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBpdGVyYXRlKE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFvdGhlclJlYy5pbmNsdWRlcyhlKSkgcmV0dXJuIGZhbHNlO1xuICB9LCB0cnVlKSAhPT0gZmFsc2U7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-is-subset-of.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/set-is-superset-of.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/internals/set-is-superset-of.js ***! \**************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar aSet = __webpack_require__(/*! ../internals/a-set */ \"./node_modules/core-js/internals/a-set.js\");\nvar has = (__webpack_require__(/*! ../internals/set-helpers */ \"./node_modules/core-js/internals/set-helpers.js\").has);\nvar size = __webpack_require__(/*! ../internals/set-size */ \"./node_modules/core-js/internals/set-size.js\");\nvar getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ \"./node_modules/core-js/internals/get-set-record.js\");\nvar iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ \"./node_modules/core-js/internals/iterate-simple.js\");\nvar iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ \"./node_modules/core-js/internals/iterator-close.js\");\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf\nmodule.exports = function isSupersetOf(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n if (size(O) < otherRec.size) return false;\n var iterator=o therRec.getIterator();\n return iterateSimple(iterator, function (e) {\n if (!has(O, e)) return iteratorClose(iterator, 'normal', false);\n }) !==f alse;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxVQUFVLDRHQUF1QztBQUNqRCxXQUFXLG1CQUFPLENBQUMsMkVBQXVCO0FBQzFDLG1CQUFtQixtQkFBTyxDQUFDLHVGQUE2QjtBQUN4RCxvQkFBb0IsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDekQsb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mLmpzPzM5NWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG52YXIgc2l6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc2l6ZScpO1xudmFyIGdldFNldFJlY29yZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LXJlY29yZCcpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA8IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFoYXMoTywgZSkpIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgZmFsc2UpO1xuICB9KSAhPT0gZmFsc2U7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-is-superset-of.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-iterate.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/set-iterate.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar iterateSimple=_ _webpack_require__(/*! ../internals/iterate-simple */ \ "./node_modules/core-js/internals/iterate-simple.js\");\nvar SetHelpers=_ _webpack_require__(/*! ../internals/set-helpers */ \ "./node_modules/core-js/internals/set-helpers.js\");\n\nvar Set=S etHelpers.Set;\nvar SetPrototype=S etHelpers.proto;\nvar forEach=u ncurryThis(SetPrototype.forEach);\nvar keys=u ncurryThis(SetPrototype.keys);\nvar next=k eys(new Set()).next;\n\nmodule.exports=f unction (set, fn, interruptible) {\n return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3pELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlDQUF5QyxpQ0FBaUM7QUFDMUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanM/Mzg0ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIFNldFByb3RvdHlwZSA9IFNldEhlbHBlcnMucHJvdG87XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBrZXlzID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmtleXMpO1xudmFyIG5leHQgPSBrZXlzKG5ldyBTZXQoKSkubmV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoeyBpdGVyYXRvcjoga2V5cyhzZXQpLCBuZXh0OiBuZXh0IH0sIGZuKSA6IGZvckVhY2goc2V0LCBmbik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-iterate.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-size.js ": /*!****************************************************!*\ !*** ./node_modules/core-js/internals/set-size.js ***! \****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThisAccessor=_ _webpack_require__(/*! ../internals/function-uncurry-this-accessor */ \ "./node_modules/core-js/internals/function-uncurry-this-accessor.js\");\nvar SetHelpers=_ _webpack_require__(/*! ../internals/set-helpers */ \ "./node_modules/core-js/internals/set-helpers.js\");\n\nmodule.exports=u ncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {\n return set.size;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNpemUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiwwQkFBMEIsbUJBQU8sQ0FBQyx1SEFBNkM7QUFDL0UsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCOztBQUVuRDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNpemUuanM/OGUxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihTZXRIZWxwZXJzLnByb3RvLCAnc2l6ZScsICdnZXQnKSB8fCBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-size.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-species.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/set-species.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar getBuiltIn=_ _webpack_require__(/*! ../internals/get-built-in */ \ "./node_modules/core-js/internals/get-built-in.js\");\nvar defineBuiltInAccessor=_ _webpack_require__(/*! ../internals/define-built-in-accessor */ \ "./node_modules/core-js/internals/define-built-in-accessor.js\");\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\nvar DESCRIPTORS=_ _webpack_require__(/*! ../internals/descriptors */ \ "./node_modules/core-js/internals/descriptors.js\");\n\nvar SPECIES=w ellKnownSymbol( 'species');\n\nmodule.exports=f unction (CONSTRUCTOR_NAME) {\n var Constructor=g etBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDcEQsNEJBQTRCLG1CQUFPLENBQUMsMkdBQXVDO0FBQzNFLHNCQUFzQixtQkFBTyxDQUFDLDZGQUFnQztBQUM5RCxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRXBEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLEtBQUs7QUFDTDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzPzI2MjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-species.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-symmetric-difference.js ": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/set-symmetric-difference.js ***! \********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar aSet=_ _webpack_require__(/*! ../internals/a-set */ \ "./node_modules/core-js/internals/a-set.js\");\nvar SetHelpers=_ _webpack_require__(/*! ../internals/set-helpers */ \ "./node_modules/core-js/internals/set-helpers.js\");\nvar clone=_ _webpack_require__(/*! ../internals/set-clone */ \ "./node_modules/core-js/internals/set-clone.js\");\nvar getSetRecord=_ _webpack_require__(/*! ../internals/get-set-record */ \ "./node_modules/core-js/internals/get-set-record.js\");\nvar iterateSimple=_ _webpack_require__(/*! ../internals/iterate-simple */ \ "./node_modules/core-js/internals/iterate-simple.js\");\n\nvar add=S etHelpers.add;\nvar has=S etHelpers.has;\nvar remove=S etHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports=f unction symmetricDifference(other) {\n var O=a Set(this);\n var keysIter=g etSetRecord(other).getIterator();\n var result=c lone(O);\n iterateSimple(keysIter, function (e) {\n if (has(O, e)) remove(result, e);\n else add(result, e);\n });\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsWUFBWSxtQkFBTyxDQUFDLDZFQUF3QjtBQUM1QyxtQkFBbUIsbUJBQU8sQ0FBQyx1RkFBNkI7QUFDeEQsb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCOztBQUV6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlLmpzPzk5NjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG52YXIgcmVtb3ZlID0gU2V0SGVscGVycy5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChoYXMoTywgZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICAgIGVsc2UgYWRkKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-symmetric-difference.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-to-string-tag.js ": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar defineProperty=( __webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\").f);\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar TO_STRING_TAG=w ellKnownSymbol( 'toStringTag');\n\nmodule.exports=f unction (target, TAG, STATIC) {\n if (target && !STATIC) target=t arget.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixxQkFBcUIsZ0lBQWdEO0FBQ3JFLGFBQWEsbUJBQU8sQ0FBQywyRkFBK0I7QUFDcEQsc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDOztBQUU5RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsZ0NBQWdDO0FBQzVFO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanM/ZDQ0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgVEFHLCBTVEFUSUMpIHtcbiAgaWYgKHRhcmdldCAmJiAhU1RBVElDKSB0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlO1xuICBpZiAodGFyZ2V0ICYmICFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-to-string-tag.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/set-union.js ": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/set-union.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar aSet=_ _webpack_require__(/*! ../internals/a-set */ \ "./node_modules/core-js/internals/a-set.js\");\nvar add=( __webpack_require__(/*! ../internals/set-helpers */ \ "./node_modules/core-js/internals/set-helpers.js\").add);\nvar clone=_ _webpack_require__(/*! ../internals/set-clone */ \ "./node_modules/core-js/internals/set-clone.js\");\nvar getSetRecord=_ _webpack_require__(/*! ../internals/get-set-record */ \ "./node_modules/core-js/internals/get-set-record.js\");\nvar iterateSimple=_ _webpack_require__(/*! ../internals/iterate-simple */ \ "./node_modules/core-js/internals/iterate-simple.js\");\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports=f unction union(other) {\n var O=a Set(this);\n var keysIter=g etSetRecord(other).getIterator();\n var result=c lone(O);\n iterateSimple(keysIter, function (it) {\n add(result, it);\n });\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXVuaW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxVQUFVLDRHQUF1QztBQUNqRCxZQUFZLG1CQUFPLENBQUMsNkVBQXdCO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLHVGQUE2QjtBQUN4RCxvQkFBb0IsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdW5pb24uanM/ZTliYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGFkZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmFkZDtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChpdCkge1xuICAgIGFkZChyZXN1bHQsIGl0KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/set-union.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/shared-key.js ": /*!******************************************************!*\ !*** ./node_modules/core-js/internals/shared-key.js ***! \******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar shared=_ _webpack_require__(/*! ../internals/shared */ \ "./node_modules/core-js/internals/shared.js\");\nvar uid=_ _webpack_require__(/*! ../internals/uid */ \ "./node_modules/core-js/internals/uid.js\");\n\nvar keys=s hared( 'keys');\n\nmodule.exports=f unction (key) {\n return keys[key] || (keys[key]=u id(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLGlFQUFrQjs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanM/Zjc3MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/shared-key.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/shared-store.js ": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/shared-store.js ***! \********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\nvar defineGlobalProperty=_ _webpack_require__(/*! ../internals/define-global-property */ \ "./node_modules/core-js/internals/define-global-property.js\");\n\nvar SHARED='__core-js_shared__' ;\nvar store=g lobal[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports=s tore;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLHVFQUFxQjtBQUMxQywyQkFBMkIsbUJBQU8sQ0FBQyx1R0FBcUM7O0FBRXhFO0FBQ0EsNkRBQTZEOztBQUU3RCIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanM/YzZjZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/shared-store.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/shared.js ": /*!**************************************************!*\ !*** ./node_modules/core-js/internals/shared.js ***! \**************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar IS_PURE=_ _webpack_require__(/*! ../internals/is-pure */ \ "./node_modules/core-js/internals/is-pure.js\");\nvar store=_ _webpack_require__(/*! ../internals/shared-store */ \ "./node_modules/core-js/internals/shared-store.js\");\n\n(module.exports=f unction (key, value) {\n return store[key] || (store[key]=v alue !==u ndefined ? value : {});\n})( 'versions', []).push({\n version: '3.32.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.32.2/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLHlFQUFzQjtBQUM1QyxZQUFZLG1CQUFPLENBQUMsbUZBQTJCOztBQUUvQztBQUNBLHFFQUFxRTtBQUNyRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzPzU2OTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMzIuMicsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDIzIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzIuMi9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/shared.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/string-multibyte.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/string-multibyte.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar toIntegerOrInfinity=_ _webpack_require__(/*! ../internals/to-integer-or-infinity */ \ "./node_modules/core-js/internals/to-integer-or-infinity.js\");\nvar toString=_ _webpack_require__(/*! ../internals/to-string */ \ "./node_modules/core-js/internals/to-string.js\");\nvar requireObjectCoercible=_ _webpack_require__(/*! ../internals/require-object-coercible */ \ "./node_modules/core-js/internals/require-object-coercible.js\");\n\nvar charAt=u ncurryThis( ''.charAt);\nvar charCodeAt=u ncurryThis( ''.charCodeAt);\nvar stringSlice=u ncurryThis( ''.slice);\n\nvar createMethod=f unction (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S=t oString(requireObjectCoercible($this));\n var position=t oIntegerOrInfinity(pos);\n var size=S .length;\n var first, second;\n if (position < 0 || position>= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first> 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second> 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports={ \n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCwwQkFBMEIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDdkUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyw2QkFBNkIsbUJBQU8sQ0FBQywyR0FBdUM7O0FBRTVFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzPzY1NDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/string-multibyte.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/string-trim.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/string-trim.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar requireObjectCoercible=_ _webpack_require__(/*! ../internals/require-object-coercible */ \ "./node_modules/core-js/internals/require-object-coercible.js\");\nvar toString=_ _webpack_require__(/*! ../internals/to-string */ \ "./node_modules/core-js/internals/to-string.js\");\nvar whitespaces=_ _webpack_require__(/*! ../internals/whitespaces */ \ "./node_modules/core-js/internals/whitespaces.js\");\n\nvar replace=u ncurryThis( ''.replace);\nvar ltrim=R egExp( '^[' + whitespaces + ']+');\nvar rtrim=R egExp( '(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod=f unction (TYPE) {\n return function ($this) {\n var string=t oString(requireObjectCoercible($this));\n if (TYPE & 1) string=r eplace(string, ltrim, '');\n if (TYPE & 2) string=r eplace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports={ \n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDOUQsNkJBQTZCLG1CQUFPLENBQUMsMkdBQXVDO0FBQzVFLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCOztBQUVwRDtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLCtDQUErQztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCLHFCQUFxQjtBQUM5QztBQUNBO0FBQ0EseUJBQXlCLG9CQUFvQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanM/NThhOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGx0cmltID0gUmVnRXhwKCdeWycgKyB3aGl0ZXNwYWNlcyArICddKycpO1xudmFyIHJ0cmltID0gUmVnRXhwKCcoXnxbXicgKyB3aGl0ZXNwYWNlcyArICddKVsnICsgd2hpdGVzcGFjZXMgKyAnXSskJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIHJ0cmltLCAnJDEnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/string-trim.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/symbol-constructor-detection.js ": /*!************************************************************************!*\ !*** ./node_modules/core-js/internals/symbol-constructor-detection.js ***! \************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION=_ _webpack_require__(/*! ../internals/engine-v8-version */ \ "./node_modules/core-js/internals/engine-v8-version.js\");\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\n\nvar $String=g lobal.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports=! !Object.getOwnPropertySymbols && !fails(function () {\n var symbol=S ymbol( 'symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+ ''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3pELFlBQVksbUJBQU8sQ0FBQyxxRUFBb0I7QUFDeEMsYUFBYSxtQkFBTyxDQUFDLHVFQUFxQjs7QUFFMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanM/MDRmOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/symbol-constructor-detection.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/task.js ": /*!************************************************!*\ !*** ./node_modules/core-js/internals/task.js ***! \************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\nvar apply=_ _webpack_require__(/*! ../internals/function-apply */ \ "./node_modules/core-js/internals/function-apply.js\");\nvar bind=_ _webpack_require__(/*! ../internals/function-bind-context */ \ "./node_modules/core-js/internals/function-bind-context.js\");\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\nvar html=_ _webpack_require__(/*! ../internals/html */ \ "./node_modules/core-js/internals/html.js\");\nvar arraySlice=_ _webpack_require__(/*! ../internals/array-slice */ \ "./node_modules/core-js/internals/array-slice.js\");\nvar createElement=_ _webpack_require__(/*! ../internals/document-create-element */ \ "./node_modules/core-js/internals/document-create-element.js\");\nvar validateArgumentsLength=_ _webpack_require__(/*! ../internals/validate-arguments-length */ \ "./node_modules/core-js/internals/validate-arguments-length.js\");\nvar IS_IOS=_ _webpack_require__(/*! ../internals/engine-is-ios */ \ "./node_modules/core-js/internals/engine-is-ios.js\");\nvar IS_NODE=_ _webpack_require__(/*! ../internals/engine-is-node */ \ "./node_modules/core-js/internals/engine-is-node.js\");\n\nvar set=g lobal.setImmediate;\nvar clear=g lobal.clearImmediate;\nvar process=g lobal.process;\nvar Dispatch=g lobal.Dispatch;\nvar Function=g lobal.Function;\nvar MessageChannel=g lobal.MessageChannel;\nvar String=g lobal.String;\nvar counter=0 ;\nvar queue={ };\nvar ONREADYSTATECHANGE='onreadystatechange' ;\nvar $location, defer, channel, port;\n\nfails(function () {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n $location=g lobal.location;\n});\n\nvar run=f unction (id) {\n if (hasOwn(queue, id)) {\n var fn=q ueue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner=f unction (id) {\n return function () {\n run(id);\n };\n};\n\nvar eventListener=f unction (event) {\n run(event.data);\n};\n\nvar globalPostMessageDefer=f unction (id) {\n // old engines have not location.origin\n global.postMessage(String(id), $location.protocol + '//' + $location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set=f unction setImmediate(handler) {\n validateArgumentsLength(arguments.length, 1);\n var fn=i sCallable(handler) ? handler : Function(handler);\n var args=a rraySlice(arguments, 1);\n queue[++counter]=f unction () {\n apply(fn, undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear=f unction clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer=f unction (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer=f unction (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel=n ew MessageChannel();\n port=c hannel.port2;\n channel.port1.onmessage=e ventListener;\n defer=b ind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it 's sync & typeof its postMessage is 'object '\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n $location && $location.protocol !== 'file: ' &&\n !fails(globalPostMessageDefer)\n ) {\n defer = globalPostMessageDefer;\n global.addEventListener('message ', eventListener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script ')) {\n defer = function (id) {\n html.appendChild(createElement('script '))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMsWUFBWSxtQkFBTyxDQUFDLHVGQUE2QjtBQUNqRCxXQUFXLG1CQUFPLENBQUMscUdBQW9DO0FBQ3ZELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxhQUFhLG1CQUFPLENBQUMsMkZBQStCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxxRUFBb0I7QUFDeEMsV0FBVyxtQkFBTyxDQUFDLG1FQUFtQjtBQUN0QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMseUdBQXNDO0FBQ2xFLDhCQUE4QixtQkFBTyxDQUFDLDZHQUF3QztBQUM5RSxhQUFhLG1CQUFPLENBQUMscUZBQTRCO0FBQ2pELGNBQWMsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcz8yY2Y0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgJGxvY2F0aW9uLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxuZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBEZW5vIHRocm93cyBhIFJlZmVyZW5jZUVycm9yIG9uIGBsb2NhdGlvbmAgYWNjZXNzIHdpdGhvdXQgYC0tbG9jYXRpb25gIGZsYWdcbiAgJGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xufSk7XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWYgKGhhc093bihxdWV1ZSwgaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgZXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksICRsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyAkbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGhhbmRsZXIpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGV2ZW50TGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIGlzQ2FsbGFibGUoZ2xvYmFsLnBvc3RNZXNzYWdlKSAmJlxuICAgICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJlxuICAgICRsb2NhdGlvbiAmJiAkbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICAhZmFpbHMoZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcilcbiAgKSB7XG4gICAgZGVmZXIgPSBnbG9iYWxQb3N0TWVzc2FnZURlZmVyO1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZXZlbnRMaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/task.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-absolute-index.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/to-absolute-index.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \"./node_modules/core-js/internals/to-integer-or-infinity.js\");\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiwwQkFBMEIsbUJBQU8sQ0FBQyx1R0FBcUM7O0FBRXZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcz8yM2NiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-absolute-index.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-indexed-object.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/to-indexed-object.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ \"./node_modules/core-js/internals/indexed-object.js\");\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLHVGQUE2QjtBQUN6RCw2QkFBNkIsbUJBQU8sQ0FBQywyR0FBdUM7O0FBRTVFO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcz9mYzZhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-indexed-object.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-integer-or-infinity.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/internals/to-integer-or-infinity.js ***! \******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar trunc = __webpack_require__(/*! ../internals/math-trunc */ \"./node_modules/core-js/internals/math-trunc.js\");\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFlBQVksbUJBQU8sQ0FBQywrRUFBeUI7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanM/NTkyNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-integer-or-infinity.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-length.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-length.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \"./node_modules/core-js/internals/to-integer-or-infinity.js\");\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsMEJBQTBCLG1CQUFPLENBQUMsdUdBQXFDOztBQUV2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0Y7QUFDbEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzPzUwYzQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-length.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-object.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-object.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsNkJBQTZCLG1CQUFPLENBQUMsMkdBQXVDOztBQUU1RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcz83YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-object.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-offset.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-offset.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar toPositiveInteger = __webpack_require__(/*! ../internals/to-positive-integer */ \"./node_modules/core-js/internals/to-positive-integer.js\");\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw $RangeError('Wrong offset ');\n return offset;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2Zmc2V0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isd0JBQXdCLG1CQUFPLENBQUMsaUdBQWtDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9mZnNldC5qcz8xODJkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB0b1Bvc2l0aXZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wb3NpdGl2ZS1pbnRlZ2VyJyk7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBCWVRFUykge1xuICB2YXIgb2Zmc2V0ID0gdG9Qb3NpdGl2ZUludGVnZXIoaXQpO1xuICBpZiAob2Zmc2V0ICUgQllURVMpIHRocm93ICRSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQnKTtcbiAgcmV0dXJuIG9mZnNldDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-offset.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-positive-integer.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/internals/to-positive-integer.js ***! \***************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \"./node_modules/core-js/internals/to-integer-or-infinity.js\");\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw $RangeError(\"The argument can't be less than 0\ ");\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDBCQUEwQixtQkFBTyxDQUFDLHVHQUFxQzs7QUFFdkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wb3NpdGl2ZS1pbnRlZ2VyLmpzP2Y4Y2QiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpdCk7XG4gIGlmIChyZXN1bHQgPCAwKSB0aHJvdyAkUmFuZ2VFcnJvcihcIlRoZSBhcmd1bWVudCBjYW4ndCBiZSBsZXNzIHRoYW4gMFwiKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-positive-integer.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-primitive.js": /*!********************************************************!*\ !*** ./node_modules/core-js/internals/to-primitive.js ***! \********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__)=> { "use strict"; eval("\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\nvar isSymbol = __webpack_require__(/*! ../internals/is-symbol */ \"./node_modules/core-js/internals/is-symbol.js\");\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \"./node_modules/core-js/internals/get-method.js\");\nvar ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ \"./node_modules/core-js/internals/ordinary-to-primitive.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsV0FBVyxtQkFBTyxDQUFDLHFGQUE0QjtBQUMvQyxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsK0VBQXlCO0FBQ2pELDBCQUEwQixtQkFBTyxDQUFDLHFHQUFvQztBQUN0RSxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7O0FBRTlEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcz9jMDRlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-primitive.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-property-key.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/internals/to-property-key.js ***! \***********************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ \"./node_modules/core-js/internals/to-primitive.js\");\nvar isSymbol = __webpack_require__(/*! ../internals/is-symbol */ \"./node_modules/core-js/internals/is-symbol.js\");\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3JELGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanM/YTA0YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-property-key.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-set-like.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/to-set-like.js ***! \*******************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \"./node_modules/core-js/internals/get-built-in.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar isIterable = __webpack_require__(/*! ../internals/is-iterable */ \"./node_modules/core-js/internals/is-iterable.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\n\nvar Set = getBuiltIn('Set');\n\nvar isSetLike = function (it) {\n return isObject(it)\n && typeof it.size == 'number'\n && isCallable(it.has)\n && isCallable(it.keys);\n};\n\n// fallback old -> new set methods proposal arguments\nmodule.exports = function (it) {\n if (isSetLike(it)) return it;\n return isIterable(it) ? new Set(it) : it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc2V0LWxpa2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDcEQsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxlQUFlLG1CQUFPLENBQUMsNkVBQXdCOztBQUUvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zZXQtbGlrZS5qcz9lYmU4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0l0ZXJhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWl0ZXJhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcblxudmFyIGlzU2V0TGlrZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNPYmplY3QoaXQpXG4gICAgJiYgdHlwZW9mIGl0LnNpemUgPT0gJ251bWJlcidcbiAgICAmJiBpc0NhbGxhYmxlKGl0LmhhcylcbiAgICAmJiBpc0NhbGxhYmxlKGl0LmtleXMpO1xufTtcblxuLy8gZmFsbGJhY2sgb2xkIC0+IG5ldyBzZXQgbWV0aG9kcyBwcm9wb3NhbCBhcmd1bWVudHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1NldExpa2UoaXQpKSByZXR1cm4gaXQ7XG4gIHJldHVybiBpc0l0ZXJhYmxlKGl0KSA/IG5ldyBTZXQoaXQpIDogaXQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-set-like.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-string-tag-support.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! \*****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDOztBQUU5RDtBQUNBOztBQUVBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcz8wMGVlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-string-tag-support.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/to-string.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/internals/to-string.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar classof = __webpack_require__(/*! ../internals/classof */ \"./node_modules/core-js/internals/classof.js\");\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLHlFQUFzQjs7QUFFNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzPzU3N2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/to-string.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/try-to-string.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/internals/try-to-string.js ***! \*********************************************************/ /***/ ((module) => { "use strict"; eval("\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcz8wZDUxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/try-to-string.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/uid.js": /*!***********************************************!*\ !*** ./node_modules/core-js/internals/uid.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMscUdBQW9DOztBQUU5RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcz85MGUzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/uid.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/use-symbol-as-uid.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ \"./node_modules/core-js/internals/symbol-constructor-detection.js\");\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLG1IQUEyQzs7QUFFdkU7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzP2ZkYmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/use-symbol-as-uid.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/v8-prototype-define-bug.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/internals/v8-prototype-define-bug.js ***! \*******************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDcEQsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsYUFBYTtBQUMxRDtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanM/YWVkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/v8-prototype-define-bug.js\n"); /***/ }), /***/ "./node_modules/core-js/internals/validate-arguments-length.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/internals/validate-arguments-length.js ***! \*********************************************************************/ /***/ ((module) => { "use strict"; eval("\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw $TypeError( 'Not enough arguments');\n return passed;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanM/ZDZkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/validate-arguments-length.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/weak-map-basic-detection.js ": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/weak-map-basic-detection.js ***! \********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\nvar isCallable=_ _webpack_require__(/*! ../internals/is-callable */ \ "./node_modules/core-js/internals/is-callable.js\");\n\nvar WeakMap=g lobal.WeakMap;\n\nmodule.exports=i sCallable(WeakMap) && /native code/.test(String(WeakMap));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLHVFQUFxQjtBQUMxQyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRW5EOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcz9jZGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/weak-map-basic-detection.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/weak-map-helpers.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/weak-map-helpers.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\n\n// eslint-disable-next-line es/no-weak-map -- safe\nvar WeakMapPrototype=W eakMap.prototype;\n\nmodule.exports={ \n // eslint-disable-next-line es/no-weak-map -- safe\n WeakMap: WeakMap,\n set: uncurryThis(WeakMapPrototype.set),\n get: uncurryThis(WeakMapPrototype.get),\n has: uncurryThis(WeakMapPrototype.has),\n remove: uncurryThis(WeakMapPrototype[ 'delete'])\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtaGVscGVycy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQzs7QUFFOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWhlbHBlcnMuanM/NmQzZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby13ZWFrLW1hcCAtLSBzYWZlXG52YXIgV2Vha01hcFByb3RvdHlwZSA9IFdlYWtNYXAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXdlYWstbWFwIC0tIHNhZmVcbiAgV2Vha01hcDogV2Vha01hcCxcbiAgc2V0OiB1bmN1cnJ5VGhpcyhXZWFrTWFwUHJvdG90eXBlLnNldCksXG4gIGdldDogdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5nZXQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFdlYWtNYXBQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhXZWFrTWFwUHJvdG90eXBlWydkZWxldGUnXSlcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/weak-map-helpers.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/weak-set-helpers.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/internals/weak-set-helpers.js ***! \************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\n\n// eslint-disable-next-line es/no-weak-set -- safe\nvar WeakSetPrototype=W eakSet.prototype;\n\nmodule.exports={ \n // eslint-disable-next-line es/no-weak-set -- safe\n WeakSet: WeakSet,\n add: uncurryThis(WeakSetPrototype.add),\n has: uncurryThis(WeakSetPrototype.has),\n remove: uncurryThis(WeakSetPrototype[ 'delete'])\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1zZXQtaGVscGVycy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQzs7QUFFOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLXNldC1oZWxwZXJzLmpzPzRjMWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8td2Vhay1zZXQgLS0gc2FmZVxudmFyIFdlYWtTZXRQcm90b3R5cGUgPSBXZWFrU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby13ZWFrLXNldCAtLSBzYWZlXG4gIFdlYWtTZXQ6IFdlYWtTZXQsXG4gIGFkZDogdW5jdXJyeVRoaXMoV2Vha1NldFByb3RvdHlwZS5hZGQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFdlYWtTZXRQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhXZWFrU2V0UHJvdG90eXBlWydkZWxldGUnXSlcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/weak-set-helpers.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/well-known-symbol-define.js ": /*!********************************************************************!*\ !*** ./node_modules/core-js/internals/well-known-symbol-define.js ***! \********************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar path=_ _webpack_require__(/*! ../internals/path */ \ "./node_modules/core-js/internals/path.js\");\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar wrappedWellKnownSymbolModule=_ _webpack_require__(/*! ../internals/well-known-symbol-wrapped */ \ "./node_modules/core-js/internals/well-known-symbol-wrapped.js\");\nvar defineProperty=( __webpack_require__(/*! ../internals/object-define-property */ \ "./node_modules/core-js/internals/object-define-property.js\").f);\n\nmodule.exports=f unction (NAME) {\n var Symbol=p ath.Symbol || (path.Symbol={ });\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsV0FBVyxtQkFBTyxDQUFDLG1FQUFtQjtBQUN0QyxhQUFhLG1CQUFPLENBQUMsMkZBQStCO0FBQ3BELG1DQUFtQyxtQkFBTyxDQUFDLDZHQUF3QztBQUNuRixxQkFBcUIsZ0lBQWdEOztBQUVyRTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZS5qcz9lMDY1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/well-known-symbol-define.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/well-known-symbol-wrapped.js ": /*!*********************************************************************!*\ !*** ./node_modules/core-js/internals/well-known-symbol-wrapped.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict "; eval("\nvar wellKnownSymbol=_ _webpack_require__(/*! ../internals/well-known-symbol */ \ "./node_modules/core-js/internals/well-known-symbol.js\");\n\nexports.f=w ellKnownSymbol;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHNCQUFzQixtQkFBTyxDQUFDLDZGQUFnQzs7QUFFOUQsU0FBUyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzP2U1MzgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/well-known-symbol-wrapped.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/well-known-symbol.js ": /*!*************************************************************!*\ !*** ./node_modules/core-js/internals/well-known-symbol.js ***! \*************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\nvar shared=_ _webpack_require__(/*! ../internals/shared */ \ "./node_modules/core-js/internals/shared.js\");\nvar hasOwn=_ _webpack_require__(/*! ../internals/has-own-property */ \ "./node_modules/core-js/internals/has-own-property.js\");\nvar uid=_ _webpack_require__(/*! ../internals/uid */ \ "./node_modules/core-js/internals/uid.js\");\nvar NATIVE_SYMBOL=_ _webpack_require__(/*! ../internals/symbol-constructor-detection */ \ "./node_modules/core-js/internals/symbol-constructor-detection.js\");\nvar USE_SYMBOL_AS_UID=_ _webpack_require__(/*! ../internals/use-symbol-as-uid */ \ "./node_modules/core-js/internals/use-symbol-as-uid.js\");\n\nvar Symbol=g lobal.Symbol;\nvar WellKnownSymbolsStore=s hared( 'wks');\nvar createWellKnownSymbol=U SE_SYMBOL_AS_UID ? Symbol[ 'for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports=f unction (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name]=N ATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol( 'Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMsYUFBYSxtQkFBTyxDQUFDLDJGQUErQjtBQUNwRCxVQUFVLG1CQUFPLENBQUMsaUVBQWtCO0FBQ3BDLG9CQUFvQixtQkFBTyxDQUFDLG1IQUEyQztBQUN2RSx3QkFBd0IsbUJBQU8sQ0FBQyw2RkFBZ0M7O0FBRWhFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzP2I2MjIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/well-known-symbol.js\n "); /***/ }), /***/ "./node_modules/core-js/internals/whitespaces.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/internals/whitespaces.js ***! \*******************************************************/ /***/ ((module) => { "use strict "; eval("\n// a string of all valid unicode whitespaces\nmodule.exports='\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanM/NTg5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDInICtcbiAgJ1xcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/internals/whitespaces.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/es.array.includes.js ": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/es.array.includes.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar $includes=( __webpack_require__(/*! ../internals/array-includes */ \ "./node_modules/core-js/internals/array-includes.js\").includes);\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\nvar addToUnscopables=_ _webpack_require__(/*! ../internals/add-to-unscopables */ \ "./node_modules/core-js/internals/add-to-unscopables.js\");\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE=f ails(function () {\n // eslint-disable-next-line es/no-array-prototype-includes -- detection\n return !Array(1).includes();\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n includes: function includes(el /* , fromIndex=0 */) {\n return $includes(this, el, arguments.length> 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxnQkFBZ0IsdUhBQStDO0FBQy9ELFlBQVksbUJBQU8sQ0FBQyxxRUFBb0I7QUFDeEMsdUJBQXVCLG1CQUFPLENBQUMsK0ZBQWlDOztBQUVoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLElBQUksd0RBQXdEO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanM/Y2FhZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es.array.includes.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es.map.constructor.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/es.map.constructor.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar collection = __webpack_require__(/*! ../internals/collection */ \"./node_modules/core-js/internals/collection.js\");\nvar collectionStrong = __webpack_require__(/*! ../internals/collection-strong */ \"./node_modules/core-js/internals/collection-strong.js\");\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3Rvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNsRCx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBZ0M7O0FBRS9EO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanM/NmY0OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es.map.constructor.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es.map.js": /*!************************************************!*\ !*** ./node_modules/core-js/modules/es.map.js ***! \************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\n__webpack_require__(/*! ../modules/es.map.constructor */ \"./node_modules/core-js/modules/es.map.constructor.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQywyRkFBK0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5qcz80ZWM5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3RvcicpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es.map.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es.regexp.flags.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/es.regexp.flags.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \"./node_modules/core-js/internals/define-built-in-accessor.js\");\nvar regExpFlags = __webpack_require__(/*! ../internals/regexp-flags */ \"./node_modules/core-js/internals/regexp-flags.js\");\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = global.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELDRCQUE0QixtQkFBTyxDQUFDLDJHQUF1QztBQUMzRSxrQkFBa0IsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDckQsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZmxhZ3MuanM/NTM3NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdkJykgLT4gLy4vZCBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgRk9SQ0VEID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgSU5ESUNFU19TVVBQT1JUID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBSZWdFeHAoJy4nLCAnZCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIElORElDRVNfU1VQUE9SVCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIE8gPSB7fTtcbiAgLy8gbW9kZXJuIFY4IGJ1Z1xuICB2YXIgY2FsbHMgPSAnJztcbiAgdmFyIGV4cGVjdGVkID0gSU5ESUNFU19TVVBQT1JUID8gJ2RnaW1zeScgOiAnZ2ltc3knO1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoa2V5LCBjaHIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywga2V5LCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbHMgKz0gY2hyO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSB9KTtcbiAgfTtcblxuICB2YXIgcGFpcnMgPSB7XG4gICAgZG90QWxsOiAncycsXG4gICAgZ2xvYmFsOiAnZycsXG4gICAgaWdub3JlQ2FzZTogJ2knLFxuICAgIG11bHRpbGluZTogJ20nLFxuICAgIHN0aWNreTogJ3knXG4gIH07XG5cbiAgaWYgKElORElDRVNfU1VQUE9SVCkgcGFpcnMuaGFzSW5kaWNlcyA9ICdkJztcblxuICBmb3IgKHZhciBrZXkgaW4gcGFpcnMpIGFkZEdldHRlcihrZXksIHBhaXJzW2tleV0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnKS5nZXQuY2FsbChPKTtcblxuICByZXR1cm4gcmVzdWx0ICE9PSBleHBlY3RlZCB8fCBjYWxscyAhPT0gZXhwZWN0ZWQ7XG59KTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xuaWYgKEZPUkNFRCkgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVnRXhwRmxhZ3Ncbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es.regexp.flags.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es.typed-array.set.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/es.typed-array.set.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \"./node_modules/core-js/internals/array-buffer-view-core.js\");\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \"./node_modules/core-js/internals/length-of-array-like.js\");\nvar toOffset = __webpack_require__(/*! ../internals/to-offset */ \"./node_modules/core-js/internals/to-offset.js\");\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-object */ \"./node_modules/core-js/internals/to-object.js\");\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n var array = new Uint8ClampedArray(2);\n call($set, array, { length: 1, 0: 3 }, 1);\n return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n var array = new Int8Array(2);\n array.set(1);\n array.set('2', 1);\n return array[0] !== 0 || array[1] !== 2;\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var src = toIndexedObject(arrayLike);\n if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n var length = this.length;\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index]=s rc[index++];\n}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNldC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMsV0FBVyxtQkFBTyxDQUFDLHFGQUE0QjtBQUMvQywwQkFBMEIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDdkUsd0JBQXdCLG1CQUFPLENBQUMsbUdBQW1DO0FBQ25FLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0Msc0JBQXNCLG1CQUFPLENBQUMsNkVBQXdCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxxRUFBb0I7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNldC5qcz8zYzVkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b09mZnNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vZmZzZXQnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBJbnQ4QXJyYXkgPSBnbG9iYWwuSW50OEFycmF5O1xudmFyIEludDhBcnJheVByb3RvdHlwZSA9IEludDhBcnJheSAmJiBJbnQ4QXJyYXkucHJvdG90eXBlO1xudmFyICRzZXQgPSBJbnQ4QXJyYXlQcm90b3R5cGUgJiYgSW50OEFycmF5UHJvdG90eXBlLnNldDtcbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxudmFyIFdPUktTX1dJVEhfT0JKRUNUU19BTkRfR0VORVJJQ19PTl9UWVBFRF9BUlJBWVMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tdHlwZWQtYXJyYXlzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciBhcnJheSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgyKTtcbiAgY2FsbCgkc2V0LCBhcnJheSwgeyBsZW5ndGg6IDEsIDA6IDMgfSwgMSk7XG4gIHJldHVybiBhcnJheVsxXSAhPT0gMztcbn0pO1xuXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMTI5NCBhbmQgb3RoZXJcbnZhciBUT19PQkpFQ1RfQlVHID0gV09SS1NfV0lUSF9PQkpFQ1RTX0FORF9HRU5FUklDX09OX1RZUEVEX0FSUkFZUyAmJiBBcnJheUJ1ZmZlclZpZXdDb3JlLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBuZXcgSW50OEFycmF5KDIpO1xuICBhcnJheS5zZXQoMSk7XG4gIGFycmF5LnNldCgnMicsIDEpO1xuICByZXR1cm4gYXJyYXlbMF0gIT09IDAgfHwgYXJyYXlbMV0gIT09IDI7XG59KTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc2V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5zZXRcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3NldCcsIGZ1bmN0aW9uIHNldChhcnJheUxpa2UgLyogLCBvZmZzZXQgKi8pIHtcbiAgYVR5cGVkQXJyYXkodGhpcyk7XG4gIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMSk7XG4gIHZhciBzcmMgPSB0b0luZGV4ZWRPYmplY3QoYXJyYXlMaWtlKTtcbiAgaWYgKFdPUktTX1dJVEhfT0JKRUNUU19BTkRfR0VORVJJQ19PTl9UWVBFRF9BUlJBWVMpIHJldHVybiBjYWxsKCRzZXQsIHRoaXMsIHNyYywgb2Zmc2V0KTtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc3JjKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgaWYgKGxlbiArIG9mZnNldCA+IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoJyk7XG4gIHdoaWxlIChpbmRleCA8IGxlbikgdGhpc1tvZmZzZXQgKyBpbmRleF0gPSBzcmNbaW5kZXgrK107XG59LCAhV09SS1NfV0lUSF9PQkpFQ1RTX0FORF9HRU5FUklDX09OX1RZUEVEX0FSUkFZUyB8fCBUT19PQkpFQ1RfQlVHKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es.typed-array.set.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/es.weak-map.constructor.js ": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/es.weak-map.constructor.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar FREEZING=_ _webpack_require__(/*! ../internals/freezing */ \ "./node_modules/core-js/internals/freezing.js\");\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar defineBuiltIns=_ _webpack_require__(/*! ../internals/define-built-ins */ \ "./node_modules/core-js/internals/define-built-ins.js\");\nvar InternalMetadataModule=_ _webpack_require__(/*! ../internals/internal-metadata */ \ "./node_modules/core-js/internals/internal-metadata.js\");\nvar collection=_ _webpack_require__(/*! ../internals/collection */ \ "./node_modules/core-js/internals/collection.js\");\nvar collectionWeak=_ _webpack_require__(/*! ../internals/collection-weak */ \ "./node_modules/core-js/internals/collection-weak.js\");\nvar isObject=_ _webpack_require__(/*! ../internals/is-object */ \ "./node_modules/core-js/internals/is-object.js\");\nvar enforceInternalState=( __webpack_require__(/*! ../internals/internal-state */ \ "./node_modules/core-js/internals/internal-state.js\").enforce);\nvar fails=_ _webpack_require__(/*! ../internals/fails */ \ "./node_modules/core-js/internals/fails.js\");\nvar NATIVE_WEAK_MAP=_ _webpack_require__(/*! ../internals/weak-map-basic-detection */ \ "./node_modules/core-js/internals/weak-map-basic-detection.js\");\n\nvar $Object=O bject;\n// eslint-disable-next-line es/no-array-isarray -- safe\nvar isArray=A rray.isArray;\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible=$ Object.isExtensible;\n// eslint-disable-next-line es/no-object-isfrozen -- safe\nvar isFrozen=$ Object.isFrozen;\n// eslint-disable-next-line es/no-object-issealed -- safe\nvar isSealed=$ Object.isSealed;\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar freeze=$ Object.freeze;\n// eslint-disable-next-line es/no-object-seal -- safe\nvar seal=$ Object.seal;\n\nvar FROZEN={ };\nvar SEALED={ };\nvar IS_IE11=! global.ActiveXObject && 'ActiveXObject' in global;\nvar InternalWeakMap;\n\nvar wrapper=f unction (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap=c ollection( 'WeakMap', wrapper, collectionWeak);\nvar WeakMapPrototype=$ WeakMap.prototype;\nvar nativeSet=u ncurryThis(WeakMapPrototype.set);\n\n// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them\nvar hasMSEdgeFreezingBug=f unction () {\n return FREEZING && fails(function () {\n var frozenArray=f reeze([]);\n nativeSet(new $WeakMap(), frozenArray, 1);\n return !isFrozen(frozenArray);\n });\n};\n\n// IE11 WeakMap frozen keys fix\n// We can 't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP) if (IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap ', true);\n InternalMetadataModule.enable();\n var nativeDelete = uncurryThis(WeakMapPrototype['delete ']);\n var nativeHas = uncurryThis(WeakMapPrototype.has);\n var nativeGet = uncurryThis(WeakMapPrototype.get);\n defineBuiltIns(WeakMapPrototype, {\n 'delete ': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete(this, key) || state.frozen['delete '](key);\n } return nativeDelete(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) || state.frozen.has(key);\n } return nativeHas(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n } return nativeGet(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n } else nativeSet(this, key, value);\n return this;\n }\n });\n// Chakra Edge frozen keys fix\n} else if (hasMSEdgeFreezingBug()) {\n defineBuiltIns(WeakMapPrototype, {\n set: function set(key, value) {\n var arrayIntegrityLevel;\n if (isArray(key)) {\n if (isFrozen(key)) arrayIntegrityLevel = FROZEN;\n else if (isSealed(key)) arrayIntegrityLevel = SEALED;\n }\n nativeSet(this, key, value);\n if (arrayIntegrityLevel === FROZEN) freeze(key);\n if (arrayIntegrityLevel === SEALED) seal(key);\n return this;\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLndlYWstbWFwLmNvbnN0cnVjdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLDJFQUF1QjtBQUM5QyxhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCxxQkFBcUIsbUJBQU8sQ0FBQywyRkFBK0I7QUFDNUQsNkJBQTZCLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3JFLGlCQUFpQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNsRCxxQkFBcUIsbUJBQU8sQ0FBQyx5RkFBOEI7QUFDM0QsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQywyQkFBMkIsc0hBQThDO0FBQ3pFLFlBQVksbUJBQU8sQ0FBQyxxRUFBb0I7QUFDeEMsc0JBQXNCLG1CQUFPLENBQUMsMkdBQXVDOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMud2Vhay1tYXAuY29uc3RydWN0b3IuanM/MDA5NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uV2VhayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9ICRPYmplY3QuaXNFeHRlbnNpYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2Zyb3plbiAtLSBzYWZlXG52YXIgaXNGcm96ZW4gPSAkT2JqZWN0LmlzRnJvemVuO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc3NlYWxlZCAtLSBzYWZlXG52YXIgaXNTZWFsZWQgPSAkT2JqZWN0LmlzU2VhbGVkO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1mcmVlemUgLS0gc2FmZVxudmFyIGZyZWV6ZSA9ICRPYmplY3QuZnJlZXplO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciBzZWFsID0gJE9iamVjdC5zZWFsO1xuXG52YXIgRlJPWkVOID0ge307XG52YXIgU0VBTEVEID0ge307XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIEludGVybmFsV2Vha01hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbi8vIGBXZWFrTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLWNvbnN0cnVjdG9yXG52YXIgJFdlYWtNYXAgPSBjb2xsZWN0aW9uKCdXZWFrTWFwJywgd3JhcHBlciwgY29sbGVjdGlvbldlYWspO1xudmFyIFdlYWtNYXBQcm90b3R5cGUgPSAkV2Vha01hcC5wcm90b3R5cGU7XG52YXIgbmF0aXZlU2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5zZXQpO1xuXG4vLyBDaGFrcmEgRWRnZSBidWc6IGFkZGluZyBmcm96ZW4gYXJyYXlzIHRvIFdlYWtNYXAgdW5mcmVlemUgdGhlbVxudmFyIGhhc01TRWRnZUZyZWV6aW5nQnVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRlJFRVpJTkcgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmcm96ZW5BcnJheSA9IGZyZWV6ZShbXSk7XG4gICAgbmF0aXZlU2V0KG5ldyAkV2Vha01hcCgpLCBmcm96ZW5BcnJheSwgMSk7XG4gICAgcmV0dXJuICFpc0Zyb3plbihmcm96ZW5BcnJheSk7XG4gIH0pO1xufTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuLy8gV2UgY2FuJ3QgdXNlIGZlYXR1cmUgZGV0ZWN0aW9uIGJlY2F1c2UgaXQgY3Jhc2ggc29tZSBvbGQgSUUgYnVpbGRzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDg1XG5pZiAoTkFUSVZFX1dFQUtfTUFQKSBpZiAoSVNfSUUxMSkge1xuICBJbnRlcm5hbFdlYWtNYXAgPSBjb2xsZWN0aW9uV2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCAnV2Vha01hcCcsIHRydWUpO1xuICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB2YXIgbmF0aXZlRGVsZXRlID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZVsnZGVsZXRlJ10pO1xuICB2YXIgbmF0aXZlSGFzID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5oYXMpO1xuICB2YXIgbmF0aXZlR2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5nZXQpO1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plblsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW4uaGFzKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVHZXQodGhpcywga2V5KSA6IHN0YXRlLmZyb3plbi5nZXQoa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZUdldCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICBuYXRpdmVIYXModGhpcywga2V5KSA/IG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKSA6IHN0YXRlLmZyb3plbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcbi8vIENoYWtyYSBFZGdlIGZyb3plbiBrZXlzIGZpeFxufSBlbHNlIGlmIChoYXNNU0VkZ2VGcmVlemluZ0J1ZygpKSB7XG4gIGRlZmluZUJ1aWx0SW5zKFdlYWtNYXBQcm90b3R5cGUsIHtcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgYXJyYXlJbnRlZ3JpdHlMZXZlbDtcbiAgICAgIGlmIChpc0FycmF5KGtleSkpIHtcbiAgICAgICAgaWYgKGlzRnJvemVuKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBGUk9aRU47XG4gICAgICAgIGVsc2UgaWYgKGlzU2VhbGVkKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBTRUFMRUQ7XG4gICAgICB9XG4gICAgICBuYXRpdmVTZXQodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoYXJyYXlJbnRlZ3JpdHlMZXZlbCA9PT0gRlJPWkVOKSBmcmVlemUoa2V5KTtcbiAgICAgIGlmIChhcnJheUludGVncml0eUxldmVsID09PSBTRUFMRUQpIHNlYWwoa2V5KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es.weak-map.constructor.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es.weak-map.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/es.weak-map.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\n__webpack_require__(/*! ../modules/es.weak-map.constructor */ \ "./node_modules/core-js/modules/es.weak-map.constructor.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLndlYWstbWFwLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLHFHQUFvQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMud2Vhay1tYXAuanM/MTBkMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy53ZWFrLW1hcC5jb25zdHJ1Y3RvcicpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es.weak-map.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.array.last-index.js ": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.array.last-index.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar DESCRIPTORS=_ _webpack_require__(/*! ../internals/descriptors */ \ "./node_modules/core-js/internals/descriptors.js\");\nvar addToUnscopables=_ _webpack_require__(/*! ../internals/add-to-unscopables */ \ "./node_modules/core-js/internals/add-to-unscopables.js\");\nvar toObject=_ _webpack_require__(/*! ../internals/to-object */ \ "./node_modules/core-js/internals/to-object.js\");\nvar lengthOfArrayLike=_ _webpack_require__(/*! ../internals/length-of-array-like */ \ "./node_modules/core-js/internals/length-of-array-like.js\");\nvar defineBuiltInAccessor=_ _webpack_require__(/*! ../internals/define-built-in-accessor */ \ "./node_modules/core-js/internals/define-built-in-accessor.js\");\n\n// `Array.prototype.lastIndex` getter\n// https://github.com/keithamus/proposal-array-last\nif (DESCRIPTORS) {\n defineBuiltInAccessor(Array.prototype, 'lastIndex', {\n configurable: true,\n get: function lastIndex() {\n var O=t oObject(this);\n var len=l engthOfArrayLike(O);\n return len===0 ? 0 : len - 1;\n }\n });\n\n addToUnscopables( 'lastIndex');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5sYXN0LWluZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDcEQsdUJBQXVCLG1CQUFPLENBQUMsK0ZBQWlDO0FBQ2hFLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0Msd0JBQXdCLG1CQUFPLENBQUMsbUdBQW1DO0FBQ25FLDRCQUE0QixtQkFBTyxDQUFDLDJHQUF1Qzs7QUFFM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5sYXN0LWluZGV4LmpzPzg4ODMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4YCBnZXR0ZXJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rZWl0aGFtdXMvcHJvcG9zYWwtYXJyYXktbGFzdFxuaWYgKERFU0NSSVBUT1JTKSB7XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihBcnJheS5wcm90b3R5cGUsICdsYXN0SW5kZXgnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gbGFzdEluZGV4KCkge1xuICAgICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICAgIHJldHVybiBsZW4gPT09IDAgPyAwIDogbGVuIC0gMTtcbiAgICB9XG4gIH0pO1xuXG4gIGFkZFRvVW5zY29wYWJsZXMoJ2xhc3RJbmRleCcpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.array.last-index.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.array.last-item.js ": /*!****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.array.last-item.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar DESCRIPTORS=_ _webpack_require__(/*! ../internals/descriptors */ \ "./node_modules/core-js/internals/descriptors.js\");\nvar addToUnscopables=_ _webpack_require__(/*! ../internals/add-to-unscopables */ \ "./node_modules/core-js/internals/add-to-unscopables.js\");\nvar toObject=_ _webpack_require__(/*! ../internals/to-object */ \ "./node_modules/core-js/internals/to-object.js\");\nvar lengthOfArrayLike=_ _webpack_require__(/*! ../internals/length-of-array-like */ \ "./node_modules/core-js/internals/length-of-array-like.js\");\nvar defineBuiltInAccessor=_ _webpack_require__(/*! ../internals/define-built-in-accessor */ \ "./node_modules/core-js/internals/define-built-in-accessor.js\");\n\n// `Array.prototype.lastIndex` accessor\n// https://github.com/keithamus/proposal-array-last\nif (DESCRIPTORS) {\n defineBuiltInAccessor(Array.prototype, 'lastItem', {\n configurable: true,\n get: function lastItem() {\n var O=t oObject(this);\n var len=l engthOfArrayLike(O);\n return len===0 ? undefined : O[len - 1];\n },\n set: function lastItem(value) {\n var O=t oObject(this);\n var len=l engthOfArrayLike(O);\n return O[len===0 ? 0 : len - 1]=v alue;\n }\n });\n\n addToUnscopables( 'lastItem');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5sYXN0LWl0ZW0uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNwRCx1QkFBdUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDaEUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyx3QkFBd0IsbUJBQU8sQ0FBQyxtR0FBbUM7QUFDbkUsNEJBQTRCLG1CQUFPLENBQUMsMkdBQXVDOztBQUUzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5Lmxhc3QtaXRlbS5qcz9kYWQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleGAgYWNjZXNzb3Jcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rZWl0aGFtdXMvcHJvcG9zYWwtYXJyYXktbGFzdFxuaWYgKERFU0NSSVBUT1JTKSB7XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihBcnJheS5wcm90b3R5cGUsICdsYXN0SXRlbScsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBsYXN0SXRlbSgpIHtcbiAgICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgICByZXR1cm4gbGVuID09PSAwID8gdW5kZWZpbmVkIDogT1tsZW4gLSAxXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gbGFzdEl0ZW0odmFsdWUpIHtcbiAgICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgICByZXR1cm4gT1tsZW4gPT09IDAgPyAwIDogbGVuIC0gMV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGFkZFRvVW5zY29wYWJsZXMoJ2xhc3RJdGVtJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.array.last-item.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.composite-key.js ": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.composite-key.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar apply=_ _webpack_require__(/*! ../internals/function-apply */ \ "./node_modules/core-js/internals/function-apply.js\");\nvar getCompositeKeyNode=_ _webpack_require__(/*! ../internals/composite-key */ \ "./node_modules/core-js/internals/composite-key.js\");\nvar getBuiltIn=_ _webpack_require__(/*! ../internals/get-built-in */ \ "./node_modules/core-js/internals/get-built-in.js\");\nvar create=_ _webpack_require__(/*! ../internals/object-create */ \ "./node_modules/core-js/internals/object-create.js\");\n\nvar $Object=O bject;\n\nvar initializer=f unction () {\n var freeze=g etBuiltIn( 'Object', 'freeze');\n return freeze ? freeze(create(null)) : create(null);\n};\n\n// https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey\n$({ global: true, forced: true }, {\n compositeKey: function compositeKey() {\n return apply(getCompositeKeyNode, $Object, arguments).get( 'object', initializer);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5jb21wb3NpdGUta2V5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxZQUFZLG1CQUFPLENBQUMsdUZBQTZCO0FBQ2pELDBCQUEwQixtQkFBTyxDQUFDLHFGQUE0QjtBQUM5RCxpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDcEQsYUFBYSxtQkFBTyxDQUFDLHFGQUE0Qjs7QUFFakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLDRCQUE0QjtBQUNoQztBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuY29tcG9zaXRlLWtleS5qcz84MTgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgZ2V0Q29tcG9zaXRlS2V5Tm9kZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb21wb3NpdGUta2V5Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxudmFyIGluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZnJlZXplID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2ZyZWV6ZScpO1xuICByZXR1cm4gZnJlZXplID8gZnJlZXplKGNyZWF0ZShudWxsKSkgOiBjcmVhdGUobnVsbCk7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1yaWNoZXIta2V5cy90cmVlL21hc3Rlci9jb21wb3NpdGVLZXlcbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGNvbXBvc2l0ZUtleTogZnVuY3Rpb24gY29tcG9zaXRlS2V5KCkge1xuICAgIHJldHVybiBhcHBseShnZXRDb21wb3NpdGVLZXlOb2RlLCAkT2JqZWN0LCBhcmd1bWVudHMpLmdldCgnb2JqZWN0JywgaW5pdGlhbGl6ZXIpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.composite-key.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.composite-symbol.js ": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.composite-symbol.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar getCompositeKeyNode=_ _webpack_require__(/*! ../internals/composite-key */ \ "./node_modules/core-js/internals/composite-key.js\");\nvar getBuiltIn=_ _webpack_require__(/*! ../internals/get-built-in */ \ "./node_modules/core-js/internals/get-built-in.js\");\nvar apply=_ _webpack_require__(/*! ../internals/function-apply */ \ "./node_modules/core-js/internals/function-apply.js\");\n\n// https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey\n$({ global: true, forced: true }, {\n compositeSymbol: function compositeSymbol() {\n if (arguments.length===1 && typeof arguments[0]=='string' ) return getBuiltIn( 'Symbol')[ 'for'](arguments[0]);\n return apply(getCompositeKeyNode, null, arguments).get( 'symbol', getBuiltIn( 'Symbol'));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5jb21wb3NpdGUtc3ltYm9sLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQywwQkFBMEIsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDOUQsaUJBQWlCLG1CQUFPLENBQUMsbUZBQTJCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRWpEO0FBQ0EsSUFBSSw0QkFBNEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuY29tcG9zaXRlLXN5bWJvbC5qcz8xMDM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldENvbXBvc2l0ZUtleU5vZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29tcG9zaXRlLWtleScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcmljaGVyLWtleXMvdHJlZS9tYXN0ZXIvY29tcG9zaXRlS2V5XG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBjb21wb3NpdGVTeW1ib2w6IGZ1bmN0aW9uIGNvbXBvc2l0ZVN5bWJvbCgpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJndW1lbnRzWzBdID09ICdzdHJpbmcnKSByZXR1cm4gZ2V0QnVpbHRJbignU3ltYm9sJylbJ2ZvciddKGFyZ3VtZW50c1swXSk7XG4gICAgcmV0dXJuIGFwcGx5KGdldENvbXBvc2l0ZUtleU5vZGUsIG51bGwsIGFyZ3VtZW50cykuZ2V0KCdzeW1ib2wnLCBnZXRCdWlsdEluKCdTeW1ib2wnKSk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.composite-symbol.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.delete-all.js ": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.delete-all.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar aMap=_ _webpack_require__(/*! ../internals/a-map */ \ "./node_modules/core-js/internals/a-map.js\");\nvar remove=( __webpack_require__(/*! ../internals/map-helpers */ \ "./node_modules/core-js/internals/map-helpers.js\").remove);\n\n// `Map.prototype.deleteAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n deleteAll: function deleteAll(/* ...elements */) {\n var collection=a Map(this);\n var allDeleted=t rue;\n var wasDeleted;\n for (var k=0 , len=a rguments.length; k < len; k++) {\n wasDeleted=r emove(collection, arguments[k]);\n allDeleted=a llDeleted && wasDeleted;\n } return !!allDeleted;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZGVsZXRlLWFsbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxhQUFhLCtHQUEwQzs7QUFFdkQ7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFNBQVM7QUFDckQ7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZGVsZXRlLWFsbC5qcz9jMjA2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFNYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1tYXAnKTtcbnZhciByZW1vdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLWhlbHBlcnMnKS5yZW1vdmU7XG5cbi8vIGBNYXAucHJvdG90eXBlLmRlbGV0ZUFsbGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZGVsZXRlQWxsOiBmdW5jdGlvbiBkZWxldGVBbGwoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgICB2YXIgY29sbGVjdGlvbiA9IGFNYXAodGhpcyk7XG4gICAgdmFyIGFsbERlbGV0ZWQgPSB0cnVlO1xuICAgIHZhciB3YXNEZWxldGVkO1xuICAgIGZvciAodmFyIGsgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgIHdhc0RlbGV0ZWQgPSByZW1vdmUoY29sbGVjdGlvbiwgYXJndW1lbnRzW2tdKTtcbiAgICAgIGFsbERlbGV0ZWQgPSBhbGxEZWxldGVkICYmIHdhc0RlbGV0ZWQ7XG4gICAgfSByZXR1cm4gISFhbGxEZWxldGVkO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.delete-all.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.every.js ": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.every.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar bind=_ _webpack_require__(/*! ../internals/function-bind-context */ \ "./node_modules/core-js/internals/function-bind-context.js\");\nvar aMap=_ _webpack_require__(/*! ../internals/a-map */ \ "./node_modules/core-js/internals/a-map.js\");\nvar iterate=_ _webpack_require__(/*! ../internals/map-iterate */ \ "./node_modules/core-js/internals/map-iterate.js\");\n\n// `Map.prototype.every` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n every: function every(callbackfn /* , thisArg */) {\n var map=a Map(this);\n var boundFunction=b ind(callbackfn, arguments.length> 1 ? arguments[1] : undefined);\n return iterate(map, function (value, key) {\n if (!boundFunction(value, key, map)) return false;\n }, true) !== false;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZXZlcnkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDdkQsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDtBQUNBO0FBQ0EsSUFBSSxzREFBc0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZXZlcnkuanM/NDc3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFNYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1tYXAnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1pdGVyYXRlJyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwID0gYU1hcCh0aGlzKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBpdGVyYXRlKG1hcCwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICghYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApKSByZXR1cm4gZmFsc2U7XG4gICAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.every.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.filter.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.filter.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar MapHelpers = __webpack_require__(/*! ../internals/map-helpers */ \"./node_modules/core-js/internals/map-helpers.js\");\nvar iterate = __webpack_require__(/*! ../internals/map-iterate */ \"./node_modules/core-js/internals/map-iterate.js\");\n\nvar Map = MapHelpers.Map;\nvar set = MapHelpers.set;\n\n// `Map.prototype.filter` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n filter: function filter(callbackfn /* , thisArg */) {\n var map = aMap(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newMap = new Map();\n iterate(map, function (value, key) {\n if (boundFunction(value, key, map)) set(newMap, key, value);\n });\n return newMap;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZmlsdGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMscUdBQW9DO0FBQ3ZELFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5maWx0ZXIuanM/OTdmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFNYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1tYXAnKTtcbnZhciBNYXBIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtaXRlcmF0ZScpO1xuXG52YXIgTWFwID0gTWFwSGVscGVycy5NYXA7XG52YXIgc2V0ID0gTWFwSGVscGVycy5zZXQ7XG5cbi8vIGBNYXAucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwID0gYU1hcCh0aGlzKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHZhciBuZXdNYXAgPSBuZXcgTWFwKCk7XG4gICAgaXRlcmF0ZShtYXAsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApKSBzZXQobmV3TWFwLCBrZXksIHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3TWFwO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.filter.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.find-key.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.find-key.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar iterate = __webpack_require__(/*! ../internals/map-iterate */ \"./node_modules/core-js/internals/map-iterate.js\");\n\n// `Map.prototype.findKey` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n findKey: function findKey(callbackfn /* , thisArg */) {\n var map = aMap(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var result = iterate(map, function (value, key) {\n if (boundFunction(value, key, map)) return { key: key };\n }, true);\n return result && result.key;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZmluZC1rZXkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDdkQsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDtBQUNBO0FBQ0EsSUFBSSxzREFBc0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmZpbmQta2V5LmpzPzlmOWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhTWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtbWFwJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5maW5kS2V5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBmaW5kS2V5OiBmdW5jdGlvbiBmaW5kS2V5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFNYXAodGhpcyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgcmVzdWx0ID0gaXRlcmF0ZShtYXAsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApKSByZXR1cm4geyBrZXk6IGtleSB9O1xuICAgIH0sIHRydWUpO1xuICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmtleTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.find-key.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.find.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.find.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar iterate = __webpack_require__(/*! ../internals/map-iterate */ \"./node_modules/core-js/internals/map-iterate.js\");\n\n// `Map.prototype.find` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n find: function find(callbackfn /* , thisArg */) {\n var map = aMap(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var result = iterate(map, function (value, key) {\n if (boundFunction(value, key, map)) return { value: value };\n }, true);\n return result && result.value;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZmluZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFHQUFvQztBQUN2RCxXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRCxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZmluZC5qcz9kMmFmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYU1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLW1hcCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLWl0ZXJhdGUnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXAgPSBhTWFwKHRoaXMpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyIHJlc3VsdCA9IGl0ZXJhdGUobWFwLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgaWYgKGJvdW5kRnVuY3Rpb24odmFsdWUsIGtleSwgbWFwKSkgcmV0dXJuIHsgdmFsdWU6IHZhbHVlIH07XG4gICAgfSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQudmFsdWU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.find.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.from.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.from.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar from = __webpack_require__(/*! ../internals/collection-from */ \"./node_modules/core-js/internals/collection-from.js\");\n\n// `Map.from` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n$({ target: 'Map', stat: true, forced: true }, {\n from: from\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZnJvbS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHlGQUE4Qjs7QUFFakQ7QUFDQTtBQUNBLElBQUkseUNBQXlDO0FBQzdDO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5mcm9tLmpzP2NlZWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLWZyb20nKTtcblxuLy8gYE1hcC5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG4kKHsgdGFyZ2V0OiAnTWFwJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.from.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.group-by.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.group-by.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \"./node_modules/core-js/internals/a-callable.js\");\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \"./node_modules/core-js/internals/iterate.js\");\nvar MapHelpers = __webpack_require__(/*! ../internals/map-helpers */ \"./node_modules/core-js/internals/map-helpers.js\");\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \"./node_modules/core-js/internals/is-pure.js\");\n\nvar Map = MapHelpers.Map;\nvar has = MapHelpers.has;\nvar get = MapHelpers.get;\nvar set = MapHelpers.set;\nvar push = uncurryThis([].push);\n\n// `Map.groupBy` method\n// https://github.com/tc39/proposal-array-grouping\n$({ target: 'Map', stat: true, forced: IS_PURE }, {\n groupBy: function groupBy(items, callbackfn) {\n requireObjectCoercible(items);\n aCallable(callbackfn);\n var map = new Map();\n var k = 0;\n iterate(items, function (value) {\n var key = callbackfn(value, k++);\n if (!has(map, key)) set(map, key, [value]);\n else push(get(map, key), value);\n });\n return map;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZ3JvdXAtYnkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsNkJBQTZCLG1CQUFPLENBQUMsMkdBQXVDO0FBQzVFLGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksNENBQTRDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5ncm91cC1ieS5qcz84YTFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBNYXBIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1oZWxwZXJzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBNYXAgPSBNYXBIZWxwZXJzLk1hcDtcbnZhciBoYXMgPSBNYXBIZWxwZXJzLmhhcztcbnZhciBnZXQgPSBNYXBIZWxwZXJzLmdldDtcbnZhciBzZXQgPSBNYXBIZWxwZXJzLnNldDtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBNYXAuZ3JvdXBCeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1ncm91cGluZ1xuJCh7IHRhcmdldDogJ01hcCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGdyb3VwQnk6IGZ1bmN0aW9uIGdyb3VwQnkoaXRlbXMsIGNhbGxiYWNrZm4pIHtcbiAgICByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0ZW1zKTtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgICB2YXIgayA9IDA7XG4gICAgaXRlcmF0ZShpdGVtcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIga2V5ID0gY2FsbGJhY2tmbih2YWx1ZSwgaysrKTtcbiAgICAgIGlmICghaGFzKG1hcCwga2V5KSkgc2V0KG1hcCwga2V5LCBbdmFsdWVdKTtcbiAgICAgIGVsc2UgcHVzaChnZXQobWFwLCBrZXkpLCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.group-by.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.includes.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.includes.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar sameValueZero = __webpack_require__(/*! ../internals/same-value-zero */ \"./node_modules/core-js/internals/same-value-zero.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar iterate = __webpack_require__(/*! ../internals/map-iterate */ \"./node_modules/core-js/internals/map-iterate.js\");\n\n// `Map.prototype.includes` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n includes: function includes(searchElement) {\n return iterate(aMap(this), function (value) {\n if (sameValueZero(value, searchElement)) return true;\n }, true) === true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuaW5jbHVkZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLG9CQUFvQixtQkFBTyxDQUFDLHlGQUE4QjtBQUMxRCxXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmluY2x1ZGVzLmpzPzQzYjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2FtZVZhbHVlWmVybyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zYW1lLXZhbHVlLXplcm8nKTtcbnZhciBhTWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtbWFwJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQpIHtcbiAgICByZXR1cm4gaXRlcmF0ZShhTWFwKHRoaXMpLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChzYW1lVmFsdWVaZXJvKHZhbHVlLCBzZWFyY2hFbGVtZW50KSkgcmV0dXJuIHRydWU7XG4gICAgfSwgdHJ1ZSkgPT09IHRydWU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.includes.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.key-by.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.key-by.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \"./node_modules/core-js/internals/iterate.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \"./node_modules/core-js/internals/a-callable.js\");\nvar Map = (__webpack_require__(/*! ../internals/map-helpers */ \"./node_modules/core-js/internals/map-helpers.js\").Map);\n\n// `Map.keyBy` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', stat: true, forced: true }, {\n keyBy: function keyBy(iterable, keyDerivative) {\n var C = isCallable(this) ? this : Map;\n var newMap = new C();\n aCallable(keyDerivative);\n var setter = aCallable(newMap.set);\n iterate(iterable, function (element) {\n call(setter, newMap, keyDerivative(element), element);\n });\n return newMap;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAua2V5LWJ5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMscUZBQTRCO0FBQy9DLGNBQWMsbUJBQU8sQ0FBQyx5RUFBc0I7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGdCQUFnQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNqRCxVQUFVLDRHQUF1Qzs7QUFFakQ7QUFDQTtBQUNBLElBQUkseUNBQXlDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmtleS1ieS5qcz9iYTc0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtaGVscGVycycpLk1hcDtcblxuLy8gYE1hcC5rZXlCeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBrZXlCeTogZnVuY3Rpb24ga2V5QnkoaXRlcmFibGUsIGtleURlcml2YXRpdmUpIHtcbiAgICB2YXIgQyA9IGlzQ2FsbGFibGUodGhpcykgPyB0aGlzIDogTWFwO1xuICAgIHZhciBuZXdNYXAgPSBuZXcgQygpO1xuICAgIGFDYWxsYWJsZShrZXlEZXJpdmF0aXZlKTtcbiAgICB2YXIgc2V0dGVyID0gYUNhbGxhYmxlKG5ld01hcC5zZXQpO1xuICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBjYWxsKHNldHRlciwgbmV3TWFwLCBrZXlEZXJpdmF0aXZlKGVsZW1lbnQpLCBlbGVtZW50KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3TWFwO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.key-by.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.key-of.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.key-of.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar iterate = __webpack_require__(/*! ../internals/map-iterate */ \"./node_modules/core-js/internals/map-iterate.js\");\n\n// `Map.prototype.keyOf` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n keyOf: function keyOf(searchElement) {\n var result = iterate(aMap(this), function (value, key) {\n if (value === searchElement) return { key: key };\n }, true);\n return result && result.key;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAua2V5LW9mLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5rZXktb2YuanM/NTY3YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhTWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtbWFwJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5rZXlPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAga2V5T2Y6IGZ1bmN0aW9uIGtleU9mKHNlYXJjaEVsZW1lbnQpIHtcbiAgICB2YXIgcmVzdWx0ID0gaXRlcmF0ZShhTWFwKHRoaXMpLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgaWYgKHZhbHVlID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4geyBrZXk6IGtleSB9O1xuICAgIH0sIHRydWUpO1xuICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmtleTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.key-of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.map-keys.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.map-keys.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar MapHelpers = __webpack_require__(/*! ../internals/map-helpers */ \"./node_modules/core-js/internals/map-helpers.js\");\nvar iterate = __webpack_require__(/*! ../internals/map-iterate */ \"./node_modules/core-js/internals/map-iterate.js\");\n\nvar Map = MapHelpers.Map;\nvar set = MapHelpers.set;\n\n// `Map.prototype.mapKeys` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n mapKeys: function mapKeys(callbackfn /* , thisArg */) {\n var map = aMap(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newMap = new Map();\n iterate(map, function (value, key) {\n set(newMap, boundFunction(value, key, map), value);\n });\n return newMap;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAubWFwLWtleXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDdkQsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsY0FBYyxtQkFBTyxDQUFDLGlGQUEwQjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxzREFBc0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLm1hcC1rZXlzLmpzPzljODciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhTWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtbWFwJyk7XG52YXIgTWFwSGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtaGVscGVycycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLWl0ZXJhdGUnKTtcblxudmFyIE1hcCA9IE1hcEhlbHBlcnMuTWFwO1xudmFyIHNldCA9IE1hcEhlbHBlcnMuc2V0O1xuXG4vLyBgTWFwLnByb3RvdHlwZS5tYXBLZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBtYXBLZXlzOiBmdW5jdGlvbiBtYXBLZXlzKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFNYXAodGhpcyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgbmV3TWFwID0gbmV3IE1hcCgpO1xuICAgIGl0ZXJhdGUobWFwLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgc2V0KG5ld01hcCwgYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApLCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld01hcDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.map-keys.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.map-values.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.map-values.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar MapHelpers = __webpack_require__(/*! ../internals/map-helpers */ \"./node_modules/core-js/internals/map-helpers.js\");\nvar iterate = __webpack_require__(/*! ../internals/map-iterate */ \"./node_modules/core-js/internals/map-iterate.js\");\n\nvar Map = MapHelpers.Map;\nvar set = MapHelpers.set;\n\n// `Map.prototype.mapValues` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n mapValues: function mapValues(callbackfn /* , thisArg */) {\n var map = aMap(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newMap = new Map();\n iterate(map, function (value, key) {\n set(newMap, key, boundFunction(value, key, map));\n });\n return newMap;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAubWFwLXZhbHVlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFHQUFvQztBQUN2RCxXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAubWFwLXZhbHVlcy5qcz8wOTRjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYU1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLW1hcCcpO1xudmFyIE1hcEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLWhlbHBlcnMnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1pdGVyYXRlJyk7XG5cbnZhciBNYXAgPSBNYXBIZWxwZXJzLk1hcDtcbnZhciBzZXQgPSBNYXBIZWxwZXJzLnNldDtcblxuLy8gYE1hcC5wcm90b3R5cGUubWFwVmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBtYXBWYWx1ZXM6IGZ1bmN0aW9uIG1hcFZhbHVlcyhjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXAgPSBhTWFwKHRoaXMpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyIG5ld01hcCA9IG5ldyBNYXAoKTtcbiAgICBpdGVyYXRlKG1hcCwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHNldChuZXdNYXAsIGtleSwgYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3TWFwO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.map-values.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.merge.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.merge.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \"./node_modules/core-js/internals/iterate.js\");\nvar set = (__webpack_require__(/*! ../internals/map-helpers */ \"./node_modules/core-js/internals/map-helpers.js\").set);\n\n// `Map.prototype.merge` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, arity: 1, forced: true }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n merge: function merge(iterable /* ...iterables */) {\n var map = aMap(this);\n var argumentsLength = arguments.length;\n var i = 0;\n while (i < argumentsLength) {\n iterate(arguments[i++], function (key, value) {\n set(map, key, value);\n }, { AS_ENTRIES: true });\n }\n return map;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAubWVyZ2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsY0FBYyxtQkFBTyxDQUFDLHlFQUFzQjtBQUM1QyxVQUFVLDRHQUF1Qzs7QUFFakQ7QUFDQTtBQUNBLElBQUksZ0VBQWdFO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUksa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAubWVyZ2UuanM/YTljZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhTWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtbWFwJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgc2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1oZWxwZXJzJykuc2V0O1xuXG4vLyBgTWFwLnByb3RvdHlwZS5tZXJnZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIG1lcmdlOiBmdW5jdGlvbiBtZXJnZShpdGVyYWJsZSAvKiAuLi5pdGVyYWJsZXMgKi8pIHtcbiAgICB2YXIgbWFwID0gYU1hcCh0aGlzKTtcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmd1bWVudHNMZW5ndGgpIHtcbiAgICAgIGl0ZXJhdGUoYXJndW1lbnRzW2krK10sIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIHNldChtYXAsIGtleSwgdmFsdWUpO1xuICAgICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.merge.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.of.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.of.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar of=_ _webpack_require__(/*! ../internals/collection-of */ \ "./node_modules/core-js/internals/collection-of.js\");\n\n// `Map.of` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n$({ target: 'Map', stat: true, forced: true }, {\n of: of\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAub2YuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFNBQVMsbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRTdDO0FBQ0E7QUFDQSxJQUFJLHlDQUF5QztBQUM3QztBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAub2YuanM/ZTdkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLW9mJyk7XG5cbi8vIGBNYXAub2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG4kKHsgdGFyZ2V0OiAnTWFwJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgb2Y6IG9mXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.of.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.reduce.js ": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.reduce.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar aCallable=_ _webpack_require__(/*! ../internals/a-callable */ \ "./node_modules/core-js/internals/a-callable.js\");\nvar aMap=_ _webpack_require__(/*! ../internals/a-map */ \ "./node_modules/core-js/internals/a-map.js\");\nvar iterate=_ _webpack_require__(/*! ../internals/map-iterate */ \ "./node_modules/core-js/internals/map-iterate.js\");\n\nvar $TypeError=T ypeError;\n\n// `Map.prototype.reduce` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n var map=a Map(this);\n var noInitial=a rguments.length < 2;\n var accumulator=n oInitial ? undefined : arguments[1];\n aCallable(callbackfn);\n iterate(map, function (value, key) {\n if (noInitial) {\n noInitial=f alse;\n accumulator=v alue;\n } else {\n accumulator=c allbackfn(accumulator, value, key, map);\n }\n });\n if (noInitial) throw $TypeError( 'Reduce of empty map with no initial value');\n return accumulator;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAucmVkdWNlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxzREFBc0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5yZWR1Y2UuanM/NTRlYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFNYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1tYXAnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1pdGVyYXRlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgbWFwID0gYU1hcCh0aGlzKTtcbiAgICB2YXIgbm9Jbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8IDI7XG4gICAgdmFyIGFjY3VtdWxhdG9yID0gbm9Jbml0aWFsID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBpdGVyYXRlKG1hcCwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChub0luaXRpYWwpIHtcbiAgICAgICAgbm9Jbml0aWFsID0gZmFsc2U7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrZm4oYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG1hcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG5vSW5pdGlhbCkgdGhyb3cgJFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IG1hcCB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.reduce.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.some.js ": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.some.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar bind=_ _webpack_require__(/*! ../internals/function-bind-context */ \ "./node_modules/core-js/internals/function-bind-context.js\");\nvar aMap=_ _webpack_require__(/*! ../internals/a-map */ \ "./node_modules/core-js/internals/a-map.js\");\nvar iterate=_ _webpack_require__(/*! ../internals/map-iterate */ \ "./node_modules/core-js/internals/map-iterate.js\");\n\n// `Map.prototype.some` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n some: function some(callbackfn /* , thisArg */) {\n var map=a Map(this);\n var boundFunction=b ind(callbackfn, arguments.length> 1 ? arguments[1] : undefined);\n return iterate(map, function (value, key) {\n if (boundFunction(value, key, map)) return true;\n }, true) === true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuc29tZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFHQUFvQztBQUN2RCxXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5zb21lLmpzPzRlMTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhTWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtbWFwJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5zb21lYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFNYXAodGhpcyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gaXRlcmF0ZShtYXAsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApKSByZXR1cm4gdHJ1ZTtcbiAgICB9LCB0cnVlKSA9PT0gdHJ1ZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.some.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.map.update.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.map.update.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \"./node_modules/core-js/internals/a-callable.js\");\nvar aMap = __webpack_require__(/*! ../internals/a-map */ \"./node_modules/core-js/internals/a-map.js\");\nvar MapHelpers = __webpack_require__(/*! ../internals/map-helpers */ \"./node_modules/core-js/internals/map-helpers.js\");\n\nvar $TypeError = TypeError;\nvar get = MapHelpers.get;\nvar has = MapHelpers.has;\nvar set = MapHelpers.set;\n\n// `Map.prototype.update` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n update: function update(key, callback /* , thunk */) {\n var map = aMap(this);\n var length = arguments.length;\n aCallable(callback);\n var isPresentInMap = has(map, key);\n if (!isPresentInMap && length < 3) {\n throw $TypeError( 'Updating absent value');\n }\n var value=i sPresentInMap ? get(map, key) : aCallable(length> 2 ? arguments[2] : undefined)(key, map);\n set(map, key, callback(value, key, map));\n return map;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAudXBkYXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLnVwZGF0ZS5qcz9mNDNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYU1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLW1hcCcpO1xudmFyIE1hcEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLWhlbHBlcnMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgZ2V0ID0gTWFwSGVscGVycy5nZXQ7XG52YXIgaGFzID0gTWFwSGVscGVycy5oYXM7XG52YXIgc2V0ID0gTWFwSGVscGVycy5zZXQ7XG5cbi8vIGBNYXAucHJvdG90eXBlLnVwZGF0ZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoa2V5LCBjYWxsYmFjayAvKiAsIHRodW5rICovKSB7XG4gICAgdmFyIG1hcCA9IGFNYXAodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrKTtcbiAgICB2YXIgaXNQcmVzZW50SW5NYXAgPSBoYXMobWFwLCBrZXkpO1xuICAgIGlmICghaXNQcmVzZW50SW5NYXAgJiYgbGVuZ3RoIDwgMykge1xuICAgICAgdGhyb3cgJFR5cGVFcnJvcignVXBkYXRpbmcgYWJzZW50IHZhbHVlJyk7XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IGlzUHJlc2VudEluTWFwID8gZ2V0KG1hcCwga2V5KSA6IGFDYWxsYWJsZShsZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKShrZXksIG1hcCk7XG4gICAgc2V0KG1hcCwga2V5LCBjYWxsYmFjayh2YWx1ZSwga2V5LCBtYXApKTtcbiAgICByZXR1cm4gbWFwO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.map.update.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.clamp.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.clamp.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\nvar min = Math.min;\nvar max = Math.max;\n\n// `Math.clamp` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n clamp: function clamp(x, lower, upper) {\n return min(upper, max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmNsYW1wLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjs7QUFFckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguY2xhbXAuanM/NzBlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgTWF0aC5jbGFtcGAgbWV0aG9kXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gbWluKHVwcGVyLCBtYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.clamp.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.deg-per-rad.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.deg-per-rad.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\n// `Math.DEG_PER_RAD` constant\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, nonConfigurable: true, nonWritable: true }, {\n DEG_PER_RAD: Math.PI / 180\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmRlZy1wZXItcmFkLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjs7QUFFckM7QUFDQTtBQUNBLElBQUksc0VBQXNFO0FBQzFFO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguZGVnLXBlci1yYWQuanM/YmRkNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGguREVHX1BFUl9SQURgIGNvbnN0YW50XG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIG5vbkNvbmZpZ3VyYWJsZTogdHJ1ZSwgbm9uV3JpdGFibGU6IHRydWUgfSwge1xuICBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MFxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.deg-per-rad.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.degrees.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.degrees.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\nvar RAD_PER_DEG = 180 / Math.PI;\n\n// `Math.degrees` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmRlZ3JlZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguZGVncmVlcy5qcz8yYWJjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4vLyBgTWF0aC5kZWdyZWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.degrees.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.fscale.js": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.fscale.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\nvar scale = __webpack_require__(/*! ../internals/math-scale */ \"./node_modules/core-js/internals/math-scale.js\");\nvar fround = __webpack_require__(/*! ../internals/math-fround */ \"./node_modules/core-js/internals/math-fround.js\");\n\n// `Math.fscale` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmZzY2FsZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7O0FBRXJDLFlBQVksbUJBQU8sQ0FBQywrRUFBeUI7QUFDN0MsYUFBYSxtQkFBTyxDQUFDLGlGQUEwQjs7QUFFL0M7QUFDQTtBQUNBLElBQUksMENBQTBDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmZzY2FsZS5qcz80OGJlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgc2NhbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLWZyb3VuZCcpO1xuXG4vLyBgTWF0aC5mc2NhbGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.fscale.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.iaddh.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.iaddh.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\n// `Math.iaddh` method\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\n// TODO: Remove from `core-js@4`\n$({ target: 'Math', stat: true, forced: true }, {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmlhZGRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguaWFkZGguanM/OTVlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGguaWFkZGhgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlhZGRoOiBmdW5jdGlvbiBpYWRkaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgKyAoeTEgPj4+IDApICsgKCgkeDAgJiAkeTAgfCAoJHgwIHwgJHkwKSAmIH4oJHgwICsgJHkwID4+PiAwKSkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.iaddh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.imulh.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.imulh.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\n// `Math.imulh` method\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\n// TODO: Remove from `core-js@4`\n$({ target: 'Math', stat: true, forced: true }, {\n imulh: function imulh(u, v) {\n var UINT16 = 0xFFFF;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmltdWxoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmltdWxoLmpzPzc4ZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBNYXRoLmltdWxoYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweEZGRkY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.imulh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.isubh.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.isubh.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\n// `Math.isubh` method\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\n// TODO: Remove from `core-js@4`\n$({ target: 'Math', stat: true, forced: true }, {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmlzdWJoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguaXN1YmguanM/MzZhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGguaXN1YmhgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzdWJoOiBmdW5jdGlvbiBpc3ViaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgLSAoeTEgPj4+IDApIC0gKCh+JHgwICYgJHkwIHwgfigkeDAgXiAkeTApICYgJHgwIC0gJHkwID4+PiAwKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.isubh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.rad-per-deg.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.rad-per-deg.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\n// `Math.RAD_PER_DEG` constant\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, nonConfigurable: true, nonWritable: true }, {\n RAD_PER_DEG: 180 / Math.PI\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnJhZC1wZXItZGVnLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjs7QUFFckM7QUFDQTtBQUNBLElBQUksc0VBQXNFO0FBQzFFO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGgucmFkLXBlci1kZWcuanM/YzNiYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGguUkFEX1BFUl9ERUdgIGNvbnN0YW50XG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIG5vbkNvbmZpZ3VyYWJsZTogdHJ1ZSwgbm9uV3JpdGFibGU6IHRydWUgfSwge1xuICBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.rad-per-deg.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.radians.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.radians.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\nvar DEG_PER_RAD = Math.PI / 180;\n\n// `Math.radians` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnJhZGlhbnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGgucmFkaWFucy5qcz9iOTY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4vLyBgTWF0aC5yYWRpYW5zYCBtZXRob2Rcbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.radians.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.scale.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.scale.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar scale = __webpack_require__(/*! ../internals/math-scale */ \"./node_modules/core-js/internals/math-scale.js\");\n\n// `Math.scale` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n scale: scale\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnNjYWxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxZQUFZLG1CQUFPLENBQUMsK0VBQXlCOztBQUU3QztBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5zY2FsZS5qcz81OGZjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtc2NhbGUnKTtcblxuLy8gYE1hdGguc2NhbGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBzY2FsZTogc2NhbGVcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.scale.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.seeded-prng.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.seeded-prng.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar numberIsFinite = __webpack_require__(/*! ../internals/number-is-finite */ \"./node_modules/core-js/internals/number-is-finite.js\");\nvar createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ \"./node_modules/core-js/internals/iterator-create-constructor.js\");\nvar createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ \"./node_modules/core-js/internals/create-iter-result-object.js\");\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \"./node_modules/core-js/internals/internal-state.js\");\n\nvar SEEDED_RANDOM = 'Seeded Random';\nvar SEEDED_RANDOM_GENERATOR = SEEDED_RANDOM + ' Generator';\nvar SEED_TYPE_ERROR = 'Math.seededPRNG() argument should have a \"seed\" field with a finite value.';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SEEDED_RANDOM_GENERATOR);\nvar $TypeError = TypeError;\n\nvar $SeededRandomGenerator = createIteratorConstructor(function SeededRandomGenerator(seed) {\n setInternalState(this, {\n type: SEEDED_RANDOM_GENERATOR,\n seed: seed % 2147483647\n });\n}, SEEDED_RANDOM, function next() {\n var state = getInternalState(this);\n var seed = state.seed = (state.seed * 1103515245 + 12345) % 2147483647;\n return createIterResultObject((seed & 1073741823) / 1073741823, false);\n});\n\n// `Math.seededPRNG` method\n// https://github.com/tc39/proposal-seeded-random\n// based on https://github.com/tc39/proposal-seeded-random/blob/78b8258835b57fc2100d076151ab506bc3202ae6/demo.html\n$({ target: 'Math', stat: true, forced: true }, {\n seededPRNG: function seededPRNG(it) {\n var seed = anObject(it).seed;\n if (!numberIsFinite(seed)) throw $TypeError(SEED_TYPE_ERROR);\n return new $SeededRandomGenerator(seed);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnNlZWRlZC1wcm5nLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLHFCQUFxQixtQkFBTyxDQUFDLDJGQUErQjtBQUM1RCxnQ0FBZ0MsbUJBQU8sQ0FBQyxpSEFBMEM7QUFDbEYsNkJBQTZCLG1CQUFPLENBQUMsNkdBQXdDO0FBQzdFLDBCQUEwQixtQkFBTyxDQUFDLHVGQUE2Qjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLElBQUksMENBQTBDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5zZWVkZWQtcHJuZy5qcz8zNTVkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG51bWJlcklzRmluaXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1pcy1maW5pdGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIFNFRURFRF9SQU5ET00gPSAnU2VlZGVkIFJhbmRvbSc7XG52YXIgU0VFREVEX1JBTkRPTV9HRU5FUkFUT1IgPSBTRUVERURfUkFORE9NICsgJyBHZW5lcmF0b3InO1xudmFyIFNFRURfVFlQRV9FUlJPUiA9ICdNYXRoLnNlZWRlZFBSTkcoKSBhcmd1bWVudCBzaG91bGQgaGF2ZSBhIFwic2VlZFwiIGZpZWxkIHdpdGggYSBmaW5pdGUgdmFsdWUuJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNFRURFRF9SQU5ET01fR0VORVJBVE9SKTtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgJFNlZWRlZFJhbmRvbUdlbmVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gU2VlZGVkUmFuZG9tR2VuZXJhdG9yKHNlZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU0VFREVEX1JBTkRPTV9HRU5FUkFUT1IsXG4gICAgc2VlZDogc2VlZCAlIDIxNDc0ODM2NDdcbiAgfSk7XG59LCBTRUVERURfUkFORE9NLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc2VlZCA9IHN0YXRlLnNlZWQgPSAoc3RhdGUuc2VlZCAqIDExMDM1MTUyNDUgKyAxMjM0NSkgJSAyMTQ3NDgzNjQ3O1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCgoc2VlZCAmIDEwNzM3NDE4MjMpIC8gMTA3Mzc0MTgyMywgZmFsc2UpO1xufSk7XG5cbi8vIGBNYXRoLnNlZWRlZFBSTkdgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2VlZGVkLXJhbmRvbVxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2VlZGVkLXJhbmRvbS9ibG9iLzc4YjgyNTg4MzViNTdmYzIxMDBkMDc2MTUxYWI1MDZiYzMyMDJhZTYvZGVtby5odG1sXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIHNlZWRlZFBSTkc6IGZ1bmN0aW9uIHNlZWRlZFBSTkcoaXQpIHtcbiAgICB2YXIgc2VlZCA9IGFuT2JqZWN0KGl0KS5zZWVkO1xuICAgIGlmICghbnVtYmVySXNGaW5pdGUoc2VlZCkpIHRocm93ICRUeXBlRXJyb3IoU0VFRF9UWVBFX0VSUk9SKTtcbiAgICByZXR1cm4gbmV3ICRTZWVkZWRSYW5kb21HZW5lcmF0b3Ioc2VlZCk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.seeded-prng.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.signbit.js": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.signbit.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\n\n// `Math.signbit` method\n// https://github.com/tc39/proposal-Math.signbit\n$({ target: 'Math', stat: true, forced: true }, {\n signbit: function signbit(x) {\n var n = +x;\n // eslint-disable-next-line no-self-compare -- NaN check\n return n === n && n === 0 ? 1 / n === -Infinity : n < 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnNpZ25iaXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCOztBQUVyQztBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnNpZ25iaXQuanM/OWYyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGguc2lnbmJpdGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1NYXRoLnNpZ25iaXRcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gICAgdmFyIG4gPSAreDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIHJldHVybiBuID09PSBuICYmIG4gPT09IDAgPyAxIC8gbiA9PT0gLUluZmluaXR5IDogbiA8IDA7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.signbit.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.math.umulh.js ": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.math.umulh.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\n\n// `Math.umulh` method\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\n// TODO: Remove from `core-js@4`\n$({ target: 'Math', stat: true, forced: true }, {\n umulh: function umulh(u, v) {\n var UINT16=0 xFFFF;\n var $u=+ u;\n var $v=+ v;\n var u0=$ u & UINT16;\n var v0=$ v & UINT16;\n var u1=$ u>>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnVtdWxoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsSUFBSSwwQ0FBMEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnVtdWxoLmpzPzZiOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBNYXRoLnVtdWxoYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICB1bXVsaDogZnVuY3Rpb24gdW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweEZGRkY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+Pj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+Pj4gMTYpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.math.umulh.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.number.from-string.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.number.from-string.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \"./node_modules/core-js/internals/to-integer-or-infinity.js\");\nvar parseInt = __webpack_require__(/*! ../internals/number-parse-int */ \"./node_modules/core-js/internals/number-parse-int.js\");\n\nvar INVALID_NUMBER_REPRESENTATION = 'Invalid number representation';\nvar INVALID_RADIX = 'Invalid radix';\nvar $RangeError = RangeError;\nvar $SyntaxError = SyntaxError;\nvar $TypeError = TypeError;\nvar valid = /^[\\da-z]+$/;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(valid.exec);\nvar numberToString = uncurryThis(1.0.toString);\nvar stringSlice = uncurryThis(''.slice);\n\n// `Number.fromString` method\n// https://github.com/tc39/proposal-number-fromstring\n$({ target: 'Number', stat: true, forced: true }, {\n fromString: function fromString(string, radix) {\n var sign = 1;\n var R, mathNum;\n if (typeof string != 'string') throw $TypeError(INVALID_NUMBER_REPRESENTATION);\n if (!string.length) throw $SyntaxError(INVALID_NUMBER_REPRESENTATION);\n if (charAt(string, 0) === '-') {\n sign = -1;\n string = stringSlice(string, 1);\n if (!string.length) throw $SyntaxError(INVALID_NUMBER_REPRESENTATION);\n }\n R = radix === undefined ? 10 : toIntegerOrInfinity(radix);\n if (R < 2 || R> 36) throw $RangeError(INVALID_RADIX);\n if (!exec(valid, string) || numberToString(mathNum = parseInt(string, R), R) !== string) {\n throw $SyntaxError(INVALID_NUMBER_REPRESENTATION);\n }\n return sign * mathNum;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5udW1iZXIuZnJvbS1zdHJpbmcuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCwwQkFBMEIsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDdkUsZUFBZSxtQkFBTyxDQUFDLDJGQUErQjs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksNENBQTRDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubnVtYmVyLmZyb20tc3RyaW5nLmpzP2JmM2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgcGFyc2VJbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludCcpO1xuXG52YXIgSU5WQUxJRF9OVU1CRVJfUkVQUkVTRU5UQVRJT04gPSAnSW52YWxpZCBudW1iZXIgcmVwcmVzZW50YXRpb24nO1xudmFyIElOVkFMSURfUkFESVggPSAnSW52YWxpZCByYWRpeCc7XG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgdmFsaWQgPSAvXltcXGRhLXpdKyQvO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKHZhbGlkLmV4ZWMpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuLy8gYE51bWJlci5mcm9tU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW51bWJlci1mcm9tc3RyaW5nXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZnJvbVN0cmluZzogZnVuY3Rpb24gZnJvbVN0cmluZyhzdHJpbmcsIHJhZGl4KSB7XG4gICAgdmFyIHNpZ24gPSAxO1xuICAgIHZhciBSLCBtYXRoTnVtO1xuICAgIGlmICh0eXBlb2Ygc3RyaW5nICE9ICdzdHJpbmcnKSB0aHJvdyAkVHlwZUVycm9yKElOVkFMSURfTlVNQkVSX1JFUFJFU0VOVEFUSU9OKTtcbiAgICBpZiAoIXN0cmluZy5sZW5ndGgpIHRocm93ICRTeW50YXhFcnJvcihJTlZBTElEX05VTUJFUl9SRVBSRVNFTlRBVElPTik7XG4gICAgaWYgKGNoYXJBdChzdHJpbmcsIDApID09PSAnLScpIHtcbiAgICAgIHNpZ24gPSAtMTtcbiAgICAgIHN0cmluZyA9IHN0cmluZ1NsaWNlKHN0cmluZywgMSk7XG4gICAgICBpZiAoIXN0cmluZy5sZW5ndGgpIHRocm93ICRTeW50YXhFcnJvcihJTlZBTElEX05VTUJFUl9SRVBSRVNFTlRBVElPTik7XG4gICAgfVxuICAgIFIgPSByYWRpeCA9PT0gdW5kZWZpbmVkID8gMTAgOiB0b0ludGVnZXJPckluZmluaXR5KHJhZGl4KTtcbiAgICBpZiAoUiA8IDIgfHwgUiA+IDM2KSB0aHJvdyAkUmFuZ2VFcnJvcihJTlZBTElEX1JBRElYKTtcbiAgICBpZiAoIWV4ZWModmFsaWQsIHN0cmluZykgfHwgbnVtYmVyVG9TdHJpbmcobWF0aE51bSA9IHBhcnNlSW50KHN0cmluZywgUiksIFIpICE9PSBzdHJpbmcpIHtcbiAgICAgIHRocm93ICRTeW50YXhFcnJvcihJTlZBTElEX05VTUJFUl9SRVBSRVNFTlRBVElPTik7XG4gICAgfVxuICAgIHJldHVybiBzaWduICogbWF0aE51bTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.number.from-string.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.observable.constructor.js": /*!***********************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.observable.constructor.js ***! \***********************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// https://github.com/tc39/proposal-observable\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar setSpecies = __webpack_require__(/*! ../internals/set-species */ \"./node_modules/core-js/internals/set-species.js\");\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \"./node_modules/core-js/internals/a-callable.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \"./node_modules/core-js/internals/an-instance.js\");\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \"./node_modules/core-js/internals/is-callable.js\");\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \"./node_modules/core-js/internals/is-null-or-undefined.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \"./node_modules/core-js/internals/get-method.js\");\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \"./node_modules/core-js/internals/define-built-in.js\");\nvar defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ \"./node_modules/core-js/internals/define-built-ins.js\");\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \"./node_modules/core-js/internals/define-built-in-accessor.js\");\nvar hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ \"./node_modules/core-js/internals/host-report-errors.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \"./node_modules/core-js/internals/internal-state.js\");\nvar OBSERVABLE_FORCED = __webpack_require__(/*! ../internals/observable-forced */ \"./node_modules/core-js/internals/observable-forced.js\");\n\nvar $$OBSERVABLE = wellKnownSymbol('observable');\nvar OBSERVABLE = 'Observable';\nvar SUBSCRIPTION = 'Subscription';\nvar SUBSCRIPTION_OBSERVER = 'SubscriptionObserver';\nvar getterFor = InternalStateModule.getterFor;\nvar setInternalState = InternalStateModule.set;\nvar getObservableInternalState = getterFor(OBSERVABLE);\nvar getSubscriptionInternalState = getterFor(SUBSCRIPTION);\nvar getSubscriptionObserverInternalState = getterFor(SUBSCRIPTION_OBSERVER);\n\nvar SubscriptionState = function (observer) {\n this.observer = anObject(observer);\n this.cleanup = undefined;\n this.subscriptionObserver = undefined;\n};\n\nSubscriptionState.prototype = {\n type: SUBSCRIPTION,\n clean: function () {\n var cleanup = this.cleanup;\n if (cleanup) {\n this.cleanup = undefined;\n try {\n cleanup();\n } catch (error) {\n hostReportErrors(error);\n }\n }\n },\n close: function () {\n if (!DESCRIPTORS) {\n var subscription = this.facade;\n var subscriptionObserver = this.subscriptionObserver;\n subscription.closed = true;\n if (subscriptionObserver) subscriptionObserver.closed = true;\n } this.observer = undefined;\n },\n isClosed: function () {\n return this.observer === undefined;\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n var subscriptionState = setInternalState(this, new SubscriptionState(observer));\n var start;\n if (!DESCRIPTORS) this.closed = false;\n try {\n if (start = getMethod(observer, 'start')) call(start, observer, this);\n } catch (error) {\n hostReportErrors(error);\n }\n if (subscriptionState.isClosed()) return;\n var subscriptionObserver = subscriptionState.subscriptionObserver = new SubscriptionObserver(subscriptionState);\n try {\n var cleanup = subscriber(subscriptionObserver);\n var subscription = cleanup;\n if (!isNullOrUndefined(cleanup)) subscriptionState.cleanup = isCallable(cleanup.unsubscribe)\n ? function () { subscription.unsubscribe(); }\n : aCallable(cleanup);\n } catch (error) {\n subscriptionObserver.error(error);\n return;\n } if (subscriptionState.isClosed()) subscriptionState.clean();\n};\n\nSubscription.prototype = defineBuiltIns({}, {\n unsubscribe: function unsubscribe() {\n var subscriptionState = getSubscriptionInternalState(this);\n if (!subscriptionState.isClosed()) {\n subscriptionState.close();\n subscriptionState.clean();\n }\n }\n});\n\nif (DESCRIPTORS) defineBuiltInAccessor(Subscription.prototype, 'closed', {\n configurable: true,\n get: function closed() {\n return getSubscriptionInternalState(this).isClosed();\n }\n});\n\nvar SubscriptionObserver = function (subscriptionState) {\n setInternalState(this, {\n type: SUBSCRIPTION_OBSERVER,\n subscriptionState: subscriptionState\n });\n if (!DESCRIPTORS) this.closed = false;\n};\n\nSubscriptionObserver.prototype = defineBuiltIns({}, {\n next: function next(value) {\n var subscriptionState = getSubscriptionObserverInternalState(this).subscriptionState;\n if (!subscriptionState.isClosed()) {\n var observer = subscriptionState.observer;\n try {\n var nextMethod = getMethod(observer, 'next');\n if (nextMethod) call(nextMethod, observer, value);\n } catch (error) {\n hostReportErrors(error);\n }\n }\n },\n error: function error(value) {\n var subscriptionState = getSubscriptionObserverInternalState(this).subscriptionState;\n if (!subscriptionState.isClosed()) {\n var observer = subscriptionState.observer;\n subscriptionState.close();\n try {\n var errorMethod = getMethod(observer, 'error');\n if (errorMethod) call(errorMethod, observer, value);\n else hostReportErrors(value);\n } catch (err) {\n hostReportErrors(err);\n } subscriptionState.clean();\n }\n },\n complete: function complete() {\n var subscriptionState = getSubscriptionObserverInternalState(this).subscriptionState;\n if (!subscriptionState.isClosed()) {\n var observer = subscriptionState.observer;\n subscriptionState.close();\n try {\n var completeMethod = getMethod(observer, 'complete');\n if (completeMethod) call(completeMethod, observer);\n } catch (error) {\n hostReportErrors(error);\n } subscriptionState.clean();\n }\n }\n});\n\nif (DESCRIPTORS) defineBuiltInAccessor(SubscriptionObserver.prototype, 'closed', {\n configurable: true,\n get: function closed() {\n return getSubscriptionObserverInternalState(this).subscriptionState.isClosed();\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, ObservablePrototype);\n setInternalState(this, {\n type: OBSERVABLE,\n subscriber: aCallable(subscriber)\n });\n};\n\nvar ObservablePrototype = $Observable.prototype;\n\ndefineBuiltIns(ObservablePrototype, {\n subscribe: function subscribe(observer) {\n var length = arguments.length;\n return new Subscription(isCallable(observer) ? {\n next: observer,\n error: length > 1 ? arguments[1] : undefined,\n complete: length > 2 ? arguments[2] : undefined\n } : isObject(observer) ? observer : {}, getObservableInternalState(this).subscriber);\n }\n});\n\ndefineBuiltIn(ObservablePrototype, $$OBSERVABLE, function () { return this; });\n\n$({ global: true, constructor: true, forced: OBSERVABLE_FORCED }, {\n Observable: $Observable\n});\n\nsetSpecies(OBSERVABLE);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5vYnNlcnZhYmxlLmNvbnN0cnVjdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELGlCQUFpQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNuRCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxpQkFBaUIsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbkQsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELHdCQUF3QixtQkFBTyxDQUFDLG1HQUFtQztBQUNuRSxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLGdCQUFnQixtQkFBTyxDQUFDLCtFQUF5QjtBQUNqRCxvQkFBb0IsbUJBQU8sQ0FBQyx5RkFBOEI7QUFDMUQscUJBQXFCLG1CQUFPLENBQUMsMkZBQStCO0FBQzVELDRCQUE0QixtQkFBTyxDQUFDLDJHQUF1QztBQUMzRSx1QkFBdUIsbUJBQU8sQ0FBQywrRkFBaUM7QUFDaEUsc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELDBCQUEwQixtQkFBTyxDQUFDLHVGQUE2QjtBQUMvRCx3QkFBd0IsbUJBQU8sQ0FBQyw2RkFBZ0M7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvQ0FBb0M7QUFDMUM7QUFDQSxDQUFDOztBQUVELCtEQUErRCxjQUFjOztBQUU3RSxJQUFJLDREQUE0RDtBQUNoRTtBQUNBLENBQUM7O0FBRUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5vYnNlcnZhYmxlLmNvbnN0cnVjdG9yLmpzPzMxM2EiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgT0JTRVJWQUJMRV9GT1JDRUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JzZXJ2YWJsZS1mb3JjZWQnKTtcblxudmFyICQkT0JTRVJWQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnb2JzZXJ2YWJsZScpO1xudmFyIE9CU0VSVkFCTEUgPSAnT2JzZXJ2YWJsZSc7XG52YXIgU1VCU0NSSVBUSU9OID0gJ1N1YnNjcmlwdGlvbic7XG52YXIgU1VCU0NSSVBUSU9OX09CU0VSVkVSID0gJ1N1YnNjcmlwdGlvbk9ic2VydmVyJztcbnZhciBnZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0T2JzZXJ2YWJsZUludGVybmFsU3RhdGUgPSBnZXR0ZXJGb3IoT0JTRVJWQUJMRSk7XG52YXIgZ2V0U3Vic2NyaXB0aW9uSW50ZXJuYWxTdGF0ZSA9IGdldHRlckZvcihTVUJTQ1JJUFRJT04pO1xudmFyIGdldFN1YnNjcmlwdGlvbk9ic2VydmVySW50ZXJuYWxTdGF0ZSA9IGdldHRlckZvcihTVUJTQ1JJUFRJT05fT0JTRVJWRVIpO1xuXG52YXIgU3Vic2NyaXB0aW9uU3RhdGUgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgdGhpcy5vYnNlcnZlciA9IGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICB0aGlzLnN1YnNjcmlwdGlvbk9ic2VydmVyID0gdW5kZWZpbmVkO1xufTtcblxuU3Vic2NyaXB0aW9uU3RhdGUucHJvdG90eXBlID0ge1xuICB0eXBlOiBTVUJTQ1JJUFRJT04sXG4gIGNsZWFuOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNsZWFudXAgPSB0aGlzLmNsZWFudXA7XG4gICAgaWYgKGNsZWFudXApIHtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhvc3RSZXBvcnRFcnJvcnMoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5mYWNhZGU7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSB0aGlzLnN1YnNjcmlwdGlvbk9ic2VydmVyO1xuICAgICAgc3Vic2NyaXB0aW9uLmNsb3NlZCA9IHRydWU7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uT2JzZXJ2ZXIpIHN1YnNjcmlwdGlvbk9ic2VydmVyLmNsb3NlZCA9IHRydWU7XG4gICAgfSB0aGlzLm9ic2VydmVyID0gdW5kZWZpbmVkO1xuICB9LFxuICBpc0Nsb3NlZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVyID09PSB1bmRlZmluZWQ7XG4gIH1cbn07XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgdmFyIHN1YnNjcmlwdGlvblN0YXRlID0gc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCBuZXcgU3Vic2NyaXB0aW9uU3RhdGUob2JzZXJ2ZXIpKTtcbiAgdmFyIHN0YXJ0O1xuICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGlmIChzdGFydCA9IGdldE1ldGhvZChvYnNlcnZlciwgJ3N0YXJ0JykpIGNhbGwoc3RhcnQsIG9ic2VydmVyLCB0aGlzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBob3N0UmVwb3J0RXJyb3JzKGVycm9yKTtcbiAgfVxuICBpZiAoc3Vic2NyaXB0aW9uU3RhdGUuaXNDbG9zZWQoKSkgcmV0dXJuO1xuICB2YXIgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb25TdGF0ZS5zdWJzY3JpcHRpb25PYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcihzdWJzY3JpcHRpb25TdGF0ZSk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKHN1YnNjcmlwdGlvbk9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGNsZWFudXApKSBzdWJzY3JpcHRpb25TdGF0ZS5jbGVhbnVwID0gaXNDYWxsYWJsZShjbGVhbnVwLnVuc3Vic2NyaWJlKVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9XG4gICAgICA6IGFDYWxsYWJsZShjbGVhbnVwKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzdWJzY3JpcHRpb25PYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9IGlmIChzdWJzY3JpcHRpb25TdGF0ZS5pc0Nsb3NlZCgpKSBzdWJzY3JpcHRpb25TdGF0ZS5jbGVhbigpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW5zKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uU3RhdGUgPSBnZXRTdWJzY3JpcHRpb25JbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIGlmICghc3Vic2NyaXB0aW9uU3RhdGUuaXNDbG9zZWQoKSkge1xuICAgICAgc3Vic2NyaXB0aW9uU3RhdGUuY2xvc2UoKTtcbiAgICAgIHN1YnNjcmlwdGlvblN0YXRlLmNsZWFuKCk7XG4gICAgfVxuICB9XG59KTtcblxuaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3Vic2NyaXB0aW9uLnByb3RvdHlwZSwgJ2Nsb3NlZCcsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGNsb3NlZCgpIHtcbiAgICByZXR1cm4gZ2V0U3Vic2NyaXB0aW9uSW50ZXJuYWxTdGF0ZSh0aGlzKS5pc0Nsb3NlZCgpO1xuICB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvblN0YXRlKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNVQlNDUklQVElPTl9PQlNFUlZFUixcbiAgICBzdWJzY3JpcHRpb25TdGF0ZTogc3Vic2NyaXB0aW9uU3RhdGVcbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuY2xvc2VkID0gZmFsc2U7XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSBkZWZpbmVCdWlsdElucyh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvblN0YXRlID0gZ2V0U3Vic2NyaXB0aW9uT2JzZXJ2ZXJJbnRlcm5hbFN0YXRlKHRoaXMpLnN1YnNjcmlwdGlvblN0YXRlO1xuICAgIGlmICghc3Vic2NyaXB0aW9uU3RhdGUuaXNDbG9zZWQoKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uU3RhdGUub2JzZXJ2ZXI7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dE1ldGhvZCA9IGdldE1ldGhvZChvYnNlcnZlciwgJ25leHQnKTtcbiAgICAgICAgaWYgKG5leHRNZXRob2QpIGNhbGwobmV4dE1ldGhvZCwgb2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhvc3RSZXBvcnRFcnJvcnMoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvblN0YXRlID0gZ2V0U3Vic2NyaXB0aW9uT2JzZXJ2ZXJJbnRlcm5hbFN0YXRlKHRoaXMpLnN1YnNjcmlwdGlvblN0YXRlO1xuICAgIGlmICghc3Vic2NyaXB0aW9uU3RhdGUuaXNDbG9zZWQoKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uU3RhdGUub2JzZXJ2ZXI7XG4gICAgICBzdWJzY3JpcHRpb25TdGF0ZS5jbG9zZSgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGVycm9yTWV0aG9kID0gZ2V0TWV0aG9kKG9ic2VydmVyLCAnZXJyb3InKTtcbiAgICAgICAgaWYgKGVycm9yTWV0aG9kKSBjYWxsKGVycm9yTWV0aG9kLCBvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgICBlbHNlIGhvc3RSZXBvcnRFcnJvcnModmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhvc3RSZXBvcnRFcnJvcnMoZXJyKTtcbiAgICAgIH0gc3Vic2NyaXB0aW9uU3RhdGUuY2xlYW4oKTtcbiAgICB9XG4gIH0sXG4gIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uU3RhdGUgPSBnZXRTdWJzY3JpcHRpb25PYnNlcnZlckludGVybmFsU3RhdGUodGhpcykuc3Vic2NyaXB0aW9uU3RhdGU7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25TdGF0ZS5pc0Nsb3NlZCgpKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb25TdGF0ZS5vYnNlcnZlcjtcbiAgICAgIHN1YnNjcmlwdGlvblN0YXRlLmNsb3NlKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgY29tcGxldGVNZXRob2QgPSBnZXRNZXRob2Qob2JzZXJ2ZXIsICdjb21wbGV0ZScpO1xuICAgICAgICBpZiAoY29tcGxldGVNZXRob2QpIGNhbGwoY29tcGxldGVNZXRob2QsIG9ic2VydmVyKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhvc3RSZXBvcnRFcnJvcnMoZXJyb3IpO1xuICAgICAgfSBzdWJzY3JpcHRpb25TdGF0ZS5jbGVhbigpO1xuICAgIH1cbiAgfVxufSk7XG5cbmlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSwgJ2Nsb3NlZCcsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGNsb3NlZCgpIHtcbiAgICByZXR1cm4gZ2V0U3Vic2NyaXB0aW9uT2JzZXJ2ZXJJbnRlcm5hbFN0YXRlKHRoaXMpLnN1YnNjcmlwdGlvblN0YXRlLmlzQ2xvc2VkKCk7XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBPYnNlcnZhYmxlUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogT0JTRVJWQUJMRSxcbiAgICBzdWJzY3JpYmVyOiBhQ2FsbGFibGUoc3Vic2NyaWJlcilcbiAgfSk7XG59O1xuXG52YXIgT2JzZXJ2YWJsZVByb3RvdHlwZSA9ICRPYnNlcnZhYmxlLnByb3RvdHlwZTtcblxuZGVmaW5lQnVpbHRJbnMoT2JzZXJ2YWJsZVByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGlzQ2FsbGFibGUob2JzZXJ2ZXIpID8ge1xuICAgICAgbmV4dDogb2JzZXJ2ZXIsXG4gICAgICBlcnJvcjogbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbXBsZXRlOiBsZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkXG4gICAgfSA6IGlzT2JqZWN0KG9ic2VydmVyKSA/IG9ic2VydmVyIDoge30sIGdldE9ic2VydmFibGVJbnRlcm5hbFN0YXRlKHRoaXMpLnN1YnNjcmliZXIpO1xuICB9XG59KTtcblxuZGVmaW5lQnVpbHRJbihPYnNlcnZhYmxlUHJvdG90eXBlLCAkJE9CU0VSVkFCTEUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiBPQlNFUlZBQkxFX0ZPUkNFRCB9LCB7XG4gIE9ic2VydmFibGU6ICRPYnNlcnZhYmxlXG59KTtcblxuc2V0U3BlY2llcyhPQlNFUlZBQkxFKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.observable.constructor.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.observable.from.js": /*!****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.observable.from.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \"./node_modules/core-js/internals/get-built-in.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar isConstructor = __webpack_require__(/*! ../internals/is-constructor */ \"./node_modules/core-js/internals/is-constructor.js\");\nvar getIterator = __webpack_require__(/*! ../internals/get-iterator */ \"./node_modules/core-js/internals/get-iterator.js\");\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \"./node_modules/core-js/internals/get-method.js\");\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \"./node_modules/core-js/internals/iterate.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\nvar OBSERVABLE_FORCED = __webpack_require__(/*! ../internals/observable-forced */ \"./node_modules/core-js/internals/observable-forced.js\");\n\nvar $$OBSERVABLE = wellKnownSymbol('observable');\n\n// `Observable.from` method\n// https://github.com/tc39/proposal-observable\n$({ target: 'Observable', stat: true, forced: OBSERVABLE_FORCED }, {\n from: function from(x) {\n var C = isConstructor(this) ? this : getBuiltIn('Observable');\n var observableMethod = getMethod(anObject(x), $$OBSERVABLE);\n if (observableMethod) {\n var observable = anObject(call(observableMethod, x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n var iterator = getIterator(x);\n return new C(function (observer) {\n iterate(iterator, function (it, stop) {\n observer.next(it);\n if (observer.closed) return stop();\n }, { IS_ITERATOR: true, INTERRUPTED: true });\n observer.complete();\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5vYnNlcnZhYmxlLmZyb20uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNwRCxXQUFXLG1CQUFPLENBQUMscUZBQTRCO0FBQy9DLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0Msb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3pELGtCQUFrQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNyRCxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsY0FBYyxtQkFBTyxDQUFDLHlFQUFzQjtBQUM1QyxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7QUFDOUQsd0JBQXdCLG1CQUFPLENBQUMsNkZBQWdDOztBQUVoRTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSw2REFBNkQ7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFJLHNDQUFzQztBQUNqRDtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5vYnNlcnZhYmxlLmZyb20uanM/ODU1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIE9CU0VSVkFCTEVfRk9SQ0VEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29ic2VydmFibGUtZm9yY2VkJyk7XG5cbnZhciAkJE9CU0VSVkFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcblxuLy8gYE9ic2VydmFibGUuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG4kKHsgdGFyZ2V0OiAnT2JzZXJ2YWJsZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogT0JTRVJWQUJMRV9GT1JDRUQgfSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IGlzQ29uc3RydWN0b3IodGhpcykgPyB0aGlzIDogZ2V0QnVpbHRJbignT2JzZXJ2YWJsZScpO1xuICAgIHZhciBvYnNlcnZhYmxlTWV0aG9kID0gZ2V0TWV0aG9kKGFuT2JqZWN0KHgpLCAkJE9CU0VSVkFCTEUpO1xuICAgIGlmIChvYnNlcnZhYmxlTWV0aG9kKSB7XG4gICAgICB2YXIgb2JzZXJ2YWJsZSA9IGFuT2JqZWN0KGNhbGwob2JzZXJ2YWJsZU1ldGhvZCwgeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoeCk7XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKGl0LCBzdG9wKSB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm4gc3RvcCgpO1xuICAgICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSk7XG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.observable.from.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.observable.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.observable.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// TODO: Remove this module from `core-js@4` since it's split to modules listed below\n__webpack_require__(/*! ../modules/esnext.observable.constructor */ \"./node_modules/core-js/modules/esnext.observable.constructor.js\");\n__webpack_require__(/*! ../modules/esnext.observable.from */ \"./node_modules/core-js/modules/esnext.observable.from.js\");\n__webpack_require__(/*! ../modules/esnext.observable.of */ \"./node_modules/core-js/modules/esnext.observable.of.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5vYnNlcnZhYmxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLGlIQUEwQztBQUNsRCxtQkFBTyxDQUFDLG1HQUFtQztBQUMzQyxtQkFBTyxDQUFDLCtGQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm9ic2VydmFibGUuanM/YTVlYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzbmV4dC5vYnNlcnZhYmxlLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzbmV4dC5vYnNlcnZhYmxlLmZyb20nKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXNuZXh0Lm9ic2VydmFibGUub2YnKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.observable.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.observable.of.js": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.observable.of.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \"./node_modules/core-js/internals/get-built-in.js\");\nvar isConstructor = __webpack_require__(/*! ../internals/is-constructor */ \"./node_modules/core-js/internals/is-constructor.js\");\nvar OBSERVABLE_FORCED = __webpack_require__(/*! ../internals/observable-forced */ \"./node_modules/core-js/internals/observable-forced.js\");\n\nvar Array = getBuiltIn('Array');\n\n// `Observable.of` method\n// https://github.com/tc39/proposal-observable\n$({ target: 'Observable', stat: true, forced: OBSERVABLE_FORCED }, {\n of: function of() {\n var C = isConstructor(this) ? this : getBuiltIn('Observable');\n var length = arguments.length;\n var items = Array(length);\n var index = 0;\n while (index < length) items[index]=a rguments[index++];\n return new C(function (observer) {\n for (var i=0 ; i < length; i++) {\n observer.next(items[i]);\n if (observer.closed) return;\n } observer.complete();\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5vYnNlcnZhYmxlLm9mLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxtRkFBMkI7QUFDcEQsb0JBQW9CLG1CQUFPLENBQUMsdUZBQTZCO0FBQ3pELHdCQUF3QixtQkFBTyxDQUFDLDZGQUFnQzs7QUFFaEU7O0FBRUE7QUFDQTtBQUNBLElBQUksNkRBQTZEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFlBQVk7QUFDbEM7QUFDQTtBQUNBLFFBQVE7QUFDUixLQUFLO0FBQ0w7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQub2JzZXJ2YWJsZS5vZi5qcz81NDhmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIE9CU0VSVkFCTEVfRk9SQ0VEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29ic2VydmFibGUtZm9yY2VkJyk7XG5cbnZhciBBcnJheSA9IGdldEJ1aWx0SW4oJ0FycmF5Jyk7XG5cbi8vIGBPYnNlcnZhYmxlLm9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbiQoeyB0YXJnZXQ6ICdPYnNlcnZhYmxlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPQlNFUlZBQkxFX0ZPUkNFRCB9LCB7XG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgQyA9IGlzQ29uc3RydWN0b3IodGhpcykgPyB0aGlzIDogZ2V0QnVpbHRJbignT2JzZXJ2YWJsZScpO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpdGVtcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIGl0ZW1zW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbaV0pO1xuICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.observable.of.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.promise.try.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.promise.try.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar newPromiseCapabilityModule=_ _webpack_require__(/*! ../internals/new-promise-capability */ \ "./node_modules/core-js/internals/new-promise-capability.js\");\nvar perform=_ _webpack_require__(/*! ../internals/perform */ \ "./node_modules/core-js/internals/perform.js\");\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true, forced: true }, {\n 'try': function (callbackfn) {\n var promiseCapability=n ewPromiseCapabilityModule.f(this);\n var result=p erform(callbackfn);\n (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n return promiseCapability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxpQ0FBaUMsbUJBQU8sQ0FBQyx1R0FBcUM7QUFDOUUsY0FBYyxtQkFBTyxDQUFDLHlFQUFzQjs7QUFFNUM7QUFDQTtBQUNBLElBQUksNkNBQTZDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeS5qcz85MDI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG5cbi8vIGBQcm9taXNlLnRyeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAgIChyZXN1bHQuZXJyb3IgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.promise.try.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.define-metadata.js ": /*!************************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.define-metadata.js ***! \************************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\n\nvar toMetadataKey=R eflectMetadataModule.toKey;\nvar ordinaryDefineOwnMetadata=R eflectMetadataModule.set;\n\n// `Reflect.defineMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n defineMetadata: function defineMetadata(metadataKey, metadataValue, target /* , targetKey */) {\n var targetKey=a rguments.length < 4 ? undefined : toMetadataKey(arguments[3]);\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), targetKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyw0QkFBNEIsbUJBQU8sQ0FBQywyRkFBK0I7QUFDbkUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZmJlYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5zZXQ7XG5cbi8vIGBSZWZsZWN0LmRlZmluZU1ldGFkYXRhYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICAgIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHVuZGVmaW5lZCA6IHRvTWV0YWRhdGFLZXkoYXJndW1lbnRzWzNdKTtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.define-metadata.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.delete-metadata.js ": /*!************************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.delete-metadata.js ***! \************************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\n\nvar toMetadataKey=R eflectMetadataModule.toKey;\nvar getOrCreateMetadataMap=R eflectMetadataModule.getMap;\nvar store=R eflectMetadataModule.store;\n\n// `Reflect.deleteMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey=a rguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n var metadataMap=g etOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap===u ndefined || !metadataMap[ 'delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata=s tore.get(target);\n targetMetadata[ 'delete'](targetKey);\n return !!targetMetadata.size || store[ 'delete'](target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsNEJBQTRCLG1CQUFPLENBQUMsMkZBQStCO0FBQ25FLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRS9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzPzYzODAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5nZXRNYXA7XG52YXIgc3RvcmUgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuc3RvcmU7XG5cbi8vIGBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICAgIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YWRhdGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICAgIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICAgIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICAgIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICAgIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.delete-metadata.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js ": /*!**************************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar uncurryThis=_ _webpack_require__(/*! ../internals/function-uncurry-this */ \ "./node_modules/core-js/internals/function-uncurry-this.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\nvar getPrototypeOf=_ _webpack_require__(/*! ../internals/object-get-prototype-of */ \ "./node_modules/core-js/internals/object-get-prototype-of.js\");\nvar $arrayUniqueBy=_ _webpack_require__(/*! ../internals/array-unique-by */ \ "./node_modules/core-js/internals/array-unique-by.js\");\n\nvar arrayUniqueBy=u ncurryThis($arrayUniqueBy);\nvar concat=u ncurryThis([].concat);\nvar ordinaryOwnMetadataKeys=R eflectMetadataModule.keys;\nvar toMetadataKey=R eflectMetadataModule.toKey;\n\nvar ordinaryMetadataKeys=f unction (O, P) {\n var oKeys=o rdinaryOwnMetadataKeys(O, P);\n var parent=g etPrototypeOf(O);\n if (parent===n ull) return oKeys;\n var pKeys=o rdinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? arrayUniqueBy(concat(oKeys, pKeys)) : pKeys : oKeys;\n};\n\n// `Reflect.getMetadataKeys` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n var targetKey=a rguments.length < 2 ? undefined : toMetadataKey(arguments[1]);\n return ordinaryMetadataKeys(anObject(target), targetKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLHFHQUFvQztBQUM5RCw0QkFBNEIsbUJBQU8sQ0FBQywyRkFBK0I7QUFDbkUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxxQkFBcUIsbUJBQU8sQ0FBQyx5R0FBc0M7QUFDbkUscUJBQXFCLG1CQUFPLENBQUMseUZBQThCOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iZDk4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBSZWZsZWN0TWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgJGFycmF5VW5pcXVlQnkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktdW5pcXVlLWJ5Jyk7XG5cbnZhciBhcnJheVVuaXF1ZUJ5ID0gdW5jdXJyeVRoaXMoJGFycmF5VW5pcXVlQnkpO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUua2V5cztcbnZhciB0b01ldGFkYXRhS2V5ID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnRvS2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBhcnJheVVuaXF1ZUJ5KGNvbmNhdChvS2V5cywgcEtleXMpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG4vLyBgUmVmbGVjdC5nZXRNZXRhZGF0YUtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICAgIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YWRhdGFLZXkoYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5KTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.get-metadata.js ": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.get-metadata.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\nvar getPrototypeOf=_ _webpack_require__(/*! ../internals/object-get-prototype-of */ \ "./node_modules/core-js/internals/object-get-prototype-of.js\");\n\nvar ordinaryHasOwnMetadata=R eflectMetadataModule.has;\nvar ordinaryGetOwnMetadata=R eflectMetadataModule.get;\nvar toMetadataKey=R eflectMetadataModule.toKey;\n\nvar ordinaryGetMetadata=f unction (MetadataKey, O, P) {\n var hasOwn=o rdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent=g etPrototypeOf(O);\n return parent !==n ull ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\n// `Reflect.getMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n var targetKey=a rguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n return ordinaryGetMetadata(metadataKey, anObject(target), targetKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmdldC1tZXRhZGF0YS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyw0QkFBNEIsbUJBQU8sQ0FBQywyRkFBK0I7QUFDbkUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxxQkFBcUIsbUJBQU8sQ0FBQyx5R0FBc0M7O0FBRW5FO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksK0JBQStCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzPzY2YzEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuZ2V0O1xudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxuLy8gYFJlZmxlY3QuZ2V0TWV0YWRhdGFgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMl0pO1xuICAgIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.get-metadata.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js ": /*!******************************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js ***! \******************************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\n\nvar ordinaryOwnMetadataKeys=R eflectMetadataModule.keys;\nvar toMetadataKey=R eflectMetadataModule.toKey;\n\n// `Reflect.getOwnMetadataKeys` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n var targetKey=a rguments.length < 2 ? undefined : toMetadataKey(arguments[1]);\n return ordinaryOwnMetadataKeys(anObject(target), targetKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyw0QkFBNEIsbUJBQU8sQ0FBQywyRkFBK0I7QUFDbkUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/YjEwZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLmtleXM7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxuLy8gYFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFkYXRhS2V5KGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.get-own-metadata.js ": /*!*************************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.get-own-metadata.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\n\nvar ordinaryGetOwnMetadata=R eflectMetadataModule.get;\nvar toMetadataKey=R eflectMetadataModule.toKey;\n\n// `Reflect.getOwnMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n var targetKey=a rguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n return ordinaryGetOwnMetadata(metadataKey, anObject(target), targetKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsNEJBQTRCLG1CQUFPLENBQUMsMkZBQStCO0FBQ25FLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksK0JBQStCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS5qcz9lNmJkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBSZWZsZWN0TWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5nZXQ7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxuLy8gYFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMl0pO1xuICAgIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.get-own-metadata.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.has-metadata.js ": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.has-metadata.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\nvar getPrototypeOf=_ _webpack_require__(/*! ../internals/object-get-prototype-of */ \ "./node_modules/core-js/internals/object-get-prototype-of.js\");\n\nvar ordinaryHasOwnMetadata=R eflectMetadataModule.has;\nvar toMetadataKey=R eflectMetadataModule.toKey;\n\nvar ordinaryHasMetadata=f unction (MetadataKey, O, P) {\n var hasOwn=o rdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent=g etPrototypeOf(O);\n return parent !==n ull ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\n// `Reflect.hasMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n var targetKey=a rguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n return ordinaryHasMetadata(metadataKey, anObject(target), targetKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyw0QkFBNEIsbUJBQU8sQ0FBQywyRkFBK0I7QUFDbkUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxxQkFBcUIsbUJBQU8sQ0FBQyx5R0FBc0M7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLCtCQUErQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcz82ZGQ3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBSZWZsZWN0TWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG5cbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLmhhcztcbnZhciB0b01ldGFkYXRhS2V5ID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnRvS2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG4vLyBgUmVmbGVjdC5oYXNNZXRhZGF0YWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmJ1Y2t0b24vcmVmbGVjdC1tZXRhZGF0YVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFkYXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gICAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.has-metadata.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.has-own-metadata.js ": /*!*************************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.has-own-metadata.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove from `core-js@4`\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\n\nvar ordinaryHasOwnMetadata=R eflectMetadataModule.has;\nvar toMetadataKey=R eflectMetadataModule.toKey;\n\n// `Reflect.hasOwnMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n var targetKey=a rguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n return ordinaryHasOwnMetadata(metadataKey, anObject(target), targetKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsNEJBQTRCLG1CQUFPLENBQUMsMkZBQStCO0FBQ25FLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksK0JBQStCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcz8wMzA4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBSZWZsZWN0TWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5oYXM7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxuLy8gYFJlZmxlY3QuaGFzT3duTWV0YWRhdGFgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMl0pO1xuICAgIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.has-own-metadata.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.reflect.metadata.js ": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.reflect.metadata.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar ReflectMetadataModule=_ _webpack_require__(/*! ../internals/reflect-metadata */ \ "./node_modules/core-js/internals/reflect-metadata.js\");\nvar anObject=_ _webpack_require__(/*! ../internals/an-object */ \ "./node_modules/core-js/internals/an-object.js\");\n\nvar toMetadataKey=R eflectMetadataModule.toKey;\nvar ordinaryDefineOwnMetadata=R eflectMetadataModule.set;\n\n// `Reflect.metadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, key) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetadataKey(key));\n };\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyw0QkFBNEIsbUJBQU8sQ0FBQywyRkFBK0I7QUFDbkUsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0Lm1ldGFkYXRhLmpzP2FhMDEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5zZXQ7XG5cbi8vIGBSZWZsZWN0Lm1ldGFkYXRhYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwga2V5KSB7XG4gICAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFkYXRhS2V5KGtleSkpO1xuICAgIH07XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.reflect.metadata.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.add-all.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.add-all.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar aSet=_ _webpack_require__(/*! ../internals/a-set */ \ "./node_modules/core-js/internals/a-set.js\");\nvar add=( __webpack_require__(/*! ../internals/set-helpers */ \ "./node_modules/core-js/internals/set-helpers.js\").add);\n\n// `Set.prototype.addAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n addAll: function addAll(/* ...elements */) {\n var set=a Set(this);\n for (var k=0 , len=a rguments.length; k < len; k++) {\n add(set, arguments[k]);\n } return set;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuYWRkLWFsbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxVQUFVLDRHQUF1Qzs7QUFFakQ7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQSw0Q0FBNEMsU0FBUztBQUNyRDtBQUNBLE1BQU07QUFDTjtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuYWRkLWFsbC5qcz9lM2RmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG5cbi8vIGBTZXQucHJvdG90eXBlLmFkZEFsbGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgYWRkQWxsOiBmdW5jdGlvbiBhZGRBbGwoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgICB2YXIgc2V0ID0gYVNldCh0aGlzKTtcbiAgICBmb3IgKHZhciBrID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgICBhZGQoc2V0LCBhcmd1bWVudHNba10pO1xuICAgIH0gcmV0dXJuIHNldDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.add-all.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.delete-all.js ": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.delete-all.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar aSet=_ _webpack_require__(/*! ../internals/a-set */ \ "./node_modules/core-js/internals/a-set.js\");\nvar remove=( __webpack_require__(/*! ../internals/set-helpers */ \ "./node_modules/core-js/internals/set-helpers.js\").remove);\n\n// `Set.prototype.deleteAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n deleteAll: function deleteAll(/* ...elements */) {\n var collection=a Set(this);\n var allDeleted=t rue;\n var wasDeleted;\n for (var k=0 , len=a rguments.length; k < len; k++) {\n wasDeleted=r emove(collection, arguments[k]);\n allDeleted=a llDeleted && wasDeleted;\n } return !!allDeleted;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGVsZXRlLWFsbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxhQUFhLCtHQUEwQzs7QUFFdkQ7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFNBQVM7QUFDckQ7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGVsZXRlLWFsbC5qcz8wMTVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciByZW1vdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5yZW1vdmU7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRlbGV0ZUFsbGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZGVsZXRlQWxsOiBmdW5jdGlvbiBkZWxldGVBbGwoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgICB2YXIgY29sbGVjdGlvbiA9IGFTZXQodGhpcyk7XG4gICAgdmFyIGFsbERlbGV0ZWQgPSB0cnVlO1xuICAgIHZhciB3YXNEZWxldGVkO1xuICAgIGZvciAodmFyIGsgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgIHdhc0RlbGV0ZWQgPSByZW1vdmUoY29sbGVjdGlvbiwgYXJndW1lbnRzW2tdKTtcbiAgICAgIGFsbERlbGV0ZWQgPSBhbGxEZWxldGVkICYmIHdhc0RlbGV0ZWQ7XG4gICAgfSByZXR1cm4gISFhbGxEZWxldGVkO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.delete-all.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.difference.js ": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.difference.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar call=_ _webpack_require__(/*! ../internals/function-call */ \ "./node_modules/core-js/internals/function-call.js\");\nvar toSetLike=_ _webpack_require__(/*! ../internals/to-set-like */ \ "./node_modules/core-js/internals/to-set-like.js\");\nvar $difference=_ _webpack_require__(/*! ../internals/set-difference */ \ "./node_modules/core-js/internals/set-difference.js\");\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\n// TODO: Obsolete version, remove from `core-js@4`\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n difference: function difference(other) {\n return call($difference, this, toSetLike(other));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFGQUE0QjtBQUMvQyxnQkFBZ0IsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbEQsa0JBQWtCLG1CQUFPLENBQUMsdUZBQTZCOztBQUV2RDtBQUNBO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRpZmZlcmVuY2UuanM/ODVjYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b1NldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc2V0LWxpa2UnKTtcbnZhciAkZGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZGlmZmVyZW5jZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4vLyBUT0RPOiBPYnNvbGV0ZSB2ZXJzaW9uLCByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBkaWZmZXJlbmNlOiBmdW5jdGlvbiBkaWZmZXJlbmNlKG90aGVyKSB7XG4gICAgcmV0dXJuIGNhbGwoJGRpZmZlcmVuY2UsIHRoaXMsIHRvU2V0TGlrZShvdGhlcikpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.difference.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.every.js ": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.every.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar bind=_ _webpack_require__(/*! ../internals/function-bind-context */ \ "./node_modules/core-js/internals/function-bind-context.js\");\nvar aSet=_ _webpack_require__(/*! ../internals/a-set */ \ "./node_modules/core-js/internals/a-set.js\");\nvar iterate=_ _webpack_require__(/*! ../internals/set-iterate */ \ "./node_modules/core-js/internals/set-iterate.js\");\n\n// `Set.prototype.every` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n every: function every(callbackfn /* , thisArg */) {\n var set=a Set(this);\n var boundFunction=b ind(callbackfn, arguments.length> 1 ? arguments[1] : undefined);\n return iterate(set, function (value) {\n if (!boundFunction(value, value, set)) return false;\n }, true) !== false;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZXZlcnkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxR0FBb0M7QUFDdkQsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDtBQUNBO0FBQ0EsSUFBSSxzREFBc0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZXZlcnkuanM/NzRkNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgc2V0ID0gYVNldCh0aGlzKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAoIWJvdW5kRnVuY3Rpb24odmFsdWUsIHZhbHVlLCBzZXQpKSByZXR1cm4gZmFsc2U7XG4gICAgfSwgdHJ1ZSkgIT09IGZhbHNlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.every.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.filter.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.filter.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar aSet = __webpack_require__(/*! ../internals/a-set */ \"./node_modules/core-js/internals/a-set.js\");\nvar SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ \"./node_modules/core-js/internals/set-helpers.js\");\nvar iterate = __webpack_require__(/*! ../internals/set-iterate */ \"./node_modules/core-js/internals/set-iterate.js\");\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\n// `Set.prototype.filter` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n filter: function filter(callbackfn /* , thisArg */) {\n var set = aSet(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newSet = new Set();\n iterate(set, function (value) {\n if (boundFunction(value, value, set)) add(newSet, value);\n });\n return newSet;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZmlsdGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMscUdBQW9DO0FBQ3ZELFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5maWx0ZXIuanM/ZGVlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbi8vIGBTZXQucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgc2V0ID0gYVNldCh0aGlzKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHZhciBuZXdTZXQgPSBuZXcgU2V0KCk7XG4gICAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKGJvdW5kRnVuY3Rpb24odmFsdWUsIHZhbHVlLCBzZXQpKSBhZGQobmV3U2V0LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld1NldDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.filter.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.find.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.find.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar aSet = __webpack_require__(/*! ../internals/a-set */ \"./node_modules/core-js/internals/a-set.js\");\nvar iterate = __webpack_require__(/*! ../internals/set-iterate */ \"./node_modules/core-js/internals/set-iterate.js\");\n\n// `Set.prototype.find` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n find: function find(callbackfn /* , thisArg */) {\n var set = aSet(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var result = iterate(set, function (value) {\n if (boundFunction(value, value, set)) return { value: value };\n }, true);\n return result && result.value;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZmluZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFHQUFvQztBQUN2RCxXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZmluZC5qcz9iNjI4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBzZXQgPSBhU2V0KHRoaXMpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyIHJlc3VsdCA9IGl0ZXJhdGUoc2V0LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChib3VuZEZ1bmN0aW9uKHZhbHVlLCB2YWx1ZSwgc2V0KSkgcmV0dXJuIHsgdmFsdWU6IHZhbHVlIH07XG4gICAgfSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQudmFsdWU7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.find.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.from.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.from.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar from = __webpack_require__(/*! ../internals/collection-from */ \"./node_modules/core-js/internals/collection-from.js\");\n\n// `Set.from` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n$({ target: 'Set', stat: true, forced: true }, {\n from: from\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZnJvbS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHlGQUE4Qjs7QUFFakQ7QUFDQTtBQUNBLElBQUkseUNBQXlDO0FBQzdDO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5mcm9tLmpzP2Q2NDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLWZyb20nKTtcblxuLy8gYFNldC5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG4kKHsgdGFyZ2V0OiAnU2V0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.from.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.intersection.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.intersection.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar toSetLike = __webpack_require__(/*! ../internals/to-set-like */ \"./node_modules/core-js/internals/to-set-like.js\");\nvar $intersection = __webpack_require__(/*! ../internals/set-intersection */ \"./node_modules/core-js/internals/set-intersection.js\");\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\n// TODO: Obsolete version, remove from `core-js@4`\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n intersection: function intersection(other) {\n return call($intersection, this, toSetLike(other));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMscUZBQTRCO0FBQy9DLGdCQUFnQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNsRCxvQkFBb0IsbUJBQU8sQ0FBQywyRkFBK0I7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLmpzPzY1OGUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9TZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXNldC1saWtlJyk7XG52YXIgJGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuLy8gVE9ETzogT2Jzb2xldGUgdmVyc2lvbiwgcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgICByZXR1cm4gY2FsbCgkaW50ZXJzZWN0aW9uLCB0aGlzLCB0b1NldExpa2Uob3RoZXIpKTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.intersection.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.is-disjoint-from.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.is-disjoint-from.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar toSetLike = __webpack_require__(/*! ../internals/to-set-like */ \"./node_modules/core-js/internals/to-set-like.js\");\nvar $isDisjointFrom = __webpack_require__(/*! ../internals/set-is-disjoint-from */ \"./node_modules/core-js/internals/set-is-disjoint-from.js\");\n\n// `Set.prototype.isDisjointFrom` method\n// https://github.com/tc39/proposal-set-methods\n// TODO: Obsolete version, remove from `core-js@4`\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n isDisjointFrom: function isDisjointFrom(other) {\n return call($isDisjointFrom, this, toSetLike(other));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFGQUE0QjtBQUMvQyxnQkFBZ0IsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDbEQsc0JBQXNCLG1CQUFPLENBQUMsbUdBQW1DOztBQUVqRTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20uanM/MGI1MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b1NldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc2V0LWxpa2UnKTtcbnZhciAkaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbi8vIFRPRE86IE9ic29sZXRlIHZlcnNpb24sIHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzRGlzam9pbnRGcm9tOiBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICAgIHJldHVybiBjYWxsKCRpc0Rpc2pvaW50RnJvbSwgdGhpcywgdG9TZXRMaWtlKG90aGVyKSk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.is-disjoint-from.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.is-subset-of.js": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.is-subset-of.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar toSetLike = __webpack_require__(/*! ../internals/to-set-like */ \"./node_modules/core-js/internals/to-set-like.js\");\nvar $isSubsetOf = __webpack_require__(/*! ../internals/set-is-subset-of */ \"./node_modules/core-js/internals/set-is-subset-of.js\");\n\n// `Set.prototype.isSubsetOf` method\n// https://github.com/tc39/proposal-set-methods\n// TODO: Obsolete version, remove from `core-js@4`\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n isSubsetOf: function isSubsetOf(other) {\n return call($isSubsetOf, this, toSetLike(other));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMscUZBQTRCO0FBQy9DLGdCQUFnQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQywyRkFBK0I7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLmpzPzk2NjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9TZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXNldC1saWtlJyk7XG52YXIgJGlzU3Vic2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZicpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4vLyBUT0RPOiBPYnNvbGV0ZSB2ZXJzaW9uLCByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBpc1N1YnNldE9mOiBmdW5jdGlvbiBpc1N1YnNldE9mKG90aGVyKSB7XG4gICAgcmV0dXJuIGNhbGwoJGlzU3Vic2V0T2YsIHRoaXMsIHRvU2V0TGlrZShvdGhlcikpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.is-subset-of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.is-superset-of.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.is-superset-of.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar toSetLike = __webpack_require__(/*! ../internals/to-set-like */ \"./node_modules/core-js/internals/to-set-like.js\");\nvar $isSupersetOf = __webpack_require__(/*! ../internals/set-is-superset-of */ \"./node_modules/core-js/internals/set-is-superset-of.js\");\n\n// `Set.prototype.isSupersetOf` method\n// https://github.com/tc39/proposal-set-methods\n// TODO: Obsolete version, remove from `core-js@4`\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n isSupersetOf: function isSupersetOf(other) {\n return call($isSupersetOf, this, toSetLike(other));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ2xELG9CQUFvQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0EsSUFBSSxzREFBc0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi5qcz8wYThkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvU2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zZXQtbGlrZScpO1xudmFyICRpc1N1cGVyc2V0T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLXN1cGVyc2V0LW9mJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuLy8gVE9ETzogT2Jzb2xldGUgdmVyc2lvbiwgcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBmdW5jdGlvbiBpc1N1cGVyc2V0T2Yob3RoZXIpIHtcbiAgICByZXR1cm4gY2FsbCgkaXNTdXBlcnNldE9mLCB0aGlzLCB0b1NldExpa2Uob3RoZXIpKTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.is-superset-of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.join.js": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.join.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \"./node_modules/core-js/internals/function-uncurry-this.js\");\nvar aSet = __webpack_require__(/*! ../internals/a-set */ \"./node_modules/core-js/internals/a-set.js\");\nvar iterate = __webpack_require__(/*! ../internals/set-iterate */ \"./node_modules/core-js/internals/set-iterate.js\");\nvar toString = __webpack_require__(/*! ../internals/to-string */ \"./node_modules/core-js/internals/to-string.js\");\n\nvar arrayJoin = uncurryThis([].join);\nvar push = uncurryThis([].push);\n\n// `Set.prototype.join` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n join: function join(separator) {\n var set = aSet(this);\n var sep = separator === undefined ? ',' : toString(separator);\n var array = [];\n iterate(set, function (value) {\n push(array, value);\n });\n return arrayJoin(array, sep);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuam9pbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMscUdBQW9DO0FBQzlELFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsY0FBYyxtQkFBTyxDQUFDLGlGQUEwQjtBQUNoRCxlQUFlLG1CQUFPLENBQUMsNkVBQXdCOztBQUUvQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuam9pbi5qcz9lNDk1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBhcnJheUpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgdmFyIHNldCA9IGFTZXQodGhpcyk7XG4gICAgdmFyIHNlcCA9IHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogdG9TdHJpbmcoc2VwYXJhdG9yKTtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBwdXNoKGFycmF5LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycmF5Sm9pbihhcnJheSwgc2VwKTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.join.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.map.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.map.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \"./node_modules/core-js/internals/function-bind-context.js\");\nvar aSet = __webpack_require__(/*! ../internals/a-set */ \"./node_modules/core-js/internals/a-set.js\");\nvar SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ \"./node_modules/core-js/internals/set-helpers.js\");\nvar iterate = __webpack_require__(/*! ../internals/set-iterate */ \"./node_modules/core-js/internals/set-iterate.js\");\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\n// `Set.prototype.map` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n map: function map(callbackfn /* , thisArg */) {\n var set = aSet(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newSet = new Set();\n iterate(set, function (value) {\n add(newSet, boundFunction(value, value, set));\n });\n return newSet;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQubWFwLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMscUdBQW9DO0FBQ3ZELFdBQVcsbUJBQU8sQ0FBQyxxRUFBb0I7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5tYXAuanM/NzJkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbi8vIGBTZXQucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgc2V0ID0gYVNldCh0aGlzKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHZhciBuZXdTZXQgPSBuZXcgU2V0KCk7XG4gICAgaXRlcmF0ZShzZXQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgYWRkKG5ld1NldCwgYm91bmRGdW5jdGlvbih2YWx1ZSwgdmFsdWUsIHNldCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdTZXQ7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.map.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.of.js": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.of.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar of = __webpack_require__(/*! ../internals/collection-of */ \"./node_modules/core-js/internals/collection-of.js\");\n\n// `Set.of` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n$({ target: 'Set', stat: true, forced: true }, {\n of: of\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQub2YuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFNBQVMsbUJBQU8sQ0FBQyxxRkFBNEI7O0FBRTdDO0FBQ0E7QUFDQSxJQUFJLHlDQUF5QztBQUM3QztBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQub2YuanM/ZjJiZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLW9mJyk7XG5cbi8vIGBTZXQub2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG4kKHsgdGFyZ2V0OiAnU2V0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgb2Y6IG9mXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.of.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.reduce.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.reduce.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \"./node_modules/core-js/internals/a-callable.js\");\nvar aSet = __webpack_require__(/*! ../internals/a-set */ \"./node_modules/core-js/internals/a-set.js\");\nvar iterate = __webpack_require__(/*! ../internals/set-iterate */ \"./node_modules/core-js/internals/set-iterate.js\");\n\nvar $TypeError = TypeError;\n\n// `Set.prototype.reduce` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n var set = aSet(this);\n var noInitial = arguments.length < 2;\n var accumulator=n oInitial ? undefined : arguments[1];\n aCallable(callbackfn);\n iterate(set, function (value) {\n if (noInitial) {\n noInitial=f alse;\n accumulator=v alue;\n } else {\n accumulator=c allbackfn(accumulator, value, value, set);\n }\n });\n if (noInitial) throw $TypeError( 'Reduce of empty set with no initial value');\n return accumulator;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQucmVkdWNlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsV0FBVyxtQkFBTyxDQUFDLHFFQUFvQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxzREFBc0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5yZWR1Y2UuanM/MjcwNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgc2V0ID0gYVNldCh0aGlzKTtcbiAgICB2YXIgbm9Jbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8IDI7XG4gICAgdmFyIGFjY3VtdWxhdG9yID0gbm9Jbml0aWFsID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAobm9Jbml0aWFsKSB7XG4gICAgICAgIG5vSW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICBhY2N1bXVsYXRvciA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFja2ZuKGFjY3VtdWxhdG9yLCB2YWx1ZSwgdmFsdWUsIHNldCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG5vSW5pdGlhbCkgdGhyb3cgJFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IHNldCB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.reduce.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.some.js ": /*!*********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.some.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar bind=_ _webpack_require__(/*! ../internals/function-bind-context */ \ "./node_modules/core-js/internals/function-bind-context.js\");\nvar aSet=_ _webpack_require__(/*! ../internals/a-set */ \ "./node_modules/core-js/internals/a-set.js\");\nvar iterate=_ _webpack_require__(/*! ../internals/set-iterate */ \ "./node_modules/core-js/internals/set-iterate.js\");\n\n// `Set.prototype.some` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n some: function some(callbackfn /* , thisArg */) {\n var set=a Set(this);\n var boundFunction=b ind(callbackfn, arguments.length> 1 ? arguments[1] : undefined);\n return iterate(set, function (value) {\n if (boundFunction(value, value, set)) return true;\n }, true) === true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc29tZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsV0FBVyxtQkFBTyxDQUFDLHFHQUFvQztBQUN2RCxXQUFXLG1CQUFPLENBQUMscUVBQW9CO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7O0FBRWhEO0FBQ0E7QUFDQSxJQUFJLHNEQUFzRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zb21lLmpzP2E5YTEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zb21lYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIHNldCA9IGFTZXQodGhpcyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gaXRlcmF0ZShzZXQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKGJvdW5kRnVuY3Rpb24odmFsdWUsIHZhbHVlLCBzZXQpKSByZXR1cm4gdHJ1ZTtcbiAgICB9LCB0cnVlKSA9PT0gdHJ1ZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.some.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.symmetric-difference.js": /*!*************************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.symmetric-difference.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar toSetLike = __webpack_require__(/*! ../internals/to-set-like */ \"./node_modules/core-js/internals/to-set-like.js\");\nvar $symmetricDifference = __webpack_require__(/*! ../internals/set-symmetric-difference */ \"./node_modules/core-js/internals/set-symmetric-difference.js\");\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\n// TODO: Obsolete version, remove from `core-js@4`\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n symmetricDifference: function symmetricDifference(other) {\n return call($symmetricDifference, this, toSetLike(other));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ2xELDJCQUEyQixtQkFBTyxDQUFDLDJHQUF1Qzs7QUFFMUU7QUFDQTtBQUNBO0FBQ0EsSUFBSSxzREFBc0Q7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS5qcz80YTJlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvU2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zZXQtbGlrZScpO1xudmFyICRzeW1tZXRyaWNEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zeW1tZXRyaWMtZGlmZmVyZW5jZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4vLyBUT0RPOiBPYnNvbGV0ZSB2ZXJzaW9uLCByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBzeW1tZXRyaWNEaWZmZXJlbmNlOiBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gICAgcmV0dXJuIGNhbGwoJHN5bW1ldHJpY0RpZmZlcmVuY2UsIHRoaXMsIHRvU2V0TGlrZShvdGhlcikpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.symmetric-difference.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.set.union.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.set.union.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar call = __webpack_require__(/*! ../internals/function-call */ \"./node_modules/core-js/internals/function-call.js\");\nvar toSetLike = __webpack_require__(/*! ../internals/to-set-like */ \"./node_modules/core-js/internals/to-set-like.js\");\nvar $union = __webpack_require__(/*! ../internals/set-union */ \"./node_modules/core-js/internals/set-union.js\");\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\n// TODO: Obsolete version, remove from `core-js@4`\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n union: function union(other) {\n return call($union, this, toSetLike(other));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ2xELGFBQWEsbUJBQU8sQ0FBQyw2RUFBd0I7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBLElBQUksc0RBQXNEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24uanM/MDQ2NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b1NldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc2V0LWxpa2UnKTtcbnZhciAkdW5pb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXVuaW9uJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4vLyBUT0RPOiBPYnNvbGV0ZSB2ZXJzaW9uLCByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICB1bmlvbjogZnVuY3Rpb24gdW5pb24ob3RoZXIpIHtcbiAgICByZXR1cm4gY2FsbCgkdW5pb24sIHRoaXMsIHRvU2V0TGlrZShvdGhlcikpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.set.union.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.string.at.js": /*!**********************************************************!*\ !*** ./node_modules/core-js/modules/esnext.string.at.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// TODO: Remove from `core-js@4`\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar charAt = (__webpack_require__(/*! ../internals/string-multibyte */ \"./node_modules/core-js/internals/string-multibyte.js\").charAt);\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \"./node_modules/core-js/internals/to-integer-or-infinity.js\");\nvar toString = __webpack_require__(/*! ../internals/to-string */ \"./node_modules/core-js/internals/to-string.js\");\n\n// `String.prototype.at` method\n// https://github.com/mathiasbynens/String.prototype.at\n$({ target: 'String', proto: true, forced: true }, {\n at: function at(index) {\n var S = toString(requireObjectCoercible(this));\n var len = S.length;\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k>= len) ? undefined : charAt(S, k);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zdHJpbmcuYXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsYUFBYSx5SEFBK0M7QUFDNUQsNkJBQTZCLG1CQUFPLENBQUMsMkdBQXVDO0FBQzVFLDBCQUEwQixtQkFBTyxDQUFDLHVHQUFxQztBQUN2RSxlQUFlLG1CQUFPLENBQUMsNkVBQXdCOztBQUUvQztBQUNBO0FBQ0EsSUFBSSw2Q0FBNkM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3RyaW5nLmF0LmpzPzdjZGYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KGluZGV4KSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgICB2YXIgbGVuID0gUy5sZW5ndGg7XG4gICAgdmFyIHJlbGF0aXZlSW5kZXggPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgICB2YXIgayA9IHJlbGF0aXZlSW5kZXggPj0gMCA/IHJlbGF0aXZlSW5kZXggOiBsZW4gKyByZWxhdGl2ZUluZGV4O1xuICAgIHJldHVybiAoayA8IDAgfHwgayA+PSBsZW4pID8gdW5kZWZpbmVkIDogY2hhckF0KFMsIGspO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.string.at.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.string.code-points.js": /*!*******************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.string.code-points.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ \"./node_modules/core-js/internals/iterator-create-constructor.js\");\nvar createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ \"./node_modules/core-js/internals/create-iter-result-object.js\");\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\nvar toString = __webpack_require__(/*! ../internals/to-string */ \"./node_modules/core-js/internals/to-string.js\");\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \"./node_modules/core-js/internals/internal-state.js\");\nvar StringMultibyteModule = __webpack_require__(/*! ../internals/string-multibyte */ \"./node_modules/core-js/internals/string-multibyte.js\");\n\nvar codeAt = StringMultibyteModule.codeAt;\nvar charAt = StringMultibyteModule.charAt;\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// TODO: unify with String#@@iterator\nvar $StringIterator = createIteratorConstructor(function StringIterator(string) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: string,\n index: 0\n });\n}, 'String', function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return createIterResultObject(undefined, true);\n point = charAt(string, index);\n state.index += point.length;\n return createIterResultObject({ codePoint: codeAt(point, 0), position: index }, false);\n});\n\n// `String.prototype.codePoints` method\n// https://github.com/tc39/proposal-string-prototype-codepoints\n$({ target: 'String', proto: true, forced: true }, {\n codePoints: function codePoints() {\n return new $StringIterator(toString(requireObjectCoercible(this)));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zdHJpbmcuY29kZS1wb2ludHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGdDQUFnQyxtQkFBTyxDQUFDLGlIQUEwQztBQUNsRiw2QkFBNkIsbUJBQU8sQ0FBQyw2R0FBd0M7QUFDN0UsNkJBQTZCLG1CQUFPLENBQUMsMkdBQXVDO0FBQzVFLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0MsMEJBQTBCLG1CQUFPLENBQUMsdUZBQTZCO0FBQy9ELDRCQUE0QixtQkFBTyxDQUFDLDJGQUErQjs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLDhDQUE4QztBQUNoRixDQUFDOztBQUVEO0FBQ0E7QUFDQSxJQUFJLDZDQUE2QztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3RyaW5nLmNvZGUtcG9pbnRzLmpzPzUzMzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBTdHJpbmdNdWx0aWJ5dGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpO1xuXG52YXIgY29kZUF0ID0gU3RyaW5nTXVsdGlieXRlTW9kdWxlLmNvZGVBdDtcbnZhciBjaGFyQXQgPSBTdHJpbmdNdWx0aWJ5dGVNb2R1bGUuY2hhckF0O1xudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gVE9ETzogdW5pZnkgd2l0aCBTdHJpbmcjQEBpdGVyYXRvclxudmFyICRTdHJpbmdJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gU3RyaW5nSXRlcmF0b3Ioc3RyaW5nKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHN0cmluZyxcbiAgICBpbmRleDogMFxuICB9KTtcbn0sICdTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoeyBjb2RlUG9pbnQ6IGNvZGVBdChwb2ludCwgMCksIHBvc2l0aW9uOiBpbmRleCB9LCBmYWxzZSk7XG59KTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50c2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcHJvdG90eXBlLWNvZGVwb2ludHNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgY29kZVBvaW50czogZnVuY3Rpb24gY29kZVBvaW50cygpIHtcbiAgICByZXR1cm4gbmV3ICRTdHJpbmdJdGVyYXRvcih0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.string.code-points.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.symbol.dispose.js": /*!***************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.symbol.dispose.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ \"./node_modules/core-js/internals/well-known-symbol-define.js\");\nvar defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ \"./node_modules/core-js/internals/object-define-property.js\").f);\nvar getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \"./node_modules/core-js/internals/object-get-own-property-descriptor.js\").f);\n\nvar Symbol = global.Symbol;\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-explicit-resource-management\ndefineWellKnownSymbol('dispose');\n\nif (Symbol) {\n var descriptor = getOwnPropertyDescriptor(Symbol, 'dispose');\n // workaround of NodeJS 20.4 bug\n // https://github.com/nodejs/node/issues/48699\n // and incorrect descriptor from some transpilers and userland helpers\n if (descriptor.enumerable && descriptor.configurable && descriptor.writable) {\n defineProperty(Symbol, 'dispose', { value: descriptor.value, enumerable: false, configurable: false, writable: false });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMsNEJBQTRCLG1CQUFPLENBQUMsMkdBQXVDO0FBQzNFLHFCQUFxQixnSUFBZ0Q7QUFDckUsK0JBQStCLHdKQUE0RDs7QUFFM0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxrRkFBa0Y7QUFDMUg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzPzZhOTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdkaXNwb3NlJyk7XG5cbmlmIChTeW1ib2wpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU3ltYm9sLCAnZGlzcG9zZScpO1xuICAvLyB3b3JrYXJvdW5kIG9mIE5vZGVKUyAyMC40IGJ1Z1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ4Njk5XG4gIC8vIGFuZCBpbmNvcnJlY3QgZGVzY3JpcHRvciBmcm9tIHNvbWUgdHJhbnNwaWxlcnMgYW5kIHVzZXJsYW5kIGhlbHBlcnNcbiAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSAmJiBkZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCAnZGlzcG9zZScsIHsgdmFsdWU6IGRlc2NyaXB0b3IudmFsdWUsIGVudW1lcmFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlLCB3cml0YWJsZTogZmFsc2UgfSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.symbol.dispose.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.symbol.observable.js": /*!******************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.symbol.observable.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ \"./node_modules/core-js/internals/well-known-symbol-define.js\");\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDRCQUE0QixtQkFBTyxDQUFDLDJHQUF1Qzs7QUFFM0U7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUuanM/ZTE3NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.symbol.observable.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.symbol.pattern-match.js": /*!*********************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.symbol.pattern-match.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ \"./node_modules/core-js/internals/well-known-symbol-define.js\");\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNEJBQTRCLG1CQUFPLENBQUMsMkdBQXVDOztBQUUzRTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaC5qcz9lOTVlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.symbol.pattern-match.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/esnext.weak-map.delete-all.js": /*!********************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.weak-map.delete-all.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar aWeakMap = __webpack_require__(/*! ../internals/a-weak-map */ \"./node_modules/core-js/internals/a-weak-map.js\");\nvar remove = (__webpack_require__(/*! ../internals/weak-map-helpers */ \"./node_modules/core-js/internals/weak-map-helpers.js\").remove);\n\n// `WeakMap.prototype.deleteAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'WeakMap', proto: true, real: true, forced: true }, {\n deleteAll: function deleteAll(/* ...elements */) {\n var collection = aWeakMap(this);\n var allDeleted = true;\n var wasDeleted;\n for (var k = 0, len = arguments.length; k < len; k++) {\n wasDeleted=r emove(collection, arguments[k]);\n allDeleted=a llDeleted && wasDeleted;\n } return !!allDeleted;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLW1hcC5kZWxldGUtYWxsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsK0VBQXlCO0FBQ2hELGFBQWEseUhBQStDOztBQUU1RDtBQUNBO0FBQ0EsSUFBSSwwREFBMEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsU0FBUztBQUNyRDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstbWFwLmRlbGV0ZS1hbGwuanM/NzFmOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhV2Vha01hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXdlYWstbWFwJyk7XG52YXIgcmVtb3ZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstbWFwLWhlbHBlcnMnKS5yZW1vdmU7XG5cbi8vIGBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGVBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnV2Vha01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBkZWxldGVBbGw6IGZ1bmN0aW9uIGRlbGV0ZUFsbCgvKiAuLi5lbGVtZW50cyAqLykge1xuICAgIHZhciBjb2xsZWN0aW9uID0gYVdlYWtNYXAodGhpcyk7XG4gICAgdmFyIGFsbERlbGV0ZWQgPSB0cnVlO1xuICAgIHZhciB3YXNEZWxldGVkO1xuICAgIGZvciAodmFyIGsgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgIHdhc0RlbGV0ZWQgPSByZW1vdmUoY29sbGVjdGlvbiwgYXJndW1lbnRzW2tdKTtcbiAgICAgIGFsbERlbGV0ZWQgPSBhbGxEZWxldGVkICYmIHdhc0RlbGV0ZWQ7XG4gICAgfSByZXR1cm4gISFhbGxEZWxldGVkO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.weak-map.delete-all.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.weak-map.from.js ": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.weak-map.from.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar from=_ _webpack_require__(/*! ../internals/collection-from */ \ "./node_modules/core-js/internals/collection-from.js\");\n\n// `WeakMap.from` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n$({ target: 'WeakMap', stat: true, forced: true }, {\n from: from\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLW1hcC5mcm9tLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMseUZBQThCOztBQUVqRDtBQUNBO0FBQ0EsSUFBSSw2Q0FBNkM7QUFDakQ7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQud2Vhay1tYXAuZnJvbS5qcz9lZjRkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1mcm9tJyk7XG5cbi8vIGBXZWFrTWFwLmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG4kKHsgdGFyZ2V0OiAnV2Vha01hcCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.weak-map.from.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.weak-map.of.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.weak-map.of.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar of=_ _webpack_require__(/*! ../internals/collection-of */ \ "./node_modules/core-js/internals/collection-of.js\");\n\n// `WeakMap.of` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n$({ target: 'WeakMap', stat: true, forced: true }, {\n of: of\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLW1hcC5vZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsU0FBUyxtQkFBTyxDQUFDLHFGQUE0Qjs7QUFFN0M7QUFDQTtBQUNBLElBQUksNkNBQTZDO0FBQ2pEO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstbWFwLm9mLmpzPzRjOWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1vZicpO1xuXG4vLyBgV2Vha01hcC5vZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG4kKHsgdGFyZ2V0OiAnV2Vha01hcCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIG9mOiBvZlxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.weak-map.of.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.weak-set.add-all.js ": /*!*****************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.weak-set.add-all.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar aWeakSet=_ _webpack_require__(/*! ../internals/a-weak-set */ \ "./node_modules/core-js/internals/a-weak-set.js\");\nvar add=( __webpack_require__(/*! ../internals/weak-set-helpers */ \ "./node_modules/core-js/internals/weak-set-helpers.js\").add);\n\n// `WeakSet.prototype.addAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'WeakSet', proto: true, real: true, forced: true }, {\n addAll: function addAll(/* ...elements */) {\n var set=a WeakSet(this);\n for (var k=0 , len=a rguments.length; k < len; k++) {\n add(set, arguments[k]);\n } return set;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLXNldC5hZGQtYWxsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsK0VBQXlCO0FBQ2hELFVBQVUsc0hBQTRDOztBQUV0RDtBQUNBO0FBQ0EsSUFBSSwwREFBMEQ7QUFDOUQ7QUFDQTtBQUNBLDRDQUE0QyxTQUFTO0FBQ3JEO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstc2V0LmFkZC1hbGwuanM/Njc4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhV2Vha1NldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXdlYWstc2V0Jyk7XG52YXIgYWRkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstc2V0LWhlbHBlcnMnKS5hZGQ7XG5cbi8vIGBXZWFrU2V0LnByb3RvdHlwZS5hZGRBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnV2Vha1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBhZGRBbGw6IGZ1bmN0aW9uIGFkZEFsbCgvKiAuLi5lbGVtZW50cyAqLykge1xuICAgIHZhciBzZXQgPSBhV2Vha1NldCh0aGlzKTtcbiAgICBmb3IgKHZhciBrID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgICBhZGQoc2V0LCBhcmd1bWVudHNba10pO1xuICAgIH0gcmV0dXJuIHNldDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.weak-set.add-all.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.weak-set.delete-all.js ": /*!********************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.weak-set.delete-all.js ***! \********************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar aWeakSet=_ _webpack_require__(/*! ../internals/a-weak-set */ \ "./node_modules/core-js/internals/a-weak-set.js\");\nvar remove=( __webpack_require__(/*! ../internals/weak-set-helpers */ \ "./node_modules/core-js/internals/weak-set-helpers.js\").remove);\n\n// `WeakSet.prototype.deleteAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'WeakSet', proto: true, real: true, forced: true }, {\n deleteAll: function deleteAll(/* ...elements */) {\n var collection=a WeakSet(this);\n var allDeleted=t rue;\n var wasDeleted;\n for (var k=0 , len=a rguments.length; k < len; k++) {\n wasDeleted=r emove(collection, arguments[k]);\n allDeleted=a llDeleted && wasDeleted;\n } return !!allDeleted;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLXNldC5kZWxldGUtYWxsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsK0VBQXlCO0FBQ2hELGFBQWEseUhBQStDOztBQUU1RDtBQUNBO0FBQ0EsSUFBSSwwREFBMEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsU0FBUztBQUNyRDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstc2V0LmRlbGV0ZS1hbGwuanM/ZjEyNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhV2Vha1NldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXdlYWstc2V0Jyk7XG52YXIgcmVtb3ZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlYWstc2V0LWhlbHBlcnMnKS5yZW1vdmU7XG5cbi8vIGBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGVBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnV2Vha1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBkZWxldGVBbGw6IGZ1bmN0aW9uIGRlbGV0ZUFsbCgvKiAuLi5lbGVtZW50cyAqLykge1xuICAgIHZhciBjb2xsZWN0aW9uID0gYVdlYWtTZXQodGhpcyk7XG4gICAgdmFyIGFsbERlbGV0ZWQgPSB0cnVlO1xuICAgIHZhciB3YXNEZWxldGVkO1xuICAgIGZvciAodmFyIGsgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgIHdhc0RlbGV0ZWQgPSByZW1vdmUoY29sbGVjdGlvbiwgYXJndW1lbnRzW2tdKTtcbiAgICAgIGFsbERlbGV0ZWQgPSBhbGxEZWxldGVkICYmIHdhc0RlbGV0ZWQ7XG4gICAgfSByZXR1cm4gISFhbGxEZWxldGVkO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.weak-set.delete-all.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.weak-set.from.js ": /*!**************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.weak-set.from.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar from=_ _webpack_require__(/*! ../internals/collection-from */ \ "./node_modules/core-js/internals/collection-from.js\");\n\n// `WeakSet.from` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n$({ target: 'WeakSet', stat: true, forced: true }, {\n from: from\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLXNldC5mcm9tLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxXQUFXLG1CQUFPLENBQUMseUZBQThCOztBQUVqRDtBQUNBO0FBQ0EsSUFBSSw2Q0FBNkM7QUFDakQ7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQud2Vhay1zZXQuZnJvbS5qcz9iMjk0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1mcm9tJyk7XG5cbi8vIGBXZWFrU2V0LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG4kKHsgdGFyZ2V0OiAnV2Vha1NldCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.weak-set.from.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/esnext.weak-set.of.js ": /*!************************************************************!*\ !*** ./node_modules/core-js/modules/esnext.weak-set.of.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar of=_ _webpack_require__(/*! ../internals/collection-of */ \ "./node_modules/core-js/internals/collection-of.js\");\n\n// `WeakSet.of` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n$({ target: 'WeakSet', stat: true, forced: true }, {\n of: of\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLXNldC5vZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsU0FBUyxtQkFBTyxDQUFDLHFGQUE0Qjs7QUFFN0M7QUFDQTtBQUNBLElBQUksNkNBQTZDO0FBQ2pEO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstc2V0Lm9mLmpzP2FkYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1vZicpO1xuXG4vLyBgV2Vha1NldC5vZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG4kKHsgdGFyZ2V0OiAnV2Vha1NldCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIG9mOiBvZlxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/esnext.weak-set.of.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/web.clear-immediate.js ": /*!*************************************************************!*\ !*** ./node_modules/core-js/modules/web.clear-immediate.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\nvar $=_ _webpack_require__(/*! ../internals/export */ \ "./node_modules/core-js/internals/export.js\");\nvar global=_ _webpack_require__(/*! ../internals/global */ \ "./node_modules/core-js/internals/global.js\");\nvar clearImmediate=( __webpack_require__(/*! ../internals/task */ \ "./node_modules/core-js/internals/task.js\").clear);\n\n// `clearImmediate` method\n// http://w3c.github.io/setImmediate/#si-clearImmediate\n$({ global: true, bind: true, enumerable: true, forced: global.clearImmediate !==c learImmediate }, {\n clearImmediate: clearImmediate\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5jbGVhci1pbW1lZGlhdGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMscUJBQXFCLGdHQUFrQzs7QUFFdkQ7QUFDQTtBQUNBLElBQUksOEZBQThGO0FBQ2xHO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmNsZWFyLWltbWVkaWF0ZS5qcz9lMjBjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGVhckltbWVkaWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuY2xlYXI7XG5cbi8vIGBjbGVhckltbWVkaWF0ZWAgbWV0aG9kXG4vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLWNsZWFySW1tZWRpYXRlXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5jbGVhckltbWVkaWF0ZSAhPT0gY2xlYXJJbW1lZGlhdGUgfSwge1xuICBjbGVhckltbWVkaWF0ZTogY2xlYXJJbW1lZGlhdGVcbn0pO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/web.clear-immediate.js\n "); /***/ }), /***/ "./node_modules/core-js/modules/web.immediate.js ": /*!*******************************************************!*\ !*** ./node_modules/core-js/modules/web.immediate.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict "; eval("\n// TODO: Remove this module from `core-js@4` since it 's split to modules listed below\n__webpack_require__(/*! ../modules/web.clear-immediate */ \"./node_modules/core-js/modules/web.clear-immediate.js\");\n__webpack_require__(/*! ../modules/web.set-immediate */ \"./node_modules/core-js/modules/web.set-immediate.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsNkZBQWdDO0FBQ3hDLG1CQUFPLENBQUMseUZBQThCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuY2xlYXItaW1tZWRpYXRlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5zZXQtaW1tZWRpYXRlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/web.immediate.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/web.set-immediate.js": /*!***********************************************************!*\ !*** ./node_modules/core-js/modules/web.set-immediate.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { "use strict"; eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar setTask = (__webpack_require__(/*! ../internals/task */ \"./node_modules/core-js/internals/task.js\").set);\nvar schedulersFix = __webpack_require__(/*! ../internals/schedulers-fix */ \"./node_modules/core-js/internals/schedulers-fix.js\");\n\n// https://github.com/oven-sh/bun/issues/1633\nvar setImmediate = global.setImmediate ? schedulersFix(setTask, false) : setTask;\n\n// `setImmediate` method\n// http://w3c.github.io/setImmediate/#si-setImmediate\n$({ global: true, bind: true, enumerable: true, forced: global.setImmediate !== setImmediate }, {\n setImmediate: setImmediate\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5zZXQtaW1tZWRpYXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLGNBQWMsOEZBQWdDO0FBQzlDLG9CQUFvQixtQkFBTyxDQUFDLHVGQUE2Qjs7QUFFekQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwwRkFBMEY7QUFDOUY7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuc2V0LWltbWVkaWF0ZS5qcz8wNDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUYXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbnZhciBzZXRJbW1lZGlhdGUgPSBnbG9iYWwuc2V0SW1tZWRpYXRlID8gc2NoZWR1bGVyc0ZpeChzZXRUYXNrLCBmYWxzZSkgOiBzZXRUYXNrO1xuXG4vLyBgc2V0SW1tZWRpYXRlYCBtZXRob2Rcbi8vIGh0dHA6Ly93M2MuZ2l0aHViLmlvL3NldEltbWVkaWF0ZS8jc2ktc2V0SW1tZWRpYXRlXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbW1lZGlhdGUgIT09IHNldEltbWVkaWF0ZSB9LCB7XG4gIHNldEltbWVkaWF0ZTogc2V0SW1tZWRpYXRlXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/web.set-immediate.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/backoff.js": /*!**********************************************************!*\ !*** ./node_modules/exponential-backoff/dist/backoff.js ***! \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval("\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar options_1 = __webpack_require__(/*! ./options */ \"./node_modules/exponential-backoff/dist/options.js\");\nvar delay_factory_1 = __webpack_require__(/*! ./delay/delay.factory */ \"./node_modules/exponential-backoff/dist/delay/delay.factory.js\");\nfunction backOff(request, options) {\n if (options === void 0) { options = {}; }\n return __awaiter(this, void 0, void 0, function () {\n var sanitizedOptions, backOff;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n sanitizedOptions = options_1.getSanitizedOptions(options);\n backOff = new BackOff(request, sanitizedOptions);\n return [4 /*yield*/, backOff.execute()];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n}\nexports.backOff = backOff;\nvar BackOff = /** @class */ (function () {\n function BackOff(request, options) {\n this.request = request;\n this.options = options;\n this.attemptNumber = 0;\n }\n BackOff.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var e_1, shouldRetry;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!this.attemptLimitReached) return [3 /*break*/, 7];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 4, , 6]);\n return [4 /*yield*/, this.applyDelay()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.request()];\n case 3: return [2 /*return*/, _a.sent()];\n case 4:\n e_1 = _a.sent();\n this.attemptNumber++;\n return [4 /*yield*/, this.options.retry(e_1, this.attemptNumber)];\n case 5:\n shouldRetry = _a.sent();\n if (!shouldRetry || this.attemptLimitReached) {\n throw e_1;\n }\n return [3 /*break*/, 6];\n case 6: return [3 /*break*/, 0];\n case 7: throw new Error(\"Something went wrong.\");\n }\n });\n });\n };\n Object.defineProperty(BackOff.prototype, \"attemptLimitReached\", {\n get: function () {\n return this.attemptNumber >= this.options.numOfAttempts;\n },\n enumerable: true,\n configurable: true\n });\n BackOff.prototype.applyDelay = function () {\n return __awaiter(this, void 0, void 0, function () {\n var delay;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n delay = delay_factory_1.DelayFactory(this.options, this.attemptNumber);\n return [4 /*yield*/, delay.apply()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return BackOff;\n}());\n//# sourceMappingURL=backoff.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2JhY2tvZmYuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxjQUFjLDZCQUE2QiwwQkFBMEIsY0FBYyxxQkFBcUI7QUFDeEcsaUJBQWlCLG9EQUFvRCxxRUFBcUUsY0FBYztBQUN4Six1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QyxtQ0FBbUMsU0FBUztBQUM1QyxtQ0FBbUMsV0FBVyxVQUFVO0FBQ3hELDBDQUEwQyxjQUFjO0FBQ3hEO0FBQ0EsOEdBQThHLE9BQU87QUFDckgsaUZBQWlGLGlCQUFpQjtBQUNsRyx5REFBeUQsZ0JBQWdCLFFBQVE7QUFDakYsK0NBQStDLGdCQUFnQixnQkFBZ0I7QUFDL0U7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBLFVBQVUsWUFBWSxhQUFhLFNBQVMsVUFBVTtBQUN0RCxvQ0FBb0MsU0FBUztBQUM3QztBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdCQUFnQixtQkFBTyxDQUFDLHFFQUFXO0FBQ25DLHNCQUFzQixtQkFBTyxDQUFDLDZGQUF1QjtBQUNyRDtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2V4cG9uZW50aWFsLWJhY2tvZmYvZGlzdC9iYWNrb2ZmLmpzPzQ1YWYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIG9wdGlvbnNfMSA9IHJlcXVpcmUoXCIuL29wdGlvbnNcIik7XG52YXIgZGVsYXlfZmFjdG9yeV8xID0gcmVxdWlyZShcIi4vZGVsYXkvZGVsYXkuZmFjdG9yeVwiKTtcbmZ1bmN0aW9uIGJhY2tPZmYocmVxdWVzdCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2FuaXRpemVkT3B0aW9ucywgYmFja09mZjtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVkT3B0aW9ucyA9IG9wdGlvbnNfMS5nZXRTYW5pdGl6ZWRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBiYWNrT2ZmID0gbmV3IEJhY2tPZmYocmVxdWVzdCwgc2FuaXRpemVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGJhY2tPZmYuZXhlY3V0ZSgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbMiAvKnJldHVybiovLCBfYS5zZW50KCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuYmFja09mZiA9IGJhY2tPZmY7XG52YXIgQmFja09mZiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCYWNrT2ZmKHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5hdHRlbXB0TnVtYmVyID0gMDtcbiAgICB9XG4gICAgQmFja09mZi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgc2hvdWxkUmV0cnk7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF0aGlzLmF0dGVtcHRMaW1pdFJlYWNoZWQpIHJldHVybiBbMyAvKmJyZWFrKi8sIDddO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDQsICwgNl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5hcHBseURlbGF5KCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3QoKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9hLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0ZW1wdE51bWJlcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5vcHRpb25zLnJldHJ5KGVfMSwgdGhpcy5hdHRlbXB0TnVtYmVyKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFJldHJ5ID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRSZXRyeSB8fCB0aGlzLmF0dGVtcHRMaW1pdFJlYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA2XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzMgLypicmVhayovLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiB0aHJvdyBuZXcgRXJyb3IoXCJTb21ldGhpbmcgd2VudCB3cm9uZy5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhY2tPZmYucHJvdG90eXBlLCBcImF0dGVtcHRMaW1pdFJlYWNoZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHROdW1iZXIgPj0gdGhpcy5vcHRpb25zLm51bU9mQXR0ZW1wdHM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIEJhY2tPZmYucHJvdG90eXBlLmFwcGx5RGVsYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkZWxheTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gZGVsYXlfZmFjdG9yeV8xLkRlbGF5RmFjdG9yeSh0aGlzLm9wdGlvbnMsIHRoaXMuYXR0ZW1wdE51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBkZWxheS5hcHBseSgpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBCYWNrT2ZmO1xufSgpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhY2tvZmYuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/backoff.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/delay/always/always.delay.js": /*!****************************************************************************!*\ !*** ./node_modules/exponential-backoff/dist/delay/always/always.delay.js ***! \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval("\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar delay_base_1 = __webpack_require__(/*! ../delay.base */ \"./node_modules/exponential-backoff/dist/delay/delay.base.js\");\nvar AlwaysDelay = /** @class */ (function (_super) {\n __extends(AlwaysDelay, _super);\n function AlwaysDelay() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return AlwaysDelay;\n}(delay_base_1.Delay));\nexports.AlwaysDelay = AlwaysDelay;\n//# sourceMappingURL=always.delay.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2RlbGF5L2Fsd2F5cy9hbHdheXMuZGVsYXkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ3ZGLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsQ0FBQztBQUNELDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUIsbUJBQU8sQ0FBQyxrRkFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsbUJBQW1CO0FBQ25CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2V4cG9uZW50aWFsLWJhY2tvZmYvZGlzdC9kZWxheS9hbHdheXMvYWx3YXlzLmRlbGF5LmpzP2U3ZDMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBkZWxheV9iYXNlXzEgPSByZXF1aXJlKFwiLi4vZGVsYXkuYmFzZVwiKTtcbnZhciBBbHdheXNEZWxheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWx3YXlzRGVsYXksIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWx3YXlzRGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIEFsd2F5c0RlbGF5O1xufShkZWxheV9iYXNlXzEuRGVsYXkpKTtcbmV4cG9ydHMuQWx3YXlzRGVsYXkgPSBBbHdheXNEZWxheTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFsd2F5cy5kZWxheS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/delay/always/always.delay.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/delay/delay.base.js": /*!*******************************************************************!*\ !*** ./node_modules/exponential-backoff/dist/delay/delay.base.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar jitter_factory_1 = __webpack_require__(/*! ../jitter/jitter.factory */ \"./node_modules/exponential-backoff/dist/jitter/jitter.factory.js\");\nvar Delay = /** @class */ (function () {\n function Delay(options) {\n this.options = options;\n this.attempt = 0;\n }\n Delay.prototype.apply = function () {\n var _this = this;\n return new Promise(function (resolve) { return setTimeout(resolve, _this.jitteredDelay); });\n };\n Delay.prototype.setAttemptNumber = function (attempt) {\n this.attempt = attempt;\n };\n Object.defineProperty(Delay.prototype, \"jitteredDelay\", {\n get: function () {\n var jitter = jitter_factory_1.JitterFactory(this.options);\n return jitter(this.delay);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Delay.prototype, \"delay\", {\n get: function () {\n var constant = this.options.startingDelay;\n var base = this.options.timeMultiple;\n var power = this.numOfDelayedAttempts;\n var delay = constant * Math.pow(base, power);\n return Math.min(delay, this.options.maxDelay);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Delay.prototype, \"numOfDelayedAttempts\", {\n get: function () {\n return this.attempt;\n },\n enumerable: true,\n configurable: true\n });\n return Delay;\n}());\nexports.Delay = Delay;\n//# sourceMappingURL=delay.base.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2RlbGF5L2RlbGF5LmJhc2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsdUJBQXVCLG1CQUFPLENBQUMsa0dBQTBCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGtEQUFrRDtBQUNsRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7QUFDRCxhQUFhO0FBQ2IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2RlbGF5L2RlbGF5LmJhc2UuanM/YmY5YyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBqaXR0ZXJfZmFjdG9yeV8xID0gcmVxdWlyZShcIi4uL2ppdHRlci9qaXR0ZXIuZmFjdG9yeVwiKTtcbnZhciBEZWxheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZWxheShvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuYXR0ZW1wdCA9IDA7XG4gICAgfVxuICAgIERlbGF5LnByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIF90aGlzLmppdHRlcmVkRGVsYXkpOyB9KTtcbiAgICB9O1xuICAgIERlbGF5LnByb3RvdHlwZS5zZXRBdHRlbXB0TnVtYmVyID0gZnVuY3Rpb24gKGF0dGVtcHQpIHtcbiAgICAgICAgdGhpcy5hdHRlbXB0ID0gYXR0ZW1wdDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWxheS5wcm90b3R5cGUsIFwiaml0dGVyZWREZWxheVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGppdHRlciA9IGppdHRlcl9mYWN0b3J5XzEuSml0dGVyRmFjdG9yeSh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIGppdHRlcih0aGlzLmRlbGF5KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5LnByb3RvdHlwZSwgXCJkZWxheVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnN0YW50ID0gdGhpcy5vcHRpb25zLnN0YXJ0aW5nRGVsYXk7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IHRoaXMub3B0aW9ucy50aW1lTXVsdGlwbGU7XG4gICAgICAgICAgICB2YXIgcG93ZXIgPSB0aGlzLm51bU9mRGVsYXllZEF0dGVtcHRzO1xuICAgICAgICAgICAgdmFyIGRlbGF5ID0gY29uc3RhbnQgKiBNYXRoLnBvdyhiYXNlLCBwb3dlcik7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oZGVsYXksIHRoaXMub3B0aW9ucy5tYXhEZWxheSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWxheS5wcm90b3R5cGUsIFwibnVtT2ZEZWxheWVkQXR0ZW1wdHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBEZWxheTtcbn0oKSk7XG5leHBvcnRzLkRlbGF5ID0gRGVsYXk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheS5iYXNlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/delay/delay.base.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/delay/delay.factory.js": /*!**********************************************************************!*\ !*** ./node_modules/exponential-backoff/dist/delay/delay.factory.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar skip_first_delay_1 = __webpack_require__(/*! ./skip-first/skip-first.delay */ \"./node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js\");\nvar always_delay_1 = __webpack_require__(/*! ./always/always.delay */ \"./node_modules/exponential-backoff/dist/delay/always/always.delay.js\");\nfunction DelayFactory(options, attempt) {\n var delay = initDelayClass(options);\n delay.setAttemptNumber(attempt);\n return delay;\n}\nexports.DelayFactory = DelayFactory;\nfunction initDelayClass(options) {\n if (!options.delayFirstAttempt) {\n return new skip_first_delay_1.SkipFirstDelay(options);\n }\n return new always_delay_1.AlwaysDelay(options);\n}\n//# sourceMappingURL=delay.factory.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2RlbGF5L2RlbGF5LmZhY3RvcnkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QseUJBQXlCLG1CQUFPLENBQUMsbUhBQStCO0FBQ2hFLHFCQUFxQixtQkFBTyxDQUFDLG1HQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2V4cG9uZW50aWFsLWJhY2tvZmYvZGlzdC9kZWxheS9kZWxheS5mYWN0b3J5LmpzP2U5YmYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc2tpcF9maXJzdF9kZWxheV8xID0gcmVxdWlyZShcIi4vc2tpcC1maXJzdC9za2lwLWZpcnN0LmRlbGF5XCIpO1xudmFyIGFsd2F5c19kZWxheV8xID0gcmVxdWlyZShcIi4vYWx3YXlzL2Fsd2F5cy5kZWxheVwiKTtcbmZ1bmN0aW9uIERlbGF5RmFjdG9yeShvcHRpb25zLCBhdHRlbXB0KSB7XG4gICAgdmFyIGRlbGF5ID0gaW5pdERlbGF5Q2xhc3Mob3B0aW9ucyk7XG4gICAgZGVsYXkuc2V0QXR0ZW1wdE51bWJlcihhdHRlbXB0KTtcbiAgICByZXR1cm4gZGVsYXk7XG59XG5leHBvcnRzLkRlbGF5RmFjdG9yeSA9IERlbGF5RmFjdG9yeTtcbmZ1bmN0aW9uIGluaXREZWxheUNsYXNzKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMuZGVsYXlGaXJzdEF0dGVtcHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBza2lwX2ZpcnN0X2RlbGF5XzEuU2tpcEZpcnN0RGVsYXkob3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgYWx3YXlzX2RlbGF5XzEuQWx3YXlzRGVsYXkob3B0aW9ucyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheS5mYWN0b3J5LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/delay/delay.factory.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js": /*!************************************************************************************!*\ !*** ./node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js ***! \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval("\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar delay_base_1 = __webpack_require__(/*! ../delay.base */ \"./node_modules/exponential-backoff/dist/delay/delay.base.js\");\nvar SkipFirstDelay = /** @class */ (function (_super) {\n __extends(SkipFirstDelay, _super);\n function SkipFirstDelay() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SkipFirstDelay.prototype.apply = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.isFirstAttempt ? true : _super.prototype.apply.call(this)];\n });\n });\n };\n Object.defineProperty(SkipFirstDelay.prototype, \"isFirstAttempt\", {\n get: function () {\n return this.attempt === 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SkipFirstDelay.prototype, \"numOfDelayedAttempts\", {\n get: function () {\n return this.attempt - 1;\n },\n enumerable: true,\n configurable: true\n });\n return SkipFirstDelay;\n}(delay_base_1.Delay));\nexports.SkipFirstDelay = SkipFirstDelay;\n//# sourceMappingURL=skip-first.delay.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2RlbGF5L3NraXAtZmlyc3Qvc2tpcC1maXJzdC5kZWxheS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDdkYsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsY0FBYyw2QkFBNkIsMEJBQTBCLGNBQWMscUJBQXFCO0FBQ3hHLGlCQUFpQixvREFBb0QscUVBQXFFLGNBQWM7QUFDeEosdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEMsbUNBQW1DLFNBQVM7QUFDNUMsbUNBQW1DLFdBQVcsVUFBVTtBQUN4RCwwQ0FBMEMsY0FBYztBQUN4RDtBQUNBLDhHQUE4RyxPQUFPO0FBQ3JILGlGQUFpRixpQkFBaUI7QUFDbEcseURBQXlELGdCQUFnQixRQUFRO0FBQ2pGLCtDQUErQyxnQkFBZ0IsZ0JBQWdCO0FBQy9FO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQSxVQUFVLFlBQVksYUFBYSxTQUFTLFVBQVU7QUFDdEQsb0NBQW9DLFNBQVM7QUFDN0M7QUFDQTtBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUIsbUJBQU8sQ0FBQyxrRkFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDO0FBQ0Qsc0JBQXNCO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2V4cG9uZW50aWFsLWJhY2tvZmYvZGlzdC9kZWxheS9za2lwLWZpcnN0L3NraXAtZmlyc3QuZGVsYXkuanM/NmE1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBkZWxheV9iYXNlXzEgPSByZXF1aXJlKFwiLi4vZGVsYXkuYmFzZVwiKTtcbnZhciBTa2lwRmlyc3REZWxheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2tpcEZpcnN0RGVsYXksIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2tpcEZpcnN0RGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgU2tpcEZpcnN0RGVsYXkucHJvdG90eXBlLmFwcGx5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuaXNGaXJzdEF0dGVtcHQgPyB0cnVlIDogX3N1cGVyLnByb3RvdHlwZS5hcHBseS5jYWxsKHRoaXMpXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTa2lwRmlyc3REZWxheS5wcm90b3R5cGUsIFwiaXNGaXJzdEF0dGVtcHRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHQgPT09IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTa2lwRmlyc3REZWxheS5wcm90b3R5cGUsIFwibnVtT2ZEZWxheWVkQXR0ZW1wdHNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dGVtcHQgLSAxO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gU2tpcEZpcnN0RGVsYXk7XG59KGRlbGF5X2Jhc2VfMS5EZWxheSkpO1xuZXhwb3J0cy5Ta2lwRmlyc3REZWxheSA9IFNraXBGaXJzdERlbGF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcC1maXJzdC5kZWxheS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/jitter/full/full.jitter.js": /*!**************************************************************************!*\ !*** ./node_modules/exponential-backoff/dist/jitter/full/full.jitter.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction fullJitter(delay) {\n var jitteredDelay = Math.random() * delay;\n return Math.round(jitteredDelay);\n}\nexports.fullJitter = fullJitter;\n//# sourceMappingURL=full.jitter.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2ppdHRlci9mdWxsL2Z1bGwuaml0dGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2V4cG9uZW50aWFsLWJhY2tvZmYvZGlzdC9qaXR0ZXIvZnVsbC9mdWxsLmppdHRlci5qcz85NWUyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gZnVsbEppdHRlcihkZWxheSkge1xuICAgIHZhciBqaXR0ZXJlZERlbGF5ID0gTWF0aC5yYW5kb20oKSAqIGRlbGF5O1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGppdHRlcmVkRGVsYXkpO1xufVxuZXhwb3J0cy5mdWxsSml0dGVyID0gZnVsbEppdHRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZ1bGwuaml0dGVyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/jitter/full/full.jitter.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/jitter/jitter.factory.js": /*!************************************************************************!*\ !*** ./node_modules/exponential-backoff/dist/jitter/jitter.factory.js ***! \************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar full_jitter_1 = __webpack_require__(/*! ./full/full.jitter */ \"./node_modules/exponential-backoff/dist/jitter/full/full.jitter.js\");\nvar no_jitter_1 = __webpack_require__(/*! ./no/no.jitter */ \"./node_modules/exponential-backoff/dist/jitter/no/no.jitter.js\");\nfunction JitterFactory(options) {\n switch (options.jitter) {\n case \"full\":\n return full_jitter_1.fullJitter;\n case \"none\":\n default:\n return no_jitter_1.noJitter;\n }\n}\nexports.JitterFactory = JitterFactory;\n//# sourceMappingURL=jitter.factory.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2ppdHRlci9qaXR0ZXIuZmFjdG9yeS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxvQkFBb0IsbUJBQU8sQ0FBQyw4RkFBb0I7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsc0ZBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9leHBvbmVudGlhbC1iYWNrb2ZmL2Rpc3Qvaml0dGVyL2ppdHRlci5mYWN0b3J5LmpzPzdhNzUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZnVsbF9qaXR0ZXJfMSA9IHJlcXVpcmUoXCIuL2Z1bGwvZnVsbC5qaXR0ZXJcIik7XG52YXIgbm9faml0dGVyXzEgPSByZXF1aXJlKFwiLi9uby9uby5qaXR0ZXJcIik7XG5mdW5jdGlvbiBKaXR0ZXJGYWN0b3J5KG9wdGlvbnMpIHtcbiAgICBzd2l0Y2ggKG9wdGlvbnMuaml0dGVyKSB7XG4gICAgICAgIGNhc2UgXCJmdWxsXCI6XG4gICAgICAgICAgICByZXR1cm4gZnVsbF9qaXR0ZXJfMS5mdWxsSml0dGVyO1xuICAgICAgICBjYXNlIFwibm9uZVwiOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG5vX2ppdHRlcl8xLm5vSml0dGVyO1xuICAgIH1cbn1cbmV4cG9ydHMuSml0dGVyRmFjdG9yeSA9IEppdHRlckZhY3Rvcnk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qaXR0ZXIuZmFjdG9yeS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/jitter/jitter.factory.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/jitter/no/no.jitter.js": /*!**********************************************************************!*\ !*** ./node_modules/exponential-backoff/dist/jitter/no/no.jitter.js ***! \**********************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction noJitter(delay) {\n return delay;\n}\nexports.noJitter = noJitter;\n//# sourceMappingURL=no.jitter.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L2ppdHRlci9uby9uby5qaXR0ZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2V4cG9uZW50aWFsLWJhY2tvZmYvZGlzdC9qaXR0ZXIvbm8vbm8uaml0dGVyLmpzPzcyNzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBub0ppdHRlcihkZWxheSkge1xuICAgIHJldHVybiBkZWxheTtcbn1cbmV4cG9ydHMubm9KaXR0ZXIgPSBub0ppdHRlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vLmppdHRlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/jitter/no/no.jitter.js\n"); /***/ }), /***/ "./node_modules/exponential-backoff/dist/options.js": /*!**********************************************************!*\ !*** ./node_modules/exponential-backoff/dist/options.js ***! \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { "use strict"; eval("\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar defaultOptions = {\n delayFirstAttempt: false,\n jitter: \"none\",\n maxDelay: Infinity,\n numOfAttempts: 10,\n retry: function () { return true; },\n startingDelay: 100,\n timeMultiple: 2\n};\nfunction getSanitizedOptions(options) {\n var sanitized = __assign(__assign({}, defaultOptions), options);\n if (sanitized.numOfAttempts < 1) {\n sanitized.numOfAttempts = 1;\n }\n return sanitized;\n}\nexports.getSanitizedOptions = getSanitizedOptions;\n//# sourceMappingURL=options.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXhwb25lbnRpYWwtYmFja29mZi9kaXN0L29wdGlvbnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0EsaURBQWlELE9BQU87QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGNBQWM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQiIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9leHBvbmVudGlhbC1iYWNrb2ZmL2Rpc3Qvb3B0aW9ucy5qcz84YTMyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBkZWxheUZpcnN0QXR0ZW1wdDogZmFsc2UsXG4gICAgaml0dGVyOiBcIm5vbmVcIixcbiAgICBtYXhEZWxheTogSW5maW5pdHksXG4gICAgbnVtT2ZBdHRlbXB0czogMTAsXG4gICAgcmV0cnk6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXG4gICAgc3RhcnRpbmdEZWxheTogMTAwLFxuICAgIHRpbWVNdWx0aXBsZTogMlxufTtcbmZ1bmN0aW9uIGdldFNhbml0aXplZE9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBzYW5pdGl6ZWQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICBpZiAoc2FuaXRpemVkLm51bU9mQXR0ZW1wdHMgPCAxKSB7XG4gICAgICAgIHNhbml0aXplZC5udW1PZkF0dGVtcHRzID0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHNhbml0aXplZDtcbn1cbmV4cG9ydHMuZ2V0U2FuaXRpemVkT3B0aW9ucyA9IGdldFNhbml0aXplZE9wdGlvbnM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vcHRpb25zLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/exponential-backoff/dist/options.js\n"); /***/ }), /***/ "./node_modules/fflate/esm/browser.js": /*!********************************************!*\ !*** ./node_modules/fflate/esm/browser.js ***! \********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AsyncCompress: () => (/* binding */ AsyncGzip),\n/* harmony export */ AsyncDecompress: () => (/* binding */ AsyncDecompress),\n/* harmony export */ AsyncDeflate: () => (/* binding */ AsyncDeflate),\n/* harmony export */ AsyncGunzip: () => (/* binding */ AsyncGunzip),\n/* harmony export */ AsyncGzip: () => (/* binding */ AsyncGzip),\n/* harmony export */ AsyncInflate: () => (/* binding */ AsyncInflate),\n/* harmony export */ AsyncUnzipInflate: () => (/* binding */ AsyncUnzipInflate),\n/* harmony export */ AsyncUnzlib: () => (/* binding */ AsyncUnzlib),\n/* harmony export */ AsyncZipDeflate: () => (/* binding */ AsyncZipDeflate),\n/* harmony export */ AsyncZlib: () => (/* binding */ AsyncZlib),\n/* harmony export */ Compress: () => (/* binding */ Gzip),\n/* harmony export */ DecodeUTF8: () => (/* binding */ DecodeUTF8),\n/* harmony export */ Decompress: () => (/* binding */ Decompress),\n/* harmony export */ Deflate: () => (/* binding */ Deflate),\n/* harmony export */ EncodeUTF8: () => (/* binding */ EncodeUTF8),\n/* harmony export */ FlateErrorCode: () => (/* binding */ FlateErrorCode),\n/* harmony export */ Gunzip: () => (/* binding */ Gunzip),\n/* harmony export */ Gzip: () => (/* binding */ Gzip),\n/* harmony export */ Inflate: () => (/* binding */ Inflate),\n/* harmony export */ Unzip: () => (/* binding */ Unzip),\n/* harmony export */ UnzipInflate: () => (/* binding */ UnzipInflate),\n/* harmony export */ UnzipPassThrough: () => (/* binding */ UnzipPassThrough),\n/* harmony export */ Unzlib: () => (/* binding */ Unzlib),\n/* harmony export */ Zip: () => (/* binding */ Zip),\n/* harmony export */ ZipDeflate: () => (/* binding */ ZipDeflate),\n/* harmony export */ ZipPassThrough: () => (/* binding */ ZipPassThrough),\n/* harmony export */ Zlib: () => (/* binding */ Zlib),\n/* harmony export */ compress: () => (/* binding */ gzip),\n/* harmony export */ compressSync: () => (/* binding */ gzipSync),\n/* harmony export */ decompress: () => (/* binding */ decompress),\n/* harmony export */ decompressSync: () => (/* binding */ decompressSync),\n/* harmony export */ deflate: () => (/* binding */ deflate),\n/* harmony export */ deflateSync: () => (/* binding */ deflateSync),\n/* harmony export */ gunzip: () => (/* binding */ gunzip),\n/* harmony export */ gunzipSync: () => (/* binding */ gunzipSync),\n/* harmony export */ gzip: () => (/* binding */ gzip),\n/* harmony export */ gzipSync: () => (/* binding */ gzipSync),\n/* harmony export */ inflate: () => (/* binding */ inflate),\n/* harmony export */ inflateSync: () => (/* binding */ inflateSync),\n/* harmony export */ strFromU8: () => (/* binding */ strFromU8),\n/* harmony export */ strToU8: () => (/* binding */ strToU8),\n/* harmony export */ unzip: () => (/* binding */ unzip),\n/* harmony export */ unzipSync: () => (/* binding */ unzipSync),\n/* harmony export */ unzlib: () => (/* binding */ unzlib),\n/* harmony export */ unzlibSync: () => (/* binding */ unzlibSync),\n/* harmony export */ zip: () => (/* binding */ zip),\n/* harmony export */ zipSync: () => (/* binding */ zipSync),\n/* harmony export */ zlib: () => (/* binding */ zlib),\n/* harmony export */ zlibSync: () => (/* binding */ zlibSync)\n/* harmony export */ });\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\ "error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})}) '\n ], { type: 'text/javascript ' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code '] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8=U int8Array, u16=U int16Array, i32=I nt32Array;\n// fixed length extra bits\nvar fleb=n ew u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb=n ew u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim=n ew u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb=f unction (eb, start) {\n var b=n ew u16(31);\n for (var i=0 ; i < 31; ++i) {\n b[i]=s tart +=1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r=n ew i32(b[30]);\n for (var i=1 ; i < 30; ++i) {\n for (var j=b [i]; j < b[i + 1]; ++j) {\n r[j]=( (j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a=f reb(fleb, 2), fl=_ a.b, revfl=_ a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28]=2 58, revfl[258]=2 8;\nvar _b=f reb(fdeb, 0), fd=_ b.b, revfd=_ b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev=n ew u16(32768);\nfor (var i=0 ; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x=( (i & 0xAAAA)>> 1) | ((i & 0x5555) << 1);\n x=( (x & 0xCCCC)>> 2) | ((x & 0x3333) << 2);\n x=( (x & 0xF0F0)>> 4) | ((x & 0x0F0F) << 4);\n rev[i]=( ((x & 0xFF00)>> 8) | ((x & 0x00FF) << 8))>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \ "map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i]=( le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \ "map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb=1 5 - mb;\n for (i=0 ; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv=( i << 4) | cd[i];\n // free bits\n var r_1=m b - cd[i];\n // start value\n var v=l e[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m=v | ((1 << r_1) - 1); v <=m ; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v]>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i]=r ev[le[cd[i] - 1]++]>> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i]=8 ;\nfor (var i=1 44; i < 256; ++i)\n flt[i]=9 ;\nfor (var i=2 56; i < 280; ++i)\n flt[i]=7 ;\nfor (var i=2 80; i < 288; ++i)\n flt[i]=8 ;\n// fixed distance tree\nvar fdt=n ew u8(32);\nfor (var i=0 ; i < 32; ++i)\n fdt[i]=5 ;\n// fixed length map\nvar flm=/ *#__PURE__*/ hMap(flt, 9, 0), flrm=/ *#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm=/ *#__PURE__*/ hMap(fdt, 5, 0), fdrm=/ *#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max=f unction (a) {\n var m=a [0];\n for (var i=1 ; i < a.length; ++i) {\n if (a[i]> m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8))>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16))>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s=0 ;\n if (e==n ull || e> v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nvar FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t=s + l;\n if (t> sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]]=b its(dat, pos + i * 3, 7);\n }\n pos +=h cLen * 3;\n // code lengths bits\n var clb=m ax(clt), clbmsk=( 1 << clb) - 1;\n // code lengths map\n var clm=h Map(clt, clb, 1);\n for (var i=0 ; i < tl;) {\n var r=c lm[bits(dat, pos, clbmsk)];\n // bits read\n pos +=r & 15;\n // symbol\n var s=r>> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++]=s ;\n }\n else {\n // copy count\n var c=0 , n=0 ;\n if (s==1 6)\n n=3 + bits(dat, pos, 3), pos +=2 , c=l dt[i - 1];\n else if (s==1 7)\n n=3 + bits(dat, pos, 7), pos +=3 ;\n else if (s==1 8)\n n=1 1 + bits(dat, pos, 127), pos +=7 ;\n while (n--)\n ldt[i++]=c ;\n }\n }\n // length tree distance tree\n var lt=l dt.subarray(0, hLit), dt=l dt.subarray(hLit);\n // max length bits\n lbt=m ax(lt);\n // max dist bits\n dbt=m ax(dt);\n lm=h Map(lt, lbt, 1);\n dm=h Map(dt, dbt, 1);\n }\n else\n err(1);\n if (pos> tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms=( 1 << dbt) - 1;\n var lpos=p os;\n for (;; lpos=p os) {\n // bits read, code\n var c=l m[bits16(dat, pos) & lms], sym=c>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++]=s ym;\n else if (sym==2 56) {\n lpos=p os, lm=n ull;\n break;\n }\n else {\n var add=s ym - 254;\n // no extra bits needed if less\n if (sym> 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos +=b ;\n }\n // dist\n var d=d m[bits16(dat, pos) & dms], dsym=d>> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos +=b ;\n }\n if (pos> tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift=d l - dt, dend=M ath.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt]=d ict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt]=b uf[bt - dt];\n }\n }\n st.l=l m, st.p=l pos, st.b=b t, st.f=f inal;\n if (lm)\n final=1 , st.m=l bt, st.d=d m, st.n=d bt;\n } while (!final);\n // don 't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can 't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[ ') + 1, st.lastIndexOf('] ')).replace(/\\s+/g, ' ').split(', ');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function ') {\n fnStr += '; ' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf(' [native code] ') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('( ', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += '; ' + k + '.prototype. ' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = ' ', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + ' } ', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data ');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data ');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need ' : 'unexpected ') + ' dictionary ');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function ')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function ')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n if (split) {\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n }\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n return Deflate;\n}());\n\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\n\nfunction deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nfunction deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function ')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\n\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\n\nfunction inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\n\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\n\nfunction gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nfunction gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n if (this.p.length)\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\n\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this_1 = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, function (offset) { return _this_1.onmember && _this_1.onmember(offset); });\n }\n return AsyncGunzip;\n}());\n\nfunction gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data ');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\n\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\n\nfunction zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data ');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\n\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\n\nfunction unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\n\n\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.o = StrmOpt.call(this, opts, cb) || {};\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_2 = this;\n // enables reuse of this method by AsyncDecompress\n var cb = function () { _this_2.ondata.apply(_this_2, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o, cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o, cb)\n : new this.Z(this.o, cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\n\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n Decompress.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\n\nfunction decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/ '] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined ' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined ' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = ' ', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\n\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\n\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nfunction strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nfunction strFromU8(dat, latin1) {\n if (latin1) {\n var r = ' ';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++]=( f.flag << 1) | (c < 0 && 8), d[b++]=u && 8;\n d[b++]=f .compression & 255, d[b++]=f .compression>> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y> 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds()>> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b +=1 6;\n if (ce !=n ull) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b +=1 4;\n }\n d.set(fn, b);\n b +=f l;\n if (exl) {\n for (var k in ex) {\n var exf=e x[k], l=e xf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b +=4 + l;\n }\n }\n if (col)\n d.set(co, b), b +=c ol;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf=f unction (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough=/ *#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename=f ilename;\n this.c=c rc();\n this.size=0 ;\n this.compression=0 ;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process=f unction (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push=f unction (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size +=c hunk.length;\n if (final)\n this.crc=t his.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\n\n// I don 't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\n\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\n\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this_1 = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this_1.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this_1.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this_1.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this_1.ondata(err, dat, final);\n _this_1.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this_1 = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this_1.d & 1))\n return;\n _this_1.u.splice(-1, 1);\n _this_1.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\n\nfunction zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n var r = {};\n fltn(data, ' ', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nfunction zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, ' ', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\n\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this_1 = this;\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\n\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this_1 = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\n\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this_1 = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this_1.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this_1.k[0] == chks_3 && _this_1.c)\n _this_1.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\n\nvar mt = typeof queueMicrotask == 'function ' ? queueMicrotask : typeof setTimeout == 'function ' ? setTimeout : function (fn) { fn(); };\nfunction unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function ')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nfunction unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZmZsYXRlL2VzbS9icm93c2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMscUNBQXFDLFVBQVUsYUFBYSwrQkFBK0IsRUFBRTtBQUMzRyxTQUFTLHlCQUF5QjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixRQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUIsMkJBQTJCLGNBQWM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxRQUFRO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FB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MEUsTUFBTTtBQUNoRjtBQUNBO0FBQ3dEO0FBQ0Y7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ3FCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUMwQjtBQUNwQjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxjQUFjO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ3FCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDcUI7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0Isb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDeUI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ3FCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUMwQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxvQkFBb0I7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGdCQUFnQjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxnQkFBZ0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsZ0JBQWdCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDYztBQUNSO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFdBQVc7QUFDcEM7QUFDQSxxQkFBcUIsV0FBVztBQUNoQztBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsVUFBVTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQzJCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUN1QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQzRCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEVBQThFO0FBQzlFLHNFQUFzRSxvQkFBb0I7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFdBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ2dCO0FBQ2pCLCtIQUErSDtBQUN4SDtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsV0FBVztBQUNwQztBQUNBLHFCQUFxQixXQUFXO0FBQ2hDO0FBQ0EsV0FBVywwQkFBMEI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGlCQUFpQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsVUFBVTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxpQkFBaUI7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL2ZmbGF0ZS9lc20vYnJvd3Nlci5qcz83MmJhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIERFRkxBVEUgaXMgYSBjb21wbGV4IGZvcm1hdDsgdG8gcmVhZCB0aGlzIGNvZGUsIHlvdSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIFJGQyBmaXJzdDpcbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxXG4vLyBZb3UgbWF5IGFsc28gd2lzaCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZ3VpZGUgSSBtYWRlIGFib3V0IHRoaXMgcHJvZ3JhbTpcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEwMWFycm93ei8yNTNmMzFlYjVhYmMzZDkyNzVhYjk0MzAwM2ZmZWNhZFxuLy8gU29tZSBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgc2ltaWxhciB0byB0aGF0IG9mIFVaSVAuanM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vcGhvdG9wZWEvVVpJUC5qc1xuLy8gSG93ZXZlciwgdGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlIGNvZGViYXNlIGhhcyBkaXZlcmdlZCBmcm9tIFVaSVAuanMgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UgYW5kIHJlZHVjZSBidW5kbGUgc2l6ZS5cbi8vIFNvbWV0aW1lcyAwIHdpbGwgYXBwZWFyIHdoZXJlIC0xIHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUuIFRoaXMgaXMgYmVjYXVzZSB1c2luZyBhIHVpbnRcbi8vIGlzIGJldHRlciBmb3IgbWVtb3J5IGluIG1vc3QgZW5naW5lcyAoSSAqdGhpbmsqKS5cbnZhciBjaDIgPSB7fTtcbnZhciB3ayA9IChmdW5jdGlvbiAoYywgaWQsIG1zZywgdHJhbnNmZXIsIGNiKSB7XG4gICAgdmFyIHcgPSBuZXcgV29ya2VyKGNoMltpZF0gfHwgKGNoMltpZF0gPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtcbiAgICAgICAgYyArICc7YWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsZnVuY3Rpb24oZSl7ZT1lLmVycm9yO3Bvc3RNZXNzYWdlKHskZSQ6W2UubWVzc2FnZSxlLmNvZGUsZS5zdGFja119KX0pJ1xuICAgIF0sIHsgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcgfSkpKSk7XG4gICAgdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgZCA9IGUuZGF0YSwgZWQgPSBkLiRlJDtcbiAgICAgICAgaWYgKGVkKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKGVkWzBdKTtcbiAgICAgICAgICAgIGVyclsnY29kZSddID0gZWRbMV07XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBlZFsyXTtcbiAgICAgICAgICAgIGNiKGVyciwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY2IobnVsbCwgZCk7XG4gICAgfTtcbiAgICB3LnBvc3RNZXNzYWdlKG1zZywgdHJhbnNmZXIpO1xuICAgIHJldHVybiB3O1xufSk7XG5cbi8vIGFsaWFzZXMgZm9yIHNob3J0ZXIgY29tcHJlc3NlZCBjb2RlIChtb3N0IG1pbmlmZXJzIGRvbid0IGRvIHRoaXMpXG52YXIgdTggPSBVaW50OEFycmF5LCB1MTYgPSBVaW50MTZBcnJheSwgaTMyID0gSW50MzJBcnJheTtcbi8vIGZpeGVkIGxlbmd0aCBleHRyYSBiaXRzXG52YXIgZmxlYiA9IG5ldyB1OChbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgMCwgLyogdW51c2VkICovIDAsIDAsIC8qIGltcG9zc2libGUgKi8gMF0pO1xuLy8gZml4ZWQgZGlzdGFuY2UgZXh0cmEgYml0c1xudmFyIGZkZWIgPSBuZXcgdTgoWzAsIDAsIDAsIDAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIDQsIDUsIDUsIDYsIDYsIDcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEzLCAxMywgLyogdW51c2VkICovIDAsIDBdKTtcbi8vIGNvZGUgbGVuZ3RoIGluZGV4IG1hcFxudmFyIGNsaW0gPSBuZXcgdTgoWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdKTtcbi8vIGdldCBiYXNlLCByZXZlcnNlIGluZGV4IG1hcCBmcm9tIGV4dHJhIGJpdHNcbnZhciBmcmViID0gZnVuY3Rpb24gKGViLCBzdGFydCkge1xuICAgIHZhciBiID0gbmV3IHUxNigzMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMTsgKytpKSB7XG4gICAgICAgIGJbaV0gPSBzdGFydCArPSAxIDw8IGViW2kgLSAxXTtcbiAgICB9XG4gICAgLy8gbnVtYmVycyBoZXJlIGFyZSBhdCBtYXggMTggYml0c1xuICAgIHZhciByID0gbmV3IGkzMihiWzMwXSk7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCAzMDsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBiW2ldOyBqIDwgYltpICsgMV07ICsraikge1xuICAgICAgICAgICAgcltqXSA9ICgoaiAtIGJbaV0pIDw8IDUpIHwgaTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBiOiBiLCByOiByIH07XG59O1xudmFyIF9hID0gZnJlYihmbGViLCAyKSwgZmwgPSBfYS5iLCByZXZmbCA9IF9hLnI7XG4vLyB3ZSBjYW4gaWdub3JlIHRoZSBmYWN0IHRoYXQgdGhlIG90aGVyIG51bWJlcnMgYXJlIHdyb25nOyB0aGV5IG5ldmVyIGhhcHBlbiBhbnl3YXlcbmZsWzI4XSA9IDI1OCwgcmV2ZmxbMjU4XSA9IDI4O1xudmFyIF9iID0gZnJlYihmZGViLCAwKSwgZmQgPSBfYi5iLCByZXZmZCA9IF9iLnI7XG4vLyBtYXAgb2YgdmFsdWUgdG8gcmV2ZXJzZSAoYXNzdW1pbmcgMTYgYml0cylcbnZhciByZXYgPSBuZXcgdTE2KDMyNzY4KTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMzI3Njg7ICsraSkge1xuICAgIC8vIHJldmVyc2UgdGFibGUgYWxnb3JpdGhtIGZyb20gU09cbiAgICB2YXIgeCA9ICgoaSAmIDB4QUFBQSkgPj4gMSkgfCAoKGkgJiAweDU1NTUpIDw8IDEpO1xuICAgIHggPSAoKHggJiAweENDQ0MpID4+IDIpIHwgKCh4ICYgMHgzMzMzKSA8PCAyKTtcbiAgICB4ID0gKCh4ICYgMHhGMEYwKSA+PiA0KSB8ICgoeCAmIDB4MEYwRikgPDwgNCk7XG4gICAgcmV2W2ldID0gKCgoeCAmIDB4RkYwMCkgPj4gOCkgfCAoKHggJiAweDAwRkYpIDw8IDgpKSA+PiAxO1xufVxuLy8gY3JlYXRlIGh1ZmZtYW4gdHJlZSBmcm9tIHU4IFwibWFwXCI6IGluZGV4IC0+IGNvZGUgbGVuZ3RoIGZvciBjb2RlIGluZGV4XG4vLyBtYiAobWF4IGJpdHMpIG11c3QgYmUgYXQgbW9zdCAxNVxuLy8gVE9ETzogb3B0aW1pemUvc3BsaXQgdXA/XG52YXIgaE1hcCA9IChmdW5jdGlvbiAoY2QsIG1iLCByKSB7XG4gICAgdmFyIHMgPSBjZC5sZW5ndGg7XG4gICAgLy8gaW5kZXhcbiAgICB2YXIgaSA9IDA7XG4gICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+ICMgb2YgY29kZXMgd2l0aCBiaXQgbGVuZ3RoID0gaW5kZXhcbiAgICB2YXIgbCA9IG5ldyB1MTYobWIpO1xuICAgIC8vIGxlbmd0aCBvZiBjZCBtdXN0IGJlIDI4OCAodG90YWwgIyBvZiBjb2RlcylcbiAgICBmb3IgKDsgaSA8IHM7ICsraSkge1xuICAgICAgICBpZiAoY2RbaV0pXG4gICAgICAgICAgICArK2xbY2RbaV0gLSAxXTtcbiAgICB9XG4gICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+IG1pbmltdW0gY29kZSBmb3IgYml0IGxlbmd0aCA9IGluZGV4XG4gICAgdmFyIGxlID0gbmV3IHUxNihtYik7XG4gICAgZm9yIChpID0gMTsgaSA8IG1iOyArK2kpIHtcbiAgICAgICAgbGVbaV0gPSAobGVbaSAtIDFdICsgbFtpIC0gMV0pIDw8IDE7XG4gICAgfVxuICAgIHZhciBjbztcbiAgICBpZiAocikge1xuICAgICAgICAvLyB1MTYgXCJtYXBcIjogaW5kZXggLT4gbnVtYmVyIG9mIGFjdHVhbCBiaXRzLCBzeW1ib2wgZm9yIGNvZGVcbiAgICAgICAgY28gPSBuZXcgdTE2KDEgPDwgbWIpO1xuICAgICAgICAvLyBiaXRzIHRvIHJlbW92ZSBmb3IgcmV2ZXJzZXJcbiAgICAgICAgdmFyIHJ2YiA9IDE1IC0gbWI7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSAwIGxlbmd0aHNcbiAgICAgICAgICAgIGlmIChjZFtpXSkge1xuICAgICAgICAgICAgICAgIC8vIG51bSBlbmNvZGluZyBib3RoIHN5bWJvbCBhbmQgYml0cyByZWFkXG4gICAgICAgICAgICAgICAgdmFyIHN2ID0gKGkgPDwgNCkgfCBjZFtpXTtcbiAgICAgICAgICAgICAgICAvLyBmcmVlIGJpdHNcbiAgICAgICAgICAgICAgICB2YXIgcl8xID0gbWIgLSBjZFtpXTtcbiAgICAgICAgICAgICAgICAvLyBzdGFydCB2YWx1ZVxuICAgICAgICAgICAgICAgIHZhciB2ID0gbGVbY2RbaV0gLSAxXSsrIDw8IHJfMTtcbiAgICAgICAgICAgICAgICAvLyBtIGlzIGVuZCB2YWx1ZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIG0gPSB2IHwgKCgxIDw8IHJfMSkgLSAxKTsgdiA8PSBtOyArK3YpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlcnkgMTYgYml0IHZhbHVlIHN0YXJ0aW5nIHdpdGggdGhlIGNvZGUgeWllbGRzIHRoZSBzYW1lIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICBjb1tyZXZbdl0gPj4gcnZiXSA9IHN2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY28gPSBuZXcgdTE2KHMpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgczsgKytpKSB7XG4gICAgICAgICAgICBpZiAoY2RbaV0pIHtcbiAgICAgICAgICAgICAgICBjb1tpXSA9IHJldltsZVtjZFtpXSAtIDFdKytdID4+ICgxNSAtIGNkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY287XG59KTtcbi8vIGZpeGVkIGxlbmd0aCB0cmVlXG52YXIgZmx0ID0gbmV3IHU4KDI4OCk7XG5mb3IgKHZhciBpID0gMDsgaSA8IDE0NDsgKytpKVxuICAgIGZsdFtpXSA9IDg7XG5mb3IgKHZhciBpID0gMTQ0OyBpIDwgMjU2OyArK2kpXG4gICAgZmx0W2ldID0gOTtcbmZvciAodmFyIGkgPSAyNTY7IGkgPCAyODA7ICsraSlcbiAgICBmbHRbaV0gPSA3O1xuZm9yICh2YXIgaSA9IDI4MDsgaSA8IDI4ODsgKytpKVxuICAgIGZsdFtpXSA9IDg7XG4vLyBmaXhlZCBkaXN0YW5jZSB0cmVlXG52YXIgZmR0ID0gbmV3IHU4KDMyKTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMzI7ICsraSlcbiAgICBmZHRbaV0gPSA1O1xuLy8gZml4ZWQgbGVuZ3RoIG1hcFxudmFyIGZsbSA9IC8qI19fUFVSRV9fKi8gaE1hcChmbHQsIDksIDApLCBmbHJtID0gLyojX19QVVJFX18qLyBoTWFwKGZsdCwgOSwgMSk7XG4vLyBmaXhlZCBkaXN0YW5jZSBtYXBcbnZhciBmZG0gPSAvKiNfX1BVUkVfXyovIGhNYXAoZmR0LCA1LCAwKSwgZmRybSA9IC8qI19fUFVSRV9fKi8gaE1hcChmZHQsIDUsIDEpO1xuLy8gZmluZCBtYXggb2YgYXJyYXlcbnZhciBtYXggPSBmdW5jdGlvbiAoYSkge1xuICAgIHZhciBtID0gYVswXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGFbaV0gPiBtKVxuICAgICAgICAgICAgbSA9IGFbaV07XG4gICAgfVxuICAgIHJldHVybiBtO1xufTtcbi8vIHJlYWQgZCwgc3RhcnRpbmcgYXQgYml0IHAgYW5kIG1hc2sgd2l0aCBtXG52YXIgYml0cyA9IGZ1bmN0aW9uIChkLCBwLCBtKSB7XG4gICAgdmFyIG8gPSAocCAvIDgpIHwgMDtcbiAgICByZXR1cm4gKChkW29dIHwgKGRbbyArIDFdIDw8IDgpKSA+PiAocCAmIDcpKSAmIG07XG59O1xuLy8gcmVhZCBkLCBzdGFydGluZyBhdCBiaXQgcCBjb250aW51aW5nIGZvciBhdCBsZWFzdCAxNiBiaXRzXG52YXIgYml0czE2ID0gZnVuY3Rpb24gKGQsIHApIHtcbiAgICB2YXIgbyA9IChwIC8gOCkgfCAwO1xuICAgIHJldHVybiAoKGRbb10gfCAoZFtvICsgMV0gPDwgOCkgfCAoZFtvICsgMl0gPDwgMTYpKSA+PiAocCAmIDcpKTtcbn07XG4vLyBnZXQgZW5kIG9mIGJ5dGVcbnZhciBzaGZ0ID0gZnVuY3Rpb24gKHApIHsgcmV0dXJuICgocCArIDcpIC8gOCkgfCAwOyB9O1xuLy8gdHlwZWQgYXJyYXkgc2xpY2UgLSBhbGxvd3MgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gZnJlZSBvcmlnaW5hbCByZWZlcmVuY2UsXG4vLyB3aGlsZSBiZWluZyBtb3JlIGNvbXBhdGlibGUgdGhhbiAuc2xpY2VcbnZhciBzbGMgPSBmdW5jdGlvbiAodiwgcywgZSkge1xuICAgIGlmIChzID09IG51bGwgfHwgcyA8IDApXG4gICAgICAgIHMgPSAwO1xuICAgIGlmIChlID09IG51bGwgfHwgZSA+IHYubGVuZ3RoKVxuICAgICAgICBlID0gdi5sZW5ndGg7XG4gICAgLy8gY2FuJ3QgdXNlIC5jb25zdHJ1Y3RvciBpbiBjYXNlIHVzZXItc3VwcGxpZWRcbiAgICByZXR1cm4gbmV3IHU4KHYuc3ViYXJyYXkocywgZSkpO1xufTtcbi8qKlxuICogQ29kZXMgZm9yIGVycm9ycyBnZW5lcmF0ZWQgd2l0aGluIHRoaXMgbGlicmFyeVxuICovXG5leHBvcnQgdmFyIEZsYXRlRXJyb3JDb2RlID0ge1xuICAgIFVuZXhwZWN0ZWRFT0Y6IDAsXG4gICAgSW52YWxpZEJsb2NrVHlwZTogMSxcbiAgICBJbnZhbGlkTGVuZ3RoTGl0ZXJhbDogMixcbiAgICBJbnZhbGlkRGlzdGFuY2U6IDMsXG4gICAgU3RyZWFtRmluaXNoZWQ6IDQsXG4gICAgTm9TdHJlYW1IYW5kbGVyOiA1LFxuICAgIEludmFsaWRIZWFkZXI6IDYsXG4gICAgTm9DYWxsYmFjazogNyxcbiAgICBJbnZhbGlkVVRGODogOCxcbiAgICBFeHRyYUZpZWxkVG9vTG9uZzogOSxcbiAgICBJbnZhbGlkRGF0ZTogMTAsXG4gICAgRmlsZW5hbWVUb29Mb25nOiAxMSxcbiAgICBTdHJlYW1GaW5pc2hpbmc6IDEyLFxuICAgIEludmFsaWRaaXBEYXRhOiAxMyxcbiAgICBVbmtub3duQ29tcHJlc3Npb25NZXRob2Q6IDE0XG59O1xuLy8gZXJyb3IgY29kZXNcbnZhciBlYyA9IFtcbiAgICAndW5leHBlY3RlZCBFT0YnLFxuICAgICdpbnZhbGlkIGJsb2NrIHR5cGUnLFxuICAgICdpbnZhbGlkIGxlbmd0aC9saXRlcmFsJyxcbiAgICAnaW52YWxpZCBkaXN0YW5jZScsXG4gICAgJ3N0cmVhbSBmaW5pc2hlZCcsXG4gICAgJ25vIHN0cmVhbSBoYW5kbGVyJyxcbiAgICAsXG4gICAgJ25vIGNhbGxiYWNrJyxcbiAgICAnaW52YWxpZCBVVEYtOCBkYXRhJyxcbiAgICAnZXh0cmEgZmllbGQgdG9vIGxvbmcnLFxuICAgICdkYXRlIG5vdCBpbiByYW5nZSAxOTgwLTIwOTknLFxuICAgICdmaWxlbmFtZSB0b28gbG9uZycsXG4gICAgJ3N0cmVhbSBmaW5pc2hpbmcnLFxuICAgICdpbnZhbGlkIHppcCBkYXRhJ1xuICAgIC8vIGRldGVybWluZWQgYnkgdW5rbm93biBjb21wcmVzc2lvbiBtZXRob2Rcbl07XG47XG52YXIgZXJyID0gZnVuY3Rpb24gKGluZCwgbXNnLCBudCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyB8fCBlY1tpbmRdKTtcbiAgICBlLmNvZGUgPSBpbmQ7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlLCBlcnIpO1xuICAgIGlmICghbnQpXG4gICAgICAgIHRocm93IGU7XG4gICAgcmV0dXJuIGU7XG59O1xuLy8gZXhwYW5kcyByYXcgREVGTEFURSBkYXRhXG52YXIgaW5mbHQgPSBmdW5jdGlvbiAoZGF0LCBzdCwgYnVmLCBkaWN0KSB7XG4gICAgLy8gc291cmNlIGxlbmd0aCAgICAgICBkaWN0IGxlbmd0aFxuICAgIHZhciBzbCA9IGRhdC5sZW5ndGgsIGRsID0gZGljdCA/IGRpY3QubGVuZ3RoIDogMDtcbiAgICBpZiAoIXNsIHx8IHN0LmYgJiYgIXN0LmwpXG4gICAgICAgIHJldHVybiBidWYgfHwgbmV3IHU4KDApO1xuICAgIHZhciBub0J1ZiA9ICFidWY7XG4gICAgLy8gaGF2ZSB0byBlc3RpbWF0ZSBzaXplXG4gICAgdmFyIHJlc2l6ZSA9IG5vQnVmIHx8IHN0LmkgIT0gMjtcbiAgICAvLyBubyBzdGF0ZVxuICAgIHZhciBub1N0ID0gc3QuaTtcbiAgICAvLyBBc3N1bWVzIHJvdWdobHkgMzMlIGNvbXByZXNzaW9uIHJhdGlvIGF2ZXJhZ2VcbiAgICBpZiAobm9CdWYpXG4gICAgICAgIGJ1ZiA9IG5ldyB1OChzbCAqIDMpO1xuICAgIC8vIGVuc3VyZSBidWZmZXIgY2FuIGZpdCBhdCBsZWFzdCBsIGVsZW1lbnRzXG4gICAgdmFyIGNidWYgPSBmdW5jdGlvbiAobCkge1xuICAgICAgICB2YXIgYmwgPSBidWYubGVuZ3RoO1xuICAgICAgICAvLyBuZWVkIHRvIGluY3JlYXNlIHNpemUgdG8gZml0XG4gICAgICAgIGlmIChsID4gYmwpIHtcbiAgICAgICAgICAgIC8vIERvdWJsZSBvciBzZXQgdG8gbmVjZXNzYXJ5LCB3aGljaGV2ZXIgaXMgZ3JlYXRlclxuICAgICAgICAgICAgdmFyIG5idWYgPSBuZXcgdTgoTWF0aC5tYXgoYmwgKiAyLCBsKSk7XG4gICAgICAgICAgICBuYnVmLnNldChidWYpO1xuICAgICAgICAgICAgYnVmID0gbmJ1ZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gIGxhc3QgY2h1bmsgICAgICAgICBiaXRwb3MgICAgICAgICAgIGJ5dGVzXG4gICAgdmFyIGZpbmFsID0gc3QuZiB8fCAwLCBwb3MgPSBzdC5wIHx8IDAsIGJ0ID0gc3QuYiB8fCAwLCBsbSA9IHN0LmwsIGRtID0gc3QuZCwgbGJ0ID0gc3QubSwgZGJ0ID0gc3QubjtcbiAgICAvLyB0b3RhbCBiaXRzXG4gICAgdmFyIHRidHMgPSBzbCAqIDg7XG4gICAgZG8ge1xuICAgICAgICBpZiAoIWxtKSB7XG4gICAgICAgICAgICAvLyBCRklOQUwgLSB0aGlzIGlzIG9ubHkgMSB3aGVuIGxhc3QgY2h1bmsgaXMgbmV4dFxuICAgICAgICAgICAgZmluYWwgPSBiaXRzKGRhdCwgcG9zLCAxKTtcbiAgICAgICAgICAgIC8vIHR5cGU6IDAgPSBubyBjb21wcmVzc2lvbiwgMSA9IGZpeGVkIGh1ZmZtYW4sIDIgPSBkeW5hbWljIGh1ZmZtYW5cbiAgICAgICAgICAgIHZhciB0eXBlID0gYml0cyhkYXQsIHBvcyArIDEsIDMpO1xuICAgICAgICAgICAgcG9zICs9IDM7XG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBnbyB0byBlbmQgb2YgYnl0ZSBib3VuZGFyeVxuICAgICAgICAgICAgICAgIHZhciBzID0gc2hmdChwb3MpICsgNCwgbCA9IGRhdFtzIC0gNF0gfCAoZGF0W3MgLSAzXSA8PCA4KSwgdCA9IHMgKyBsO1xuICAgICAgICAgICAgICAgIGlmICh0ID4gc2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vU3QpXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbnN1cmUgc2l6ZVxuICAgICAgICAgICAgICAgIGlmIChyZXNpemUpXG4gICAgICAgICAgICAgICAgICAgIGNidWYoYnQgKyBsKTtcbiAgICAgICAgICAgICAgICAvLyBDb3B5IG92ZXIgdW5jb21wcmVzc2VkIGRhdGFcbiAgICAgICAgICAgICAgICBidWYuc2V0KGRhdC5zdWJhcnJheShzLCB0KSwgYnQpO1xuICAgICAgICAgICAgICAgIC8vIEdldCBuZXcgYml0cG9zLCB1cGRhdGUgYnl0ZSBjb3VudFxuICAgICAgICAgICAgICAgIHN0LmIgPSBidCArPSBsLCBzdC5wID0gcG9zID0gdCAqIDgsIHN0LmYgPSBmaW5hbDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMSlcbiAgICAgICAgICAgICAgICBsbSA9IGZscm0sIGRtID0gZmRybSwgbGJ0ID0gOSwgZGJ0ID0gNTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMikge1xuICAgICAgICAgICAgICAgIC8vICBsaXRlcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aHNcbiAgICAgICAgICAgICAgICB2YXIgaExpdCA9IGJpdHMoZGF0LCBwb3MsIDMxKSArIDI1NywgaGNMZW4gPSBiaXRzKGRhdCwgcG9zICsgMTAsIDE1KSArIDQ7XG4gICAgICAgICAgICAgICAgdmFyIHRsID0gaExpdCArIGJpdHMoZGF0LCBwb3MgKyA1LCAzMSkgKyAxO1xuICAgICAgICAgICAgICAgIHBvcyArPSAxNDtcbiAgICAgICAgICAgICAgICAvLyBsZW5ndGgrZGlzdGFuY2UgdHJlZVxuICAgICAgICAgICAgICAgIHZhciBsZHQgPSBuZXcgdTgodGwpO1xuICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RoIHRyZWVcbiAgICAgICAgICAgICAgICB2YXIgY2x0ID0gbmV3IHU4KDE5KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhjTGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGluZGV4IG1hcCB0byBnZXQgcmVhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgIGNsdFtjbGltW2ldXSA9IGJpdHMoZGF0LCBwb3MgKyBpICogMywgNyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvcyArPSBoY0xlbiAqIDM7XG4gICAgICAgICAgICAgICAgLy8gY29kZSBsZW5ndGhzIGJpdHNcbiAgICAgICAgICAgICAgICB2YXIgY2xiID0gbWF4KGNsdCksIGNsYm1zayA9ICgxIDw8IGNsYikgLSAxO1xuICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RocyBtYXBcbiAgICAgICAgICAgICAgICB2YXIgY2xtID0gaE1hcChjbHQsIGNsYiwgMSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0bDspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBjbG1bYml0cyhkYXQsIHBvcywgY2xibXNrKV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgcmVhZFxuICAgICAgICAgICAgICAgICAgICBwb3MgKz0gciAmIDE1O1xuICAgICAgICAgICAgICAgICAgICAvLyBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSByID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RoIHRvIGNvcHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGR0W2krK10gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGNvcHkgICBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSAwLCBuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09IDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAzICsgYml0cyhkYXQsIHBvcywgMyksIHBvcyArPSAyLCBjID0gbGR0W2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMgPT0gMTcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDMgKyBiaXRzKGRhdCwgcG9zLCA3KSwgcG9zICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzID09IDE4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxMSArIGJpdHMoZGF0LCBwb3MsIDEyNyksIHBvcyArPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4tLSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZHRbaSsrXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgbGVuZ3RoIHRyZWUgICAgICAgICAgICAgICAgIGRpc3RhbmNlIHRyZWVcbiAgICAgICAgICAgICAgICB2YXIgbHQgPSBsZHQuc3ViYXJyYXkoMCwgaExpdCksIGR0ID0gbGR0LnN1YmFycmF5KGhMaXQpO1xuICAgICAgICAgICAgICAgIC8vIG1heCBsZW5ndGggYml0c1xuICAgICAgICAgICAgICAgIGxidCA9IG1heChsdCk7XG4gICAgICAgICAgICAgICAgLy8gbWF4IGRpc3QgYml0c1xuICAgICAgICAgICAgICAgIGRidCA9IG1heChkdCk7XG4gICAgICAgICAgICAgICAgbG0gPSBoTWFwKGx0LCBsYnQsIDEpO1xuICAgICAgICAgICAgICAgIGRtID0gaE1hcChkdCwgZGJ0LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBlcnIoMSk7XG4gICAgICAgICAgICBpZiAocG9zID4gdGJ0cykge1xuICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBidWZmZXIgY2FuIGhvbGQgdGhpcyArIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGFkZGl0aW9uXG4gICAgICAgIC8vIE1heGltdW0gY2h1bmsgc2l6ZSAocHJhY3RpY2FsbHksIHRoZW9yZXRpY2FsbHkgaW5maW5pdGUpIGlzIDJeMTdcbiAgICAgICAgaWYgKHJlc2l6ZSlcbiAgICAgICAgICAgIGNidWYoYnQgKyAxMzEwNzIpO1xuICAgICAgICB2YXIgbG1zID0gKDEgPDwgbGJ0KSAtIDEsIGRtcyA9ICgxIDw8IGRidCkgLSAxO1xuICAgICAgICB2YXIgbHBvcyA9IHBvcztcbiAgICAgICAgZm9yICg7OyBscG9zID0gcG9zKSB7XG4gICAgICAgICAgICAvLyBiaXRzIHJlYWQsIGNvZGVcbiAgICAgICAgICAgIHZhciBjID0gbG1bYml0czE2KGRhdCwgcG9zKSAmIGxtc10sIHN5bSA9IGMgPj4gNDtcbiAgICAgICAgICAgIHBvcyArPSBjICYgMTU7XG4gICAgICAgICAgICBpZiAocG9zID4gdGJ0cykge1xuICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgICAgZXJyKDIpO1xuICAgICAgICAgICAgaWYgKHN5bSA8IDI1NilcbiAgICAgICAgICAgICAgICBidWZbYnQrK10gPSBzeW07XG4gICAgICAgICAgICBlbHNlIGlmIChzeW0gPT0gMjU2KSB7XG4gICAgICAgICAgICAgICAgbHBvcyA9IHBvcywgbG0gPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IHN5bSAtIDI1NDtcbiAgICAgICAgICAgICAgICAvLyBubyBleHRyYSBiaXRzIG5lZWRlZCBpZiBsZXNzXG4gICAgICAgICAgICAgICAgaWYgKHN5bSA+IDI2NCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmRleFxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHN5bSAtIDI1NywgYiA9IGZsZWJbaV07XG4gICAgICAgICAgICAgICAgICAgIGFkZCA9IGJpdHMoZGF0LCBwb3MsICgxIDw8IGIpIC0gMSkgKyBmbFtpXTtcbiAgICAgICAgICAgICAgICAgICAgcG9zICs9IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRpc3RcbiAgICAgICAgICAgICAgICB2YXIgZCA9IGRtW2JpdHMxNihkYXQsIHBvcykgJiBkbXNdLCBkc3ltID0gZCA+PiA0O1xuICAgICAgICAgICAgICAgIGlmICghZClcbiAgICAgICAgICAgICAgICAgICAgZXJyKDMpO1xuICAgICAgICAgICAgICAgIHBvcyArPSBkICYgMTU7XG4gICAgICAgICAgICAgICAgdmFyIGR0ID0gZmRbZHN5bV07XG4gICAgICAgICAgICAgICAgaWYgKGRzeW0gPiAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiID0gZmRlYltkc3ltXTtcbiAgICAgICAgICAgICAgICAgICAgZHQgKz0gYml0czE2KGRhdCwgcG9zKSAmICgxIDw8IGIpIC0gMSwgcG9zICs9IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb3MgPiB0YnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyKDApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgY2J1ZihidCArIDEzMTA3Mik7XG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IGJ0ICsgYWRkO1xuICAgICAgICAgICAgICAgIGlmIChidCA8IGR0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGlmdCA9IGRsIC0gZHQsIGRlbmQgPSBNYXRoLm1pbihkdCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0ICsgYnQgPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyKDMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYnQgPCBkZW5kOyArK2J0KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmW2J0XSA9IGRpY3Rbc2hpZnQgKyBidF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoOyBidCA8IGVuZDsgKytidClcbiAgICAgICAgICAgICAgICAgICAgYnVmW2J0XSA9IGJ1ZltidCAtIGR0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdC5sID0gbG0sIHN0LnAgPSBscG9zLCBzdC5iID0gYnQsIHN0LmYgPSBmaW5hbDtcbiAgICAgICAgaWYgKGxtKVxuICAgICAgICAgICAgZmluYWwgPSAxLCBzdC5tID0gbGJ0LCBzdC5kID0gZG0sIHN0Lm4gPSBkYnQ7XG4gICAgfSB3aGlsZSAoIWZpbmFsKTtcbiAgICAvLyBkb24ndCByZWFsbG9jYXRlIGZvciBzdHJlYW1zIG9yIHVzZXIgYnVmZmVyc1xuICAgIHJldHVybiBidCAhPSBidWYubGVuZ3RoICYmIG5vQnVmID8gc2xjKGJ1ZiwgMCwgYnQpIDogYnVmLnN1YmFycmF5KDAsIGJ0KTtcbn07XG4vLyBzdGFydGluZyBhdCBwLCB3cml0ZSB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyB0aGF0IGNhbiBob2xkIHYgdG8gZFxudmFyIHdiaXRzID0gZnVuY3Rpb24gKGQsIHAsIHYpIHtcbiAgICB2IDw8PSBwICYgNztcbiAgICB2YXIgbyA9IChwIC8gOCkgfCAwO1xuICAgIGRbb10gfD0gdjtcbiAgICBkW28gKyAxXSB8PSB2ID4+IDg7XG59O1xuLy8gc3RhcnRpbmcgYXQgcCwgd3JpdGUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJpdHMgKD44KSB0aGF0IGNhbiBob2xkIHYgdG8gZFxudmFyIHdiaXRzMTYgPSBmdW5jdGlvbiAoZCwgcCwgdikge1xuICAgIHYgPDw9IHAgJiA3O1xuICAgIHZhciBvID0gKHAgLyA4KSB8IDA7XG4gICAgZFtvXSB8PSB2O1xuICAgIGRbbyArIDFdIHw9IHYgPj4gODtcbiAgICBkW28gKyAyXSB8PSB2ID4+IDE2O1xufTtcbi8vIGNyZWF0ZXMgY29kZSBsZW5ndGhzIGZyb20gYSBmcmVxdWVuY3kgdGFibGVcbnZhciBoVHJlZSA9IGZ1bmN0aW9uIChkLCBtYikge1xuICAgIC8vIE5lZWQgZXh0cmEgaW5mbyB0byBtYWtlIGEgdHJlZVxuICAgIHZhciB0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChkW2ldKVxuICAgICAgICAgICAgdC5wdXNoKHsgczogaSwgZjogZFtpXSB9KTtcbiAgICB9XG4gICAgdmFyIHMgPSB0Lmxlbmd0aDtcbiAgICB2YXIgdDIgPSB0LnNsaWNlKCk7XG4gICAgaWYgKCFzKVxuICAgICAgICByZXR1cm4geyB0OiBldCwgbDogMCB9O1xuICAgIGlmIChzID09IDEpIHtcbiAgICAgICAgdmFyIHYgPSBuZXcgdTgodFswXS5zICsgMSk7XG4gICAgICAgIHZbdFswXS5zXSA9IDE7XG4gICAgICAgIHJldHVybiB7IHQ6IHYsIGw6IDEgfTtcbiAgICB9XG4gICAgdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmYgLSBiLmY7IH0pO1xuICAgIC8vIGFmdGVyIGkyIHJlYWNoZXMgbGFzdCBpbmQsIHdpbGwgYmUgc3RvcHBlZFxuICAgIC8vIGZyZXEgbXVzdCBiZSBncmVhdGVyIHRoYW4gbGFyZ2VzdCBwb3NzaWJsZSBudW1iZXIgb2Ygc3ltYm9sc1xuICAgIHQucHVzaCh7IHM6IC0xLCBmOiAyNTAwMSB9KTtcbiAgICB2YXIgbCA9IHRbMF0sIHIgPSB0WzFdLCBpMCA9IDAsIGkxID0gMSwgaTIgPSAyO1xuICAgIHRbMF0gPSB7IHM6IC0xLCBmOiBsLmYgKyByLmYsIGw6IGwsIHI6IHIgfTtcbiAgICAvLyBlZmZpY2llbnQgYWxnb3JpdGhtIGZyb20gVVpJUC5qc1xuICAgIC8vIGkwIGlzIGxvb2tiZWhpbmQsIGkyIGlzIGxvb2thaGVhZCAtIGFmdGVyIHByb2Nlc3NpbmcgdHdvIGxvdy1mcmVxXG4gICAgLy8gc3ltYm9scyB0aGF0IGNvbWJpbmVkIGhhdmUgaGlnaCBmcmVxLCB3aWxsIHN0YXJ0IHByb2Nlc3NpbmcgaTIgKGhpZ2gtZnJlcSxcbiAgICAvLyBub24tY29tcG9zaXRlKSBzeW1ib2xzIGluc3RlYWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9yZWRkaXQuY29tL3IvcGhvdG9wZWEvY29tbWVudHMvaWtla2h0L3V6aXBqc19xdWVzdGlvbnMvXG4gICAgd2hpbGUgKGkxICE9IHMgLSAxKSB7XG4gICAgICAgIGwgPSB0W3RbaTBdLmYgPCB0W2kyXS5mID8gaTArKyA6IGkyKytdO1xuICAgICAgICByID0gdFtpMCAhPSBpMSAmJiB0W2kwXS5mIDwgdFtpMl0uZiA/IGkwKysgOiBpMisrXTtcbiAgICAgICAgdFtpMSsrXSA9IHsgczogLTEsIGY6IGwuZiArIHIuZiwgbDogbCwgcjogciB9O1xuICAgIH1cbiAgICB2YXIgbWF4U3ltID0gdDJbMF0ucztcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHM7ICsraSkge1xuICAgICAgICBpZiAodDJbaV0ucyA+IG1heFN5bSlcbiAgICAgICAgICAgIG1heFN5bSA9IHQyW2ldLnM7XG4gICAgfVxuICAgIC8vIGNvZGUgbGVuZ3Roc1xuICAgIHZhciB0ciA9IG5ldyB1MTYobWF4U3ltICsgMSk7XG4gICAgLy8gbWF4IGJpdHMgaW4gdHJlZVxuICAgIHZhciBtYnQgPSBsbih0W2kxIC0gMV0sIHRyLCAwKTtcbiAgICBpZiAobWJ0ID4gbWIpIHtcbiAgICAgICAgLy8gbW9yZSBhbGdvcml0aG1zIGZyb20gVVpJUC5qc1xuICAgICAgICAvLyBUT0RPOiBmaW5kIG91dCBob3cgdGhpcyBjb2RlIHdvcmtzIChkZWJ0KVxuICAgICAgICAvLyAgaW5kICAgIGRlYnRcbiAgICAgICAgdmFyIGkgPSAwLCBkdCA9IDA7XG4gICAgICAgIC8vICAgIGxlZnQgICAgICAgICAgICBjb3N0XG4gICAgICAgIHZhciBsZnQgPSBtYnQgLSBtYiwgY3N0ID0gMSA8PCBsZnQ7XG4gICAgICAgIHQyLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRyW2Iuc10gLSB0clthLnNdIHx8IGEuZiAtIGIuZjsgfSk7XG4gICAgICAgIGZvciAoOyBpIDwgczsgKytpKSB7XG4gICAgICAgICAgICB2YXIgaTJfMSA9IHQyW2ldLnM7XG4gICAgICAgICAgICBpZiAodHJbaTJfMV0gPiBtYikge1xuICAgICAgICAgICAgICAgIGR0ICs9IGNzdCAtICgxIDw8IChtYnQgLSB0cltpMl8xXSkpO1xuICAgICAgICAgICAgICAgIHRyW2kyXzFdID0gbWI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZHQgPj49IGxmdDtcbiAgICAgICAgd2hpbGUgKGR0ID4gMCkge1xuICAgICAgICAgICAgdmFyIGkyXzIgPSB0MltpXS5zO1xuICAgICAgICAgICAgaWYgKHRyW2kyXzJdIDwgbWIpXG4gICAgICAgICAgICAgICAgZHQgLT0gMSA8PCAobWIgLSB0cltpMl8yXSsrIC0gMSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyBpID49IDAgJiYgZHQ7IC0taSkge1xuICAgICAgICAgICAgdmFyIGkyXzMgPSB0MltpXS5zO1xuICAgICAgICAgICAgaWYgKHRyW2kyXzNdID09IG1iKSB7XG4gICAgICAgICAgICAgICAgLS10cltpMl8zXTtcbiAgICAgICAgICAgICAgICArK2R0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1idCA9IG1iO1xuICAgIH1cbiAgICByZXR1cm4geyB0OiBuZXcgdTgodHIpLCBsOiBtYnQgfTtcbn07XG4vLyBnZXQgdGhlIG1heCBsZW5ndGggYW5kIGFzc2lnbiBsZW5ndGggY29kZXNcbnZhciBsbiA9IGZ1bmN0aW9uIChuLCBsLCBkKSB7XG4gICAgcmV0dXJuIG4ucyA9PSAtMVxuICAgICAgICA/IE1hdGgubWF4KGxuKG4ubCwgbCwgZCArIDEpLCBsbihuLnIsIGwsIGQgKyAxKSlcbiAgICAgICAgOiAobFtuLnNdID0gZCk7XG59O1xuLy8gbGVuZ3RoIGNvZGVzIGdlbmVyYXRpb25cbnZhciBsYyA9IGZ1bmN0aW9uIChjKSB7XG4gICAgdmFyIHMgPSBjLmxlbmd0aDtcbiAgICAvLyBOb3RlIHRoYXQgdGhlIHNlbWljb2xvbiB3YXMgaW50ZW50aW9uYWxcbiAgICB3aGlsZSAocyAmJiAhY1stLXNdKVxuICAgICAgICA7XG4gICAgdmFyIGNsID0gbmV3IHUxNigrK3MpO1xuICAgIC8vICBpbmQgICAgICBudW0gICAgICAgICBzdHJlYWtcbiAgICB2YXIgY2xpID0gMCwgY2xuID0gY1swXSwgY2xzID0gMTtcbiAgICB2YXIgdyA9IGZ1bmN0aW9uICh2KSB7IGNsW2NsaSsrXSA9IHY7IH07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gczsgKytpKSB7XG4gICAgICAgIGlmIChjW2ldID09IGNsbiAmJiBpICE9IHMpXG4gICAgICAgICAgICArK2NscztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWNsbiAmJiBjbHMgPiAyKSB7XG4gICAgICAgICAgICAgICAgZm9yICg7IGNscyA+IDEzODsgY2xzIC09IDEzOClcbiAgICAgICAgICAgICAgICAgICAgdygzMjc1NCk7XG4gICAgICAgICAgICAgICAgaWYgKGNscyA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdyhjbHMgPiAxMCA/ICgoY2xzIC0gMTEpIDw8IDUpIHwgMjg2OTAgOiAoKGNscyAtIDMpIDw8IDUpIHwgMTIzMDUpO1xuICAgICAgICAgICAgICAgICAgICBjbHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNscyA+IDMpIHtcbiAgICAgICAgICAgICAgICB3KGNsbiksIC0tY2xzO1xuICAgICAgICAgICAgICAgIGZvciAoOyBjbHMgPiA2OyBjbHMgLT0gNilcbiAgICAgICAgICAgICAgICAgICAgdyg4MzA0KTtcbiAgICAgICAgICAgICAgICBpZiAoY2xzID4gMilcbiAgICAgICAgICAgICAgICAgICAgdygoKGNscyAtIDMpIDw8IDUpIHwgODIwOCksIGNscyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2xzLS0pXG4gICAgICAgICAgICAgICAgdyhjbG4pO1xuICAgICAgICAgICAgY2xzID0gMTtcbiAgICAgICAgICAgIGNsbiA9IGNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYzogY2wuc3ViYXJyYXkoMCwgY2xpKSwgbjogcyB9O1xufTtcbi8vIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIG91dHB1dCBmcm9tIHRyZWUsIGNvZGUgbGVuZ3Roc1xudmFyIGNsZW4gPSBmdW5jdGlvbiAoY2YsIGNsKSB7XG4gICAgdmFyIGwgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2wubGVuZ3RoOyArK2kpXG4gICAgICAgIGwgKz0gY2ZbaV0gKiBjbFtpXTtcbiAgICByZXR1cm4gbDtcbn07XG4vLyB3cml0ZXMgYSBmaXhlZCBibG9ja1xuLy8gcmV0dXJucyB0aGUgbmV3IGJpdCBwb3NcbnZhciB3ZmJsayA9IGZ1bmN0aW9uIChvdXQsIHBvcywgZGF0KSB7XG4gICAgLy8gbm8gbmVlZCB0byB3cml0ZSAwMCBhcyB0eXBlOiBUeXBlZEFycmF5IGRlZmF1bHRzIHRvIDBcbiAgICB2YXIgcyA9IGRhdC5sZW5ndGg7XG4gICAgdmFyIG8gPSBzaGZ0KHBvcyArIDIpO1xuICAgIG91dFtvXSA9IHMgJiAyNTU7XG4gICAgb3V0W28gKyAxXSA9IHMgPj4gODtcbiAgICBvdXRbbyArIDJdID0gb3V0W29dIF4gMjU1O1xuICAgIG91dFtvICsgM10gPSBvdXRbbyArIDFdIF4gMjU1O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgKytpKVxuICAgICAgICBvdXRbbyArIGkgKyA0XSA9IGRhdFtpXTtcbiAgICByZXR1cm4gKG8gKyA0ICsgcykgKiA4O1xufTtcbi8vIHdyaXRlcyBhIGJsb2NrXG52YXIgd2JsayA9IGZ1bmN0aW9uIChkYXQsIG91dCwgZmluYWwsIHN5bXMsIGxmLCBkZiwgZWIsIGxpLCBicywgYmwsIHApIHtcbiAgICB3Yml0cyhvdXQsIHArKywgZmluYWwpO1xuICAgICsrbGZbMjU2XTtcbiAgICB2YXIgX2EgPSBoVHJlZShsZiwgMTUpLCBkbHQgPSBfYS50LCBtbGIgPSBfYS5sO1xuICAgIHZhciBfYiA9IGhUcmVlKGRmLCAxNSksIGRkdCA9IF9iLnQsIG1kYiA9IF9iLmw7XG4gICAgdmFyIF9jID0gbGMoZGx0KSwgbGNsdCA9IF9jLmMsIG5sYyA9IF9jLm47XG4gICAgdmFyIF9kID0gbGMoZGR0KSwgbGNkdCA9IF9kLmMsIG5kYyA9IF9kLm47XG4gICAgdmFyIGxjZnJlcSA9IG5ldyB1MTYoMTkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGNsdC5sZW5ndGg7ICsraSlcbiAgICAgICAgKytsY2ZyZXFbbGNsdFtpXSAmIDMxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxjZHQubGVuZ3RoOyArK2kpXG4gICAgICAgICsrbGNmcmVxW2xjZHRbaV0gJiAzMV07XG4gICAgdmFyIF9lID0gaFRyZWUobGNmcmVxLCA3KSwgbGN0ID0gX2UudCwgbWxjYiA9IF9lLmw7XG4gICAgdmFyIG5sY2MgPSAxOTtcbiAgICBmb3IgKDsgbmxjYyA+IDQgJiYgIWxjdFtjbGltW25sY2MgLSAxXV07IC0tbmxjYylcbiAgICAgICAgO1xuICAgIHZhciBmbGVuID0gKGJsICsgNSkgPDwgMztcbiAgICB2YXIgZnRsZW4gPSBjbGVuKGxmLCBmbHQpICsgY2xlbihkZiwgZmR0KSArIGViO1xuICAgIHZhciBkdGxlbiA9IGNsZW4obGYsIGRsdCkgKyBjbGVuKGRmLCBkZHQpICsgZWIgKyAxNCArIDMgKiBubGNjICsgY2xlbihsY2ZyZXEsIGxjdCkgKyAyICogbGNmcmVxWzE2XSArIDMgKiBsY2ZyZXFbMTddICsgNyAqIGxjZnJlcVsxOF07XG4gICAgaWYgKGJzID49IDAgJiYgZmxlbiA8PSBmdGxlbiAmJiBmbGVuIDw9IGR0bGVuKVxuICAgICAgICByZXR1cm4gd2ZibGsob3V0LCBwLCBkYXQuc3ViYXJyYXkoYnMsIGJzICsgYmwpKTtcbiAgICB2YXIgbG0sIGxsLCBkbSwgZGw7XG4gICAgd2JpdHMob3V0LCBwLCAxICsgKGR0bGVuIDwgZnRsZW4pKSwgcCArPSAyO1xuICAgIGlmIChkdGxlbiA8IGZ0bGVuKSB7XG4gICAgICAgIGxtID0gaE1hcChkbHQsIG1sYiwgMCksIGxsID0gZGx0LCBkbSA9IGhNYXAoZGR0LCBtZGIsIDApLCBkbCA9IGRkdDtcbiAgICAgICAgdmFyIGxsbSA9IGhNYXAobGN0LCBtbGNiLCAwKTtcbiAgICAgICAgd2JpdHMob3V0LCBwLCBubGMgLSAyNTcpO1xuICAgICAgICB3Yml0cyhvdXQsIHAgKyA1LCBuZGMgLSAxKTtcbiAgICAgICAgd2JpdHMob3V0LCBwICsgMTAsIG5sY2MgLSA0KTtcbiAgICAgICAgcCArPSAxNDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBubGNjOyArK2kpXG4gICAgICAgICAgICB3Yml0cyhvdXQsIHAgKyAzICogaSwgbGN0W2NsaW1baV1dKTtcbiAgICAgICAgcCArPSAzICogbmxjYztcbiAgICAgICAgdmFyIGxjdHMgPSBbbGNsdCwgbGNkdF07XG4gICAgICAgIGZvciAodmFyIGl0ID0gMDsgaXQgPCAyOyArK2l0KSB7XG4gICAgICAgICAgICB2YXIgY2xjdCA9IGxjdHNbaXRdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGNsY3RbaV0gJiAzMTtcbiAgICAgICAgICAgICAgICB3Yml0cyhvdXQsIHAsIGxsbVtsZW5dKSwgcCArPSBsY3RbbGVuXTtcbiAgICAgICAgICAgICAgICBpZiAobGVuID4gMTUpXG4gICAgICAgICAgICAgICAgICAgIHdiaXRzKG91dCwgcCwgKGNsY3RbaV0gPj4gNSkgJiAxMjcpLCBwICs9IGNsY3RbaV0gPj4gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxtID0gZmxtLCBsbCA9IGZsdCwgZG0gPSBmZG0sIGRsID0gZmR0O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpOyArK2kpIHtcbiAgICAgICAgdmFyIHN5bSA9IHN5bXNbaV07XG4gICAgICAgIGlmIChzeW0gPiAyNTUpIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAoc3ltID4+IDE4KSAmIDMxO1xuICAgICAgICAgICAgd2JpdHMxNihvdXQsIHAsIGxtW2xlbiArIDI1N10pLCBwICs9IGxsW2xlbiArIDI1N107XG4gICAgICAgICAgICBpZiAobGVuID4gNylcbiAgICAgICAgICAgICAgICB3Yml0cyhvdXQsIHAsIChzeW0gPj4gMjMpICYgMzEpLCBwICs9IGZsZWJbbGVuXTtcbiAgICAgICAgICAgIHZhciBkc3QgPSBzeW0gJiAzMTtcbiAgICAgICAgICAgIHdiaXRzMTYob3V0LCBwLCBkbVtkc3RdKSwgcCArPSBkbFtkc3RdO1xuICAgICAgICAgICAgaWYgKGRzdCA+IDMpXG4gICAgICAgICAgICAgICAgd2JpdHMxNihvdXQsIHAsIChzeW0gPj4gNSkgJiA4MTkxKSwgcCArPSBmZGViW2RzdF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB3Yml0czE2KG91dCwgcCwgbG1bc3ltXSksIHAgKz0gbGxbc3ltXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3Yml0czE2KG91dCwgcCwgbG1bMjU2XSk7XG4gICAgcmV0dXJuIHAgKyBsbFsyNTZdO1xufTtcbi8vIGRlZmxhdGUgb3B0aW9ucyAobmljZSA8PCAxMykgfCBjaGFpblxudmFyIGRlbyA9IC8qI19fUFVSRV9fKi8gbmV3IGkzMihbNjU1NDAsIDEzMTA4MCwgMTMxMDg4LCAxMzExMDQsIDI2MjE3NiwgMTA0ODcwNCwgMTA0ODgzMiwgMjExNDU2MCwgMjExNzYzMl0pO1xuLy8gZW1wdHlcbnZhciBldCA9IC8qI19fUFVSRV9fKi8gbmV3IHU4KDApO1xuLy8gY29tcHJlc3NlcyBkYXRhIGludG8gYSByYXcgREVGTEFURSBidWZmZXJcbnZhciBkZmx0ID0gZnVuY3Rpb24gKGRhdCwgbHZsLCBwbHZsLCBwcmUsIHBvc3QsIHN0KSB7XG4gICAgdmFyIHMgPSBzdC56IHx8IGRhdC5sZW5ndGg7XG4gICAgdmFyIG8gPSBuZXcgdTgocHJlICsgcyArIDUgKiAoMSArIE1hdGguY2VpbChzIC8gNzAwMCkpICsgcG9zdCk7XG4gICAgLy8gd3JpdGluZyB0byB0aGlzIHdyaXRlcyB0byB0aGUgb3V0cHV0IGJ1ZmZlclxuICAgIHZhciB3ID0gby5zdWJhcnJheShwcmUsIG8ubGVuZ3RoIC0gcG9zdCk7XG4gICAgdmFyIGxzdCA9IHN0Lmw7XG4gICAgdmFyIHBvcyA9IChzdC5yIHx8IDApICYgNztcbiAgICBpZiAobHZsKSB7XG4gICAgICAgIGlmIChwb3MpXG4gICAgICAgICAgICB3WzBdID0gc3QuciA+PiAzO1xuICAgICAgICB2YXIgb3B0ID0gZGVvW2x2bCAtIDFdO1xuICAgICAgICB2YXIgbiA9IG9wdCA+PiAxMywgYyA9IG9wdCAmIDgxOTE7XG4gICAgICAgIHZhciBtc2tfMSA9ICgxIDw8IHBsdmwpIC0gMTtcbiAgICAgICAgLy8gICAgcHJldiAyLWJ5dGUgdmFsIG1hcCAgICBjdXJyIDItYnl0ZSB2YWwgbWFwXG4gICAgICAgIHZhciBwcmV2ID0gc3QucCB8fCBuZXcgdTE2KDMyNzY4KSwgaGVhZCA9IHN0LmggfHwgbmV3IHUxNihtc2tfMSArIDEpO1xuICAgICAgICB2YXIgYnMxXzEgPSBNYXRoLmNlaWwocGx2bCAvIDMpLCBiczJfMSA9IDIgKiBiczFfMTtcbiAgICAgICAgdmFyIGhzaCA9IGZ1bmN0aW9uIChpKSB7IHJldHVybiAoZGF0W2ldIF4gKGRhdFtpICsgMV0gPDwgYnMxXzEpIF4gKGRhdFtpICsgMl0gPDwgYnMyXzEpKSAmIG1za18xOyB9O1xuICAgICAgICAvLyAyNDU3NiBpcyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG1heGltdW0gc3ltYm9scyBwZXIgYmxvY2tcbiAgICAgICAgLy8gNDI0IGJ1ZmZlciBmb3IgbGFzdCBibG9ja1xuICAgICAgICB2YXIgc3ltcyA9IG5ldyBpMzIoMjUwMDApO1xuICAgICAgICAvLyBsZW5ndGgvbGl0ZXJhbCBmcmVxICAgZGlzdGFuY2UgZnJlcVxuICAgICAgICB2YXIgbGYgPSBuZXcgdTE2KDI4OCksIGRmID0gbmV3IHUxNigzMik7XG4gICAgICAgIC8vICBsL2xjbnQgIGV4Yml0cyAgaW5kZXggICAgICAgICAgbC9saW5kICB3YWl0ZHggICAgICAgICAgYmxrcG9zXG4gICAgICAgIHZhciBsY18xID0gMCwgZWIgPSAwLCBpID0gc3QuaSB8fCAwLCBsaSA9IDAsIHdpID0gc3QudyB8fCAwLCBicyA9IDA7XG4gICAgICAgIGZvciAoOyBpICsgMiA8IHM7ICsraSkge1xuICAgICAgICAgICAgLy8gaGFzaCB2YWx1ZVxuICAgICAgICAgICAgdmFyIGh2ID0gaHNoKGkpO1xuICAgICAgICAgICAgLy8gaW5kZXggbW9kIDMyNzY4ICAgIHByZXZpb3VzIGluZGV4IG1vZFxuICAgICAgICAgICAgdmFyIGltb2QgPSBpICYgMzI3NjcsIHBpbW9kID0gaGVhZFtodl07XG4gICAgICAgICAgICBwcmV2W2ltb2RdID0gcGltb2Q7XG4gICAgICAgICAgICBoZWFkW2h2XSA9IGltb2Q7XG4gICAgICAgICAgICAvLyBXZSBhbHdheXMgc2hvdWxkIG1vZGlmeSBoZWFkIGFuZCBwcmV2LCBidXQgb25seSBhZGQgc3ltYm9scyBpZlxuICAgICAgICAgICAgLy8gdGhpcyBkYXRhIGlzIG5vdCB5ZXQgcHJvY2Vzc2VkIChcIndhaXRcIiBmb3Igd2FpdCBpbmRleClcbiAgICAgICAgICAgIGlmICh3aSA8PSBpKSB7XG4gICAgICAgICAgICAgICAgLy8gYnl0ZXMgcmVtYWluaW5nXG4gICAgICAgICAgICAgICAgdmFyIHJlbSA9IHMgLSBpO1xuICAgICAgICAgICAgICAgIGlmICgobGNfMSA+IDcwMDAgfHwgbGkgPiAyNDU3NikgJiYgKHJlbSA+IDQyMyB8fCAhbHN0KSkge1xuICAgICAgICAgICAgICAgICAgICBwb3MgPSB3YmxrKGRhdCwgdywgMCwgc3ltcywgbGYsIGRmLCBlYiwgbGksIGJzLCBpIC0gYnMsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIGxpID0gbGNfMSA9IGViID0gMCwgYnMgPSBpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDI4NjsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGZbal0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDMwOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICBkZltqXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICBsZW4gICAgZGlzdCAgIGNoYWluXG4gICAgICAgICAgICAgICAgdmFyIGwgPSAyLCBkID0gMCwgY2hfMSA9IGMsIGRpZiA9IGltb2QgLSBwaW1vZCAmIDMyNzY3O1xuICAgICAgICAgICAgICAgIGlmIChyZW0gPiAyICYmIGh2ID09IGhzaChpIC0gZGlmKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4biA9IE1hdGgubWluKG4sIHJlbSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ZCA9IE1hdGgubWluKDMyNzY3LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHBvc3NpYmxlIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAvLyBub3QgY2FwcGVkIGF0IGRpZiBiZWNhdXNlIGRlY29tcHJlc3NvcnMgaW1wbGVtZW50IFwicm9sbGluZ1wiIGluZGV4IHBvcHVsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1sID0gTWF0aC5taW4oMjU4LCByZW0pO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlmIDw9IG1heGQgJiYgLS1jaF8xICYmIGltb2QgIT0gcGltb2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRbaSArIGxdID09IGRhdFtpICsgbCAtIGRpZl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmwgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBubCA8IG1sICYmIGRhdFtpICsgbmxdID09IGRhdFtpICsgbmwgLSBkaWZdOyArK25sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5sID4gbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbmwsIGQgPSBkaWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJyZWFrIG91dCBlYXJseSB3aGVuIHdlIHJlYWNoIFwibmljZVwiICh3ZSBhcmUgc2F0aXNmaWVkIGVub3VnaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5sID4gbWF4bilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3csIGZpbmQgdGhlIHJhcmVzdCAyLWJ5dGUgc2VxdWVuY2Ugd2l0aGluIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIG9mIGxpdGVyYWxzIGFuZCBzZWFyY2ggZm9yIHRoYXQgaW5zdGVhZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVjaCBmYXN0ZXIgdGhhbiBqdXN0IHVzaW5nIHRoZSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW1kID0gTWF0aC5taW4oZGlmLCBubCAtIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1tZDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGkgPSBpIC0gZGlmICsgaiAmIDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB0aSA9IHByZXZbdGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNkID0gdGkgLSBwdGkgJiAzMjc2NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZCA+IG1kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kID0gY2QsIHBpbW9kID0gdGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGUgcHJldmlvdXMgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGltb2QgPSBwaW1vZCwgcGltb2QgPSBwcmV2W2ltb2RdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlmICs9IGltb2QgLSBwaW1vZCAmIDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGQgd2lsbCBiZSBub256ZXJvIG9ubHkgd2hlbiBhIG1hdGNoIHdhcyBmb3VuZFxuICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGJvdGggZGlzdCBhbmQgbGVuIGRhdGEgaW4gb25lIGludDMyXG4gICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGlzIHJlY29nbml6ZWQgYXMgYSBsZW4vZGlzdCB3aXRoIDI4dGggYml0ICgyXjI4KVxuICAgICAgICAgICAgICAgICAgICBzeW1zW2xpKytdID0gMjY4NDM1NDU2IHwgKHJldmZsW2xdIDw8IDE4KSB8IHJldmZkW2RdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluID0gcmV2ZmxbbF0gJiAzMSwgZGluID0gcmV2ZmRbZF0gJiAzMTtcbiAgICAgICAgICAgICAgICAgICAgZWIgKz0gZmxlYltsaW5dICsgZmRlYltkaW5dO1xuICAgICAgICAgICAgICAgICAgICArK2xmWzI1NyArIGxpbl07XG4gICAgICAgICAgICAgICAgICAgICsrZGZbZGluXTtcbiAgICAgICAgICAgICAgICAgICAgd2kgPSBpICsgbDtcbiAgICAgICAgICAgICAgICAgICAgKytsY18xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltc1tsaSsrXSA9IGRhdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgKytsZltkYXRbaV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSBNYXRoLm1heChpLCB3aSk7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIHN5bXNbbGkrK10gPSBkYXRbaV07XG4gICAgICAgICAgICArK2xmW2RhdFtpXV07XG4gICAgICAgIH1cbiAgICAgICAgcG9zID0gd2JsayhkYXQsIHcsIGxzdCwgc3ltcywgbGYsIGRmLCBlYiwgbGksIGJzLCBpIC0gYnMsIHBvcyk7XG4gICAgICAgIGlmICghbHN0KSB7XG4gICAgICAgICAgICBzdC5yID0gKHBvcyAmIDcpIHwgd1socG9zIC8gOCkgfCAwXSA8PCAzO1xuICAgICAgICAgICAgLy8gc2hmdChwb3MpIG5vdyAxIGxlc3MgaWYgcG9zICYgNyAhPSAwXG4gICAgICAgICAgICBwb3MgLT0gNztcbiAgICAgICAgICAgIHN0LmggPSBoZWFkLCBzdC5wID0gcHJldiwgc3QuaSA9IGksIHN0LncgPSB3aTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0LncgfHwgMDsgaSA8IHMgKyBsc3Q7IGkgKz0gNjU1MzUpIHtcbiAgICAgICAgICAgIC8vIGVuZFxuICAgICAgICAgICAgdmFyIGUgPSBpICsgNjU1MzU7XG4gICAgICAgICAgICBpZiAoZSA+PSBzKSB7XG4gICAgICAgICAgICAgICAgLy8gd3JpdGUgZmluYWwgYmxvY2tcbiAgICAgICAgICAgICAgICB3Wyhwb3MgLyA4KSB8IDBdID0gbHN0O1xuICAgICAgICAgICAgICAgIGUgPSBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zID0gd2ZibGsodywgcG9zICsgMSwgZGF0LnN1YmFycmF5KGksIGUpKTtcbiAgICAgICAgfVxuICAgICAgICBzdC5pID0gcztcbiAgICB9XG4gICAgcmV0dXJuIHNsYyhvLCAwLCBwcmUgKyBzaGZ0KHBvcykgKyBwb3N0KTtcbn07XG4vLyBDUkMzMiB0YWJsZVxudmFyIGNyY3QgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQgPSBuZXcgSW50MzJBcnJheSgyNTYpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBpLCBrID0gOTtcbiAgICAgICAgd2hpbGUgKC0taylcbiAgICAgICAgICAgIGMgPSAoKGMgJiAxKSAmJiAtMzA2Njc0OTEyKSBeIChjID4+PiAxKTtcbiAgICAgICAgdFtpXSA9IGM7XG4gICAgfVxuICAgIHJldHVybiB0O1xufSkoKTtcbi8vIENSQzMyXG52YXIgY3JjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjID0gLTE7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcDogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIC8vIGNsb3N1cmVzIGhhdmUgYXdmdWwgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgIHZhciBjciA9IGM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGQubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgY3IgPSBjcmN0WyhjciAmIDI1NSkgXiBkW2ldXSBeIChjciA+Pj4gOCk7XG4gICAgICAgICAgICBjID0gY3I7XG4gICAgICAgIH0sXG4gICAgICAgIGQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIH5jOyB9XG4gICAgfTtcbn07XG4vLyBBZGxlcjMyXG52YXIgYWRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGEgPSAxLCBiID0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgICBwOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgLy8gY2xvc3VyZXMgaGF2ZSBhd2Z1bCBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgdmFyIG4gPSBhLCBtID0gYjtcbiAgICAgICAgICAgIHZhciBsID0gZC5sZW5ndGggfCAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIT0gbDspIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IE1hdGgubWluKGkgKyAyNjU1LCBsKTtcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGU7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgbSArPSBuICs9IGRbaV07XG4gICAgICAgICAgICAgICAgbiA9IChuICYgNjU1MzUpICsgMTUgKiAobiA+PiAxNiksIG0gPSAobSAmIDY1NTM1KSArIDE1ICogKG0gPj4gMTYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYSA9IG4sIGIgPSBtO1xuICAgICAgICB9LFxuICAgICAgICBkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhICU9IDY1NTIxLCBiICU9IDY1NTIxO1xuICAgICAgICAgICAgcmV0dXJuIChhICYgMjU1KSA8PCAyNCB8IChhICYgMHhGRjAwKSA8PCA4IHwgKGIgJiAyNTUpIDw8IDggfCAoYiA+PiA4KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuO1xuLy8gZGVmbGF0ZSB3aXRoIG9wdHNcbnZhciBkb3B0ID0gZnVuY3Rpb24gKGRhdCwgb3B0LCBwcmUsIHBvc3QsIHN0KSB7XG4gICAgaWYgKCFzdCkge1xuICAgICAgICBzdCA9IHsgbDogMSB9O1xuICAgICAgICBpZiAob3B0LmRpY3Rpb25hcnkpIHtcbiAgICAgICAgICAgIHZhciBkaWN0ID0gb3B0LmRpY3Rpb25hcnkuc3ViYXJyYXkoLTMyNzY4KTtcbiAgICAgICAgICAgIHZhciBuZXdEYXQgPSBuZXcgdTgoZGljdC5sZW5ndGggKyBkYXQubGVuZ3RoKTtcbiAgICAgICAgICAgIG5ld0RhdC5zZXQoZGljdCk7XG4gICAgICAgICAgICBuZXdEYXQuc2V0KGRhdCwgZGljdC5sZW5ndGgpO1xuICAgICAgICAgICAgZGF0ID0gbmV3RGF0O1xuICAgICAgICAgICAgc3QudyA9IGRpY3QubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZmx0KGRhdCwgb3B0LmxldmVsID09IG51bGwgPyA2IDogb3B0LmxldmVsLCBvcHQubWVtID09IG51bGwgPyBNYXRoLmNlaWwoTWF0aC5tYXgoOCwgTWF0aC5taW4oMTMsIE1hdGgubG9nKGRhdC5sZW5ndGgpKSkgKiAxLjUpIDogKDEyICsgb3B0Lm1lbSksIHByZSwgcG9zdCwgc3QpO1xufTtcbi8vIFdhbG1hcnQgb2JqZWN0IHNwcmVhZFxudmFyIG1yZyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIG8gPSB7fTtcbiAgICBmb3IgKHZhciBrIGluIGEpXG4gICAgICAgIG9ba10gPSBhW2tdO1xuICAgIGZvciAodmFyIGsgaW4gYilcbiAgICAgICAgb1trXSA9IGJba107XG4gICAgcmV0dXJuIG87XG59O1xuLy8gd29ya2VyIGNsb25lXG4vLyBUaGlzIGlzIHBvc3NpYmx5IHRoZSBjcmF6aWVzdCBwYXJ0IG9mIHRoZSBlbnRpcmUgY29kZWJhc2UsIGRlc3BpdGUgaG93IHNpbXBsZSBpdCBtYXkgc2VlbS5cbi8vIFRoZSBvbmx5IHBhcmFtZXRlciB0byB0aGlzIGZ1bmN0aW9uIGlzIGEgY2xvc3VyZSB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgdmFyaWFibGVzIG91dHNpZGUgb2YgdGhlIGZ1bmN0aW9uIHNjb3BlLlxuLy8gV2UncmUgZ29pbmcgdG8gdHJ5IHRvIGZpZ3VyZSBvdXQgdGhlIHZhcmlhYmxlIG5hbWVzIHVzZWQgaW4gdGhlIGNsb3N1cmUgYXMgc3RyaW5ncyBiZWNhdXNlIHRoYXQgaXMgY3J1Y2lhbCBmb3Igd29ya2VyaXphdGlvbi5cbi8vIFdlIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBtYXBwaW5nIG9mIHRydWUgdmFyaWFibGUgbmFtZSB0byB2YWx1ZSAoYmFzaWNhbGx5LCB0aGUgY3VycmVudCBzY29wZSBhcyBhIEpTIG9iamVjdCkuXG4vLyBUaGUgcmVhc29uIHdlIGNhbid0IGp1c3QgdXNlIHRoZSBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcyBpcyBtaW5pZmllcnMgbWFuZ2xpbmcgdGhlIHRvcGxldmVsIHNjb3BlLlxuLy8gVGhpcyB0b29rIG1lIHRocmVlIHdlZWtzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGRvLlxudmFyIHdjbG4gPSBmdW5jdGlvbiAoZm4sIGZuU3RyLCB0ZCkge1xuICAgIHZhciBkdCA9IGZuKCk7XG4gICAgdmFyIHN0ID0gZm4udG9TdHJpbmcoKTtcbiAgICB2YXIga3MgPSBzdC5zbGljZShzdC5pbmRleE9mKCdbJykgKyAxLCBzdC5sYXN0SW5kZXhPZignXScpKS5yZXBsYWNlKC9cXHMrL2csICcnKS5zcGxpdCgnLCcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHYgPSBkdFtpXSwgayA9IGtzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZm5TdHIgKz0gJzsnICsgayArICc9JztcbiAgICAgICAgICAgIHZhciBzdF8xID0gdi50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKHYucHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIGdsb2JhbCBvYmplY3RzXG4gICAgICAgICAgICAgICAgaWYgKHN0XzEuaW5kZXhPZignW25hdGl2ZSBjb2RlXScpICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzcEluZCA9IHN0XzEuaW5kZXhPZignICcsIDgpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgZm5TdHIgKz0gc3RfMS5zbGljZShzcEluZCwgc3RfMS5pbmRleE9mKCcoJywgc3BJbmQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZuU3RyICs9IHN0XzE7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHQgaW4gdi5wcm90b3R5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBmblN0ciArPSAnOycgKyBrICsgJy5wcm90b3R5cGUuJyArIHQgKyAnPScgKyB2LnByb3RvdHlwZVt0XS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmblN0ciArPSBzdF8xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRkW2tdID0gdjtcbiAgICB9XG4gICAgcmV0dXJuIGZuU3RyO1xufTtcbnZhciBjaCA9IFtdO1xuLy8gY2xvbmUgYnVmc1xudmFyIGNiZnMgPSBmdW5jdGlvbiAodikge1xuICAgIHZhciB0bCA9IFtdO1xuICAgIGZvciAodmFyIGsgaW4gdikge1xuICAgICAgICBpZiAodltrXS5idWZmZXIpIHtcbiAgICAgICAgICAgIHRsLnB1c2goKHZba10gPSBuZXcgdltrXS5jb25zdHJ1Y3Rvcih2W2tdKSkuYnVmZmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGw7XG59O1xuLy8gdXNlIGEgd29ya2VyIHRvIGV4ZWN1dGUgY29kZVxudmFyIHdya3IgPSBmdW5jdGlvbiAoZm5zLCBpbml0LCBpZCwgY2IpIHtcbiAgICBpZiAoIWNoW2lkXSkge1xuICAgICAgICB2YXIgZm5TdHIgPSAnJywgdGRfMSA9IHt9LCBtID0gZm5zLmxlbmd0aCAtIDE7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbTsgKytpKVxuICAgICAgICAgICAgZm5TdHIgPSB3Y2xuKGZuc1tpXSwgZm5TdHIsIHRkXzEpO1xuICAgICAgICBjaFtpZF0gPSB7IGM6IHdjbG4oZm5zW21dLCBmblN0ciwgdGRfMSksIGU6IHRkXzEgfTtcbiAgICB9XG4gICAgdmFyIHRkID0gbXJnKHt9LCBjaFtpZF0uZSk7XG4gICAgcmV0dXJuIHdrKGNoW2lkXS5jICsgJztvbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciBrIGluIGUuZGF0YSlzZWxmW2tdPWUuZGF0YVtrXTtvbm1lc3NhZ2U9JyArIGluaXQudG9TdHJpbmcoKSArICd9JywgaWQsIHRkLCBjYmZzKHRkKSwgY2IpO1xufTtcbi8vIGJhc2UgYXN5bmMgaW5mbGF0ZSBmblxudmFyIGJJbmZsdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt1OCwgdTE2LCBpMzIsIGZsZWIsIGZkZWIsIGNsaW0sIGZsLCBmZCwgZmxybSwgZmRybSwgcmV2LCBlYywgaE1hcCwgbWF4LCBiaXRzLCBiaXRzMTYsIHNoZnQsIHNsYywgZXJyLCBpbmZsdCwgaW5mbGF0ZVN5bmMsIHBiZiwgZ29wdF07IH07XG52YXIgYkRmbHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbdTgsIHUxNiwgaTMyLCBmbGViLCBmZGViLCBjbGltLCByZXZmbCwgcmV2ZmQsIGZsbSwgZmx0LCBmZG0sIGZkdCwgcmV2LCBkZW8sIGV0LCBoTWFwLCB3Yml0cywgd2JpdHMxNiwgaFRyZWUsIGxuLCBsYywgY2xlbiwgd2ZibGssIHdibGssIHNoZnQsIHNsYywgZGZsdCwgZG9wdCwgZGVmbGF0ZVN5bmMsIHBiZl07IH07XG4vLyBnemlwIGV4dHJhXG52YXIgZ3plID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW2d6aCwgZ3pobCwgd2J5dGVzLCBjcmMsIGNyY3RdOyB9O1xuLy8gZ3VuemlwIGV4dHJhXG52YXIgZ3V6ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtnenMsIGd6bF07IH07XG4vLyB6bGliIGV4dHJhXG52YXIgemxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW3psaCwgd2J5dGVzLCBhZGxlcl07IH07XG4vLyB1bnpsaWIgZXh0cmFcbnZhciB6dWxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW3psc107IH07XG4vLyBwb3N0IGJ1ZlxudmFyIHBiZiA9IGZ1bmN0aW9uIChtc2cpIHsgcmV0dXJuIHBvc3RNZXNzYWdlKG1zZywgW21zZy5idWZmZXJdKTsgfTtcbi8vIGdldCBvcHRzXG52YXIgZ29wdCA9IGZ1bmN0aW9uIChvKSB7IHJldHVybiBvICYmIHtcbiAgICBvdXQ6IG8uc2l6ZSAmJiBuZXcgdTgoby5zaXplKSxcbiAgICBkaWN0aW9uYXJ5OiBvLmRpY3Rpb25hcnlcbn07IH07XG4vLyBhc3luYyBoZWxwZXJcbnZhciBjYmlmeSA9IGZ1bmN0aW9uIChkYXQsIG9wdHMsIGZucywgaW5pdCwgaWQsIGNiKSB7XG4gICAgdmFyIHcgPSB3cmtyKGZucywgaW5pdCwgaWQsIGZ1bmN0aW9uIChlcnIsIGRhdCkge1xuICAgICAgICB3LnRlcm1pbmF0ZSgpO1xuICAgICAgICBjYihlcnIsIGRhdCk7XG4gICAgfSk7XG4gICAgdy5wb3N0TWVzc2FnZShbZGF0LCBvcHRzXSwgb3B0cy5jb25zdW1lID8gW2RhdC5idWZmZXJdIDogW10pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHcudGVybWluYXRlKCk7IH07XG59O1xuLy8gYXV0byBzdHJlYW1cbnZhciBhc3RybSA9IGZ1bmN0aW9uIChzdHJtKSB7XG4gICAgc3RybS5vbmRhdGEgPSBmdW5jdGlvbiAoZGF0LCBmaW5hbCkgeyByZXR1cm4gcG9zdE1lc3NhZ2UoW2RhdCwgZmluYWxdLCBbZGF0LmJ1ZmZlcl0pOyB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHN0cm0ucHVzaChldi5kYXRhWzBdLCBldi5kYXRhWzFdKTsgfTtcbn07XG4vLyBhc3luYyBzdHJlYW0gYXR0YWNoXG52YXIgYXN0cm1pZnkgPSBmdW5jdGlvbiAoZm5zLCBzdHJtLCBvcHRzLCBpbml0LCBpZCwgZXh0KSB7XG4gICAgdmFyIHQ7XG4gICAgdmFyIHcgPSB3cmtyKGZucywgaW5pdCwgaWQsIGZ1bmN0aW9uIChlcnIsIGRhdCkge1xuICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgdy50ZXJtaW5hdGUoKSwgc3RybS5vbmRhdGEuY2FsbChzdHJtLCBlcnIpO1xuICAgICAgICBlbHNlIGlmICghQXJyYXkuaXNBcnJheShkYXQpKVxuICAgICAgICAgICAgZXh0KGRhdCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRhdFsxXSlcbiAgICAgICAgICAgICAgICB3LnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgc3RybS5vbmRhdGEuY2FsbChzdHJtLCBlcnIsIGRhdFswXSwgZGF0WzFdKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHcucG9zdE1lc3NhZ2Uob3B0cyk7XG4gICAgc3RybS5wdXNoID0gZnVuY3Rpb24gKGQsIGYpIHtcbiAgICAgICAgaWYgKCFzdHJtLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHQpXG4gICAgICAgICAgICBzdHJtLm9uZGF0YShlcnIoNCwgMCwgMSksIG51bGwsICEhZik7XG4gICAgICAgIHcucG9zdE1lc3NhZ2UoW2QsIHQgPSBmXSwgW2QuYnVmZmVyXSk7XG4gICAgfTtcbiAgICBzdHJtLnRlcm1pbmF0ZSA9IGZ1bmN0aW9uICgpIHsgdy50ZXJtaW5hdGUoKTsgfTtcbn07XG4vLyByZWFkIDIgYnl0ZXNcbnZhciBiMiA9IGZ1bmN0aW9uIChkLCBiKSB7IHJldHVybiBkW2JdIHwgKGRbYiArIDFdIDw8IDgpOyB9O1xuLy8gcmVhZCA0IGJ5dGVzXG52YXIgYjQgPSBmdW5jdGlvbiAoZCwgYikgeyByZXR1cm4gKGRbYl0gfCAoZFtiICsgMV0gPDwgOCkgfCAoZFtiICsgMl0gPDwgMTYpIHwgKGRbYiArIDNdIDw8IDI0KSkgPj4+IDA7IH07XG52YXIgYjggPSBmdW5jdGlvbiAoZCwgYikgeyByZXR1cm4gYjQoZCwgYikgKyAoYjQoZCwgYiArIDQpICogNDI5NDk2NzI5Nik7IH07XG4vLyB3cml0ZSBieXRlc1xudmFyIHdieXRlcyA9IGZ1bmN0aW9uIChkLCBiLCB2KSB7XG4gICAgZm9yICg7IHY7ICsrYilcbiAgICAgICAgZFtiXSA9IHYsIHYgPj4+PSA4O1xufTtcbi8vIGd6aXAgaGVhZGVyXG52YXIgZ3poID0gZnVuY3Rpb24gKGMsIG8pIHtcbiAgICB2YXIgZm4gPSBvLmZpbGVuYW1lO1xuICAgIGNbMF0gPSAzMSwgY1sxXSA9IDEzOSwgY1syXSA9IDgsIGNbOF0gPSBvLmxldmVsIDwgMiA/IDQgOiBvLmxldmVsID09IDkgPyAyIDogMCwgY1s5XSA9IDM7IC8vIGFzc3VtZSBVbml4XG4gICAgaWYgKG8ubXRpbWUgIT0gMClcbiAgICAgICAgd2J5dGVzKGMsIDQsIE1hdGguZmxvb3IobmV3IERhdGUoby5tdGltZSB8fCBEYXRlLm5vdygpKSAvIDEwMDApKTtcbiAgICBpZiAoZm4pIHtcbiAgICAgICAgY1szXSA9IDg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGZuLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgY1tpICsgMTBdID0gZm4uY2hhckNvZGVBdChpKTtcbiAgICB9XG59O1xuLy8gZ3ppcCBmb290ZXI6IC04IHRvIC00ID0gQ1JDLCAtNCB0byAtMCBpcyBsZW5ndGhcbi8vIGd6aXAgc3RhcnRcbnZhciBnenMgPSBmdW5jdGlvbiAoZCkge1xuICAgIGlmIChkWzBdICE9IDMxIHx8IGRbMV0gIT0gMTM5IHx8IGRbMl0gIT0gOClcbiAgICAgICAgZXJyKDYsICdpbnZhbGlkIGd6aXAgZGF0YScpO1xuICAgIHZhciBmbGcgPSBkWzNdO1xuICAgIHZhciBzdCA9IDEwO1xuICAgIGlmIChmbGcgJiA0KVxuICAgICAgICBzdCArPSAoZFsxMF0gfCBkWzExXSA8PCA4KSArIDI7XG4gICAgZm9yICh2YXIgenMgPSAoZmxnID4+IDMgJiAxKSArIChmbGcgPj4gNCAmIDEpOyB6cyA+IDA7IHpzIC09ICFkW3N0KytdKVxuICAgICAgICA7XG4gICAgcmV0dXJuIHN0ICsgKGZsZyAmIDIpO1xufTtcbi8vIGd6aXAgbGVuZ3RoXG52YXIgZ3psID0gZnVuY3Rpb24gKGQpIHtcbiAgICB2YXIgbCA9IGQubGVuZ3RoO1xuICAgIHJldHVybiAoZFtsIC0gNF0gfCBkW2wgLSAzXSA8PCA4IHwgZFtsIC0gMl0gPDwgMTYgfCBkW2wgLSAxXSA8PCAyNCkgPj4+IDA7XG59O1xuLy8gZ3ppcCBoZWFkZXIgbGVuZ3RoXG52YXIgZ3pobCA9IGZ1bmN0aW9uIChvKSB7IHJldHVybiAxMCArIChvLmZpbGVuYW1lID8gby5maWxlbmFtZS5sZW5ndGggKyAxIDogMCk7IH07XG4vLyB6bGliIGhlYWRlclxudmFyIHpsaCA9IGZ1bmN0aW9uIChjLCBvKSB7XG4gICAgdmFyIGx2ID0gby5sZXZlbCwgZmwgPSBsdiA9PSAwID8gMCA6IGx2IDwgNiA/IDEgOiBsdiA9PSA5ID8gMyA6IDI7XG4gICAgY1swXSA9IDEyMCwgY1sxXSA9IChmbCA8PCA2KSB8IChvLmRpY3Rpb25hcnkgJiYgMzIpO1xuICAgIGNbMV0gfD0gMzEgLSAoKGNbMF0gPDwgOCkgfCBjWzFdKSAlIDMxO1xuICAgIGlmIChvLmRpY3Rpb25hcnkpIHtcbiAgICAgICAgdmFyIGggPSBhZGxlcigpO1xuICAgICAgICBoLnAoby5kaWN0aW9uYXJ5KTtcbiAgICAgICAgd2J5dGVzKGMsIDIsIGguZCgpKTtcbiAgICB9XG59O1xuLy8gemxpYiBzdGFydFxudmFyIHpscyA9IGZ1bmN0aW9uIChkLCBkaWN0KSB7XG4gICAgaWYgKChkWzBdICYgMTUpICE9IDggfHwgKGRbMF0gPj4gNCkgPiA3IHx8ICgoZFswXSA8PCA4IHwgZFsxXSkgJSAzMSkpXG4gICAgICAgIGVycig2LCAnaW52YWxpZCB6bGliIGRhdGEnKTtcbiAgICBpZiAoKGRbMV0gPj4gNSAmIDEpID09ICshZGljdClcbiAgICAgICAgZXJyKDYsICdpbnZhbGlkIHpsaWIgZGF0YTogJyArIChkWzFdICYgMzIgPyAnbmVlZCcgOiAndW5leHBlY3RlZCcpICsgJyBkaWN0aW9uYXJ5Jyk7XG4gICAgcmV0dXJuIChkWzFdID4+IDMgJiA0KSArIDI7XG59O1xuZnVuY3Rpb24gU3RybU9wdChvcHRzLCBjYikge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PSAnZnVuY3Rpb24nKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICB0aGlzLm9uZGF0YSA9IGNiO1xuICAgIHJldHVybiBvcHRzO1xufVxuLyoqXG4gKiBTdHJlYW1pbmcgREVGTEFURSBjb21wcmVzc2lvblxuICovXG52YXIgRGVmbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZWZsYXRlKG9wdHMsIGNiKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgICAgIHRoaXMub25kYXRhID0gY2I7XG4gICAgICAgIHRoaXMubyA9IG9wdHMgfHwge307XG4gICAgICAgIHRoaXMucyA9IHsgbDogMCwgaTogMzI3NjgsIHc6IDMyNzY4LCB6OiAzMjc2OCB9O1xuICAgICAgICAvLyBCdWZmZXIgbGVuZ3RoIG11c3QgYWx3YXlzIGJlIDAgbW9kIDMyNzY4IGZvciBpbmRleCBjYWxjdWxhdGlvbnMgdG8gYmUgY29ycmVjdCB3aGVuIG1vZGlmeWluZyBoZWFkIGFuZCBwcmV2XG4gICAgICAgIC8vIDk4MzA0ID0gMzI3NjggKGxvb2tiYWNrKSArIDY1NTM2IChjb21tb24gY2h1bmsgc2l6ZSlcbiAgICAgICAgdGhpcy5iID0gbmV3IHU4KDk4MzA0KTtcbiAgICAgICAgaWYgKHRoaXMuby5kaWN0aW9uYXJ5KSB7XG4gICAgICAgICAgICB2YXIgZGljdCA9IHRoaXMuby5kaWN0aW9uYXJ5LnN1YmFycmF5KC0zMjc2OCk7XG4gICAgICAgICAgICB0aGlzLmIuc2V0KGRpY3QsIDMyNzY4IC0gZGljdC5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5zLmkgPSAzMjc2OCAtIGRpY3QubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIERlZmxhdGUucHJvdG90eXBlLnAgPSBmdW5jdGlvbiAoYywgZikge1xuICAgICAgICB0aGlzLm9uZGF0YShkb3B0KGMsIHRoaXMubywgMCwgMCwgdGhpcy5zKSwgZik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBkZWZsYXRlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBpZiAoIXRoaXMub25kYXRhKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICBpZiAodGhpcy5zLmwpXG4gICAgICAgICAgICBlcnIoNCk7XG4gICAgICAgIHZhciBlbmRMZW4gPSBjaHVuay5sZW5ndGggKyB0aGlzLnMuejtcbiAgICAgICAgaWYgKGVuZExlbiA+IHRoaXMuYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChlbmRMZW4gPiAyICogdGhpcy5iLmxlbmd0aCAtIDMyNzY4KSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld0J1ZiA9IG5ldyB1OChlbmRMZW4gJiAtMzI3NjgpO1xuICAgICAgICAgICAgICAgIG5ld0J1Zi5zZXQodGhpcy5iLnN1YmFycmF5KDAsIHRoaXMucy56KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iID0gbmV3QnVmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHNwbGl0ID0gdGhpcy5iLmxlbmd0aCAtIHRoaXMucy56O1xuICAgICAgICAgICAgaWYgKHNwbGl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iLnNldChjaHVuay5zdWJhcnJheSgwLCBzcGxpdCksIHRoaXMucy56KTtcbiAgICAgICAgICAgICAgICB0aGlzLnMueiA9IHRoaXMuYi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5wKHRoaXMuYiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5iLnNldCh0aGlzLmIuc3ViYXJyYXkoLTMyNzY4KSk7XG4gICAgICAgICAgICB0aGlzLmIuc2V0KGNodW5rLnN1YmFycmF5KHNwbGl0KSwgMzI3NjgpO1xuICAgICAgICAgICAgdGhpcy5zLnogPSBjaHVuay5sZW5ndGggLSBzcGxpdCArIDMyNzY4O1xuICAgICAgICAgICAgdGhpcy5zLmkgPSAzMjc2NiwgdGhpcy5zLncgPSAzMjc2ODtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYi5zZXQoY2h1bmssIHRoaXMucy56KTtcbiAgICAgICAgICAgIHRoaXMucy56ICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnMubCA9IGZpbmFsICYgMTtcbiAgICAgICAgaWYgKHRoaXMucy56ID4gdGhpcy5zLncgKyA4MTkxIHx8IGZpbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnAodGhpcy5iLCBmaW5hbCB8fCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnMudyA9IHRoaXMucy5pLCB0aGlzLnMuaSAtPSAyO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRGVmbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBEZWZsYXRlIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgREVGTEFURSBjb21wcmVzc2lvblxuICovXG52YXIgQXN5bmNEZWZsYXRlID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jRGVmbGF0ZShvcHRzLCBjYikge1xuICAgICAgICBhc3RybWlmeShbXG4gICAgICAgICAgICBiRGZsdCxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFthc3RybSwgRGVmbGF0ZV07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBEZWZsYXRlKGV2LmRhdGEpO1xuICAgICAgICAgICAgb25tZXNzYWdlID0gYXN0cm0oc3RybSk7XG4gICAgICAgIH0sIDYpO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNEZWZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jRGVmbGF0ZSB9O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmxhdGUoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiRGZsdCxcbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZihkZWZsYXRlU3luYyhldi5kYXRhWzBdLCBldi5kYXRhWzFdKSk7IH0sIDAsIGNiKTtcbn1cbi8qKlxuICogQ29tcHJlc3NlcyBkYXRhIHdpdGggREVGTEFURSB3aXRob3V0IGFueSB3cmFwcGVyXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBkZWZsYXRlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZsYXRlU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIGRvcHQoZGF0YSwgb3B0cyB8fCB7fSwgMCwgMCk7XG59XG4vKipcbiAqIFN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEluZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSW5mbGF0ZShvcHRzLCBjYikge1xuICAgICAgICAvLyBubyBTdHJtT3B0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRvIHdvcmtlcml6ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICAgICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICAgICAgdmFyIGRpY3QgPSBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSAmJiBvcHRzLmRpY3Rpb25hcnkuc3ViYXJyYXkoLTMyNzY4KTtcbiAgICAgICAgdGhpcy5zID0geyBpOiAwLCBiOiBkaWN0ID8gZGljdC5sZW5ndGggOiAwIH07XG4gICAgICAgIHRoaXMubyA9IG5ldyB1OCgzMjc2OCk7XG4gICAgICAgIHRoaXMucCA9IG5ldyB1OCgwKTtcbiAgICAgICAgaWYgKGRpY3QpXG4gICAgICAgICAgICB0aGlzLm8uc2V0KGRpY3QpO1xuICAgIH1cbiAgICBJbmZsYXRlLnByb3RvdHlwZS5lID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHRoaXMuZClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgaWYgKCF0aGlzLnAubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5wID0gYztcbiAgICAgICAgZWxzZSBpZiAoYy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBuID0gbmV3IHU4KHRoaXMucC5sZW5ndGggKyBjLmxlbmd0aCk7XG4gICAgICAgICAgICBuLnNldCh0aGlzLnApLCBuLnNldChjLCB0aGlzLnAubGVuZ3RoKSwgdGhpcy5wID0gbjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSW5mbGF0ZS5wcm90b3R5cGUuYyA9IGZ1bmN0aW9uIChmaW5hbCkge1xuICAgICAgICB0aGlzLnMuaSA9ICsodGhpcy5kID0gZmluYWwgfHwgZmFsc2UpO1xuICAgICAgICB2YXIgYnRzID0gdGhpcy5zLmI7XG4gICAgICAgIHZhciBkdCA9IGluZmx0KHRoaXMucCwgdGhpcy5zLCB0aGlzLm8pO1xuICAgICAgICB0aGlzLm9uZGF0YShzbGMoZHQsIGJ0cywgdGhpcy5zLmIpLCB0aGlzLmQpO1xuICAgICAgICB0aGlzLm8gPSBzbGMoZHQsIHRoaXMucy5iIC0gMzI3NjgpLCB0aGlzLnMuYiA9IHRoaXMuby5sZW5ndGg7XG4gICAgICAgIHRoaXMucCA9IHNsYyh0aGlzLnAsICh0aGlzLnMucCAvIDgpIHwgMCksIHRoaXMucy5wICY9IDc7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBpbmZsYXRlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGZpbmFsIGNodW5rXG4gICAgICovXG4gICAgSW5mbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5lKGNodW5rKSwgdGhpcy5jKGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBJbmZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEluZmxhdGUgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jSW5mbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY0luZmxhdGUob3B0cywgY2IpIHtcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkluZmx0LFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBJbmZsYXRlXTsgfVxuICAgICAgICBdLCB0aGlzLCBTdHJtT3B0LmNhbGwodGhpcywgb3B0cywgY2IpLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHZhciBzdHJtID0gbmV3IEluZmxhdGUoZXYuZGF0YSk7XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgNyk7XG4gICAgfVxuICAgIHJldHVybiBBc3luY0luZmxhdGU7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNJbmZsYXRlIH07XG5leHBvcnQgZnVuY3Rpb24gaW5mbGF0ZShkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiBjYmlmeShkYXRhLCBvcHRzLCBbXG4gICAgICAgIGJJbmZsdFxuICAgIF0sIGZ1bmN0aW9uIChldikgeyByZXR1cm4gcGJmKGluZmxhdGVTeW5jKGV2LmRhdGFbMF0sIGdvcHQoZXYuZGF0YVsxXSkpKTsgfSwgMSwgY2IpO1xufVxuLyoqXG4gKiBFeHBhbmRzIERFRkxBVEUgZGF0YSB3aXRoIG5vIHdyYXBwZXJcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGRlY29tcHJlc3NcbiAqIEBwYXJhbSBvcHRzIFRoZSBkZWNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mbGF0ZVN5bmMoZGF0YSwgb3B0cykge1xuICAgIHJldHVybiBpbmZsdChkYXRhLCB7IGk6IDIgfSwgb3B0cyAmJiBvcHRzLm91dCwgb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkpO1xufVxuLy8gYmVmb3JlIHlvdSB5ZWxsIGF0IG1lIGZvciBub3QganVzdCB1c2luZyBleHRlbmRzLCBteSByZWFzb24gaXMgdGhhdCBUUyBpbmhlcml0YW5jZSBpcyBoYXJkIHRvIHdvcmtlcml6ZS5cbi8qKlxuICogU3RyZWFtaW5nIEdaSVAgY29tcHJlc3Npb25cbiAqL1xudmFyIEd6aXAgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gR3ppcChvcHRzLCBjYikge1xuICAgICAgICB0aGlzLmMgPSBjcmMoKTtcbiAgICAgICAgdGhpcy5sID0gMDtcbiAgICAgICAgdGhpcy52ID0gMTtcbiAgICAgICAgRGVmbGF0ZS5jYWxsKHRoaXMsIG9wdHMsIGNiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgR1pJUHBlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBHemlwLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0aGlzLmMucChjaHVuayk7XG4gICAgICAgIHRoaXMubCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIERlZmxhdGUucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgR3ppcC5wcm90b3R5cGUucCA9IGZ1bmN0aW9uIChjLCBmKSB7XG4gICAgICAgIHZhciByYXcgPSBkb3B0KGMsIHRoaXMubywgdGhpcy52ICYmIGd6aGwodGhpcy5vKSwgZiAmJiA4LCB0aGlzLnMpO1xuICAgICAgICBpZiAodGhpcy52KVxuICAgICAgICAgICAgZ3poKHJhdywgdGhpcy5vKSwgdGhpcy52ID0gMDtcbiAgICAgICAgaWYgKGYpXG4gICAgICAgICAgICB3Ynl0ZXMocmF3LCByYXcubGVuZ3RoIC0gOCwgdGhpcy5jLmQoKSksIHdieXRlcyhyYXcsIHJhdy5sZW5ndGggLSA0LCB0aGlzLmwpO1xuICAgICAgICB0aGlzLm9uZGF0YShyYXcsIGYpO1xuICAgIH07XG4gICAgcmV0dXJuIEd6aXA7XG59KCkpO1xuZXhwb3J0IHsgR3ppcCB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIEdaSVAgY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jR3ppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY0d6aXAob3B0cywgY2IpIHtcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkRmbHQsXG4gICAgICAgICAgICBnemUsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIERlZmxhdGUsIEd6aXBdOyB9XG4gICAgICAgIF0sIHRoaXMsIFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYiksIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHN0cm0gPSBuZXcgR3ppcChldi5kYXRhKTtcbiAgICAgICAgICAgIG9ubWVzc2FnZSA9IGFzdHJtKHN0cm0pO1xuICAgICAgICB9LCA4KTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jR3ppcDtcbn0oKSk7XG5leHBvcnQgeyBBc3luY0d6aXAgfTtcbmV4cG9ydCBmdW5jdGlvbiBnemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIGNiaWZ5KGRhdGEsIG9wdHMsIFtcbiAgICAgICAgYkRmbHQsXG4gICAgICAgIGd6ZSxcbiAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2d6aXBTeW5jXTsgfVxuICAgIF0sIGZ1bmN0aW9uIChldikgeyByZXR1cm4gcGJmKGd6aXBTeW5jKGV2LmRhdGFbMF0sIGV2LmRhdGFbMV0pKTsgfSwgMiwgY2IpO1xufVxuLyoqXG4gKiBDb21wcmVzc2VzIGRhdGEgd2l0aCBHWklQXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBnemlwcGVkIHZlcnNpb24gb2YgdGhlIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd6aXBTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpXG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB2YXIgYyA9IGNyYygpLCBsID0gZGF0YS5sZW5ndGg7XG4gICAgYy5wKGRhdGEpO1xuICAgIHZhciBkID0gZG9wdChkYXRhLCBvcHRzLCBnemhsKG9wdHMpLCA4KSwgcyA9IGQubGVuZ3RoO1xuICAgIHJldHVybiBnemgoZCwgb3B0cyksIHdieXRlcyhkLCBzIC0gOCwgYy5kKCkpLCB3Ynl0ZXMoZCwgcyAtIDQsIGwpLCBkO1xufVxuLyoqXG4gKiBTdHJlYW1pbmcgc2luZ2xlIG9yIG11bHRpLW1lbWJlciBHWklQIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEd1bnppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBHdW56aXAob3B0cywgY2IpIHtcbiAgICAgICAgdGhpcy52ID0gMTtcbiAgICAgICAgdGhpcy5yID0gMDtcbiAgICAgICAgSW5mbGF0ZS5jYWxsKHRoaXMsIG9wdHMsIGNiKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgR1VOWklQcGVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIEd1bnppcC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgSW5mbGF0ZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsIGNodW5rKTtcbiAgICAgICAgdGhpcy5yICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMudikge1xuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLnAuc3ViYXJyYXkodGhpcy52IC0gMSk7XG4gICAgICAgICAgICB2YXIgcyA9IHAubGVuZ3RoID4gMyA/IGd6cyhwKSA6IDQ7XG4gICAgICAgICAgICBpZiAocyA+IHAubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaW5hbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52ID4gMSAmJiB0aGlzLm9ubWVtYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbm1lbWJlcih0aGlzLnIgLSBwLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnAgPSBwLnN1YmFycmF5KHMpLCB0aGlzLnYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5lY2Vzc2FyeSB0byBwcmV2ZW50IFRTIGZyb20gdXNpbmcgdGhlIGNsb3N1cmUgdmFsdWVcbiAgICAgICAgLy8gVGhpcyBhbGxvd3MgZm9yIHdvcmtlcml6YXRpb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5XG4gICAgICAgIEluZmxhdGUucHJvdG90eXBlLmMuY2FsbCh0aGlzLCBmaW5hbCk7XG4gICAgICAgIC8vIHByb2Nlc3MgY29uY2F0ZW5hdGVkIEdaSVBcbiAgICAgICAgaWYgKHRoaXMucy5mICYmICF0aGlzLnMubCkge1xuICAgICAgICAgICAgdGhpcy52ID0gc2hmdCh0aGlzLnMucCkgKyA5O1xuICAgICAgICAgICAgdGhpcy5zID0geyBpOiAwIH07XG4gICAgICAgICAgICB0aGlzLm8gPSBuZXcgdTgoMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wLmxlbmd0aClcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2gobmV3IHU4KDApLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBHdW56aXA7XG59KCkpO1xuZXhwb3J0IHsgR3VuemlwIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgc2luZ2xlIG9yIG11bHRpLW1lbWJlciBHWklQIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jR3VuemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jR3VuemlwKG9wdHMsIGNiKSB7XG4gICAgICAgIHZhciBfdGhpc18xID0gdGhpcztcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkluZmx0LFxuICAgICAgICAgICAgZ3V6ZSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFthc3RybSwgSW5mbGF0ZSwgR3VuemlwXTsgfVxuICAgICAgICBdLCB0aGlzLCBTdHJtT3B0LmNhbGwodGhpcywgb3B0cywgY2IpLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHZhciBzdHJtID0gbmV3IEd1bnppcChldi5kYXRhKTtcbiAgICAgICAgICAgIHN0cm0ub25tZW1iZXIgPSBmdW5jdGlvbiAob2Zmc2V0KSB7IHJldHVybiBwb3N0TWVzc2FnZShvZmZzZXQpOyB9O1xuICAgICAgICAgICAgb25tZXNzYWdlID0gYXN0cm0oc3RybSk7XG4gICAgICAgIH0sIDksIGZ1bmN0aW9uIChvZmZzZXQpIHsgcmV0dXJuIF90aGlzXzEub25tZW1iZXIgJiYgX3RoaXNfMS5vbm1lbWJlcihvZmZzZXQpOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jR3VuemlwO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jR3VuemlwIH07XG5leHBvcnQgZnVuY3Rpb24gZ3VuemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIGNiaWZ5KGRhdGEsIG9wdHMsIFtcbiAgICAgICAgYkluZmx0LFxuICAgICAgICBndXplLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbZ3VuemlwU3luY107IH1cbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZihndW56aXBTeW5jKGV2LmRhdGFbMF0sIGV2LmRhdGFbMV0pKTsgfSwgMywgY2IpO1xufVxuLyoqXG4gKiBFeHBhbmRzIEdaSVAgZGF0YVxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGRlY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndW56aXBTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICB2YXIgc3QgPSBnenMoZGF0YSk7XG4gICAgaWYgKHN0ICsgOCA+IGRhdGEubGVuZ3RoKVxuICAgICAgICBlcnIoNiwgJ2ludmFsaWQgZ3ppcCBkYXRhJyk7XG4gICAgcmV0dXJuIGluZmx0KGRhdGEuc3ViYXJyYXkoc3QsIC04KSwgeyBpOiAyIH0sIG9wdHMgJiYgb3B0cy5vdXQgfHwgbmV3IHU4KGd6bChkYXRhKSksIG9wdHMgJiYgb3B0cy5kaWN0aW9uYXJ5KTtcbn1cbi8qKlxuICogU3RyZWFtaW5nIFpsaWIgY29tcHJlc3Npb25cbiAqL1xudmFyIFpsaWIgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gWmxpYihvcHRzLCBjYikge1xuICAgICAgICB0aGlzLmMgPSBhZGxlcigpO1xuICAgICAgICB0aGlzLnYgPSAxO1xuICAgICAgICBEZWZsYXRlLmNhbGwodGhpcywgb3B0cywgY2IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSB6bGliYmVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIFpsaWIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIHRoaXMuYy5wKGNodW5rKTtcbiAgICAgICAgRGVmbGF0ZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICBabGliLnByb3RvdHlwZS5wID0gZnVuY3Rpb24gKGMsIGYpIHtcbiAgICAgICAgdmFyIHJhdyA9IGRvcHQoYywgdGhpcy5vLCB0aGlzLnYgJiYgKHRoaXMuby5kaWN0aW9uYXJ5ID8gNiA6IDIpLCBmICYmIDQsIHRoaXMucyk7XG4gICAgICAgIGlmICh0aGlzLnYpXG4gICAgICAgICAgICB6bGgocmF3LCB0aGlzLm8pLCB0aGlzLnYgPSAwO1xuICAgICAgICBpZiAoZilcbiAgICAgICAgICAgIHdieXRlcyhyYXcsIHJhdy5sZW5ndGggLSA0LCB0aGlzLmMuZCgpKTtcbiAgICAgICAgdGhpcy5vbmRhdGEocmF3LCBmKTtcbiAgICB9O1xuICAgIHJldHVybiBabGliO1xufSgpKTtcbmV4cG9ydCB7IFpsaWIgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBabGliIGNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY1psaWIgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXN5bmNabGliKG9wdHMsIGNiKSB7XG4gICAgICAgIGFzdHJtaWZ5KFtcbiAgICAgICAgICAgIGJEZmx0LFxuICAgICAgICAgICAgemxlLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBEZWZsYXRlLCBabGliXTsgfVxuICAgICAgICBdLCB0aGlzLCBTdHJtT3B0LmNhbGwodGhpcywgb3B0cywgY2IpLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHZhciBzdHJtID0gbmV3IFpsaWIoZXYuZGF0YSk7XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgMTApO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNabGliO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jWmxpYiB9O1xuZXhwb3J0IGZ1bmN0aW9uIHpsaWIoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiRGZsdCxcbiAgICAgICAgemxlLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbemxpYlN5bmNdOyB9XG4gICAgXSwgZnVuY3Rpb24gKGV2KSB7IHJldHVybiBwYmYoemxpYlN5bmMoZXYuZGF0YVswXSwgZXYuZGF0YVsxXSkpOyB9LCA0LCBjYik7XG59XG4vKipcbiAqIENvbXByZXNzIGRhdGEgd2l0aCBabGliXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSB6bGliLWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gemxpYlN5bmMoZGF0YSwgb3B0cykge1xuICAgIGlmICghb3B0cylcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgIHZhciBhID0gYWRsZXIoKTtcbiAgICBhLnAoZGF0YSk7XG4gICAgdmFyIGQgPSBkb3B0KGRhdGEsIG9wdHMsIG9wdHMuZGljdGlvbmFyeSA/IDYgOiAyLCA0KTtcbiAgICByZXR1cm4gemxoKGQsIG9wdHMpLCB3Ynl0ZXMoZCwgZC5sZW5ndGggLSA0LCBhLmQoKSksIGQ7XG59XG4vKipcbiAqIFN0cmVhbWluZyBabGliIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIFVuemxpYiA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBVbnpsaWIob3B0cywgY2IpIHtcbiAgICAgICAgSW5mbGF0ZS5jYWxsKHRoaXMsIG9wdHMsIGNiKTtcbiAgICAgICAgdGhpcy52ID0gb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkgPyAyIDogMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgdW56bGliYmVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIFVuemxpYi5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgSW5mbGF0ZS5wcm90b3R5cGUuZS5jYWxsKHRoaXMsIGNodW5rKTtcbiAgICAgICAgaWYgKHRoaXMudikge1xuICAgICAgICAgICAgaWYgKHRoaXMucC5sZW5ndGggPCA2ICYmICFmaW5hbClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnAgPSB0aGlzLnAuc3ViYXJyYXkoemxzKHRoaXMucCwgdGhpcy52IC0gMSkpLCB0aGlzLnYgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucC5sZW5ndGggPCA0KVxuICAgICAgICAgICAgICAgIGVycig2LCAnaW52YWxpZCB6bGliIGRhdGEnKTtcbiAgICAgICAgICAgIHRoaXMucCA9IHRoaXMucC5zdWJhcnJheSgwLCAtNCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmVjZXNzYXJ5IHRvIHByZXZlbnQgVFMgZnJvbSB1c2luZyB0aGUgY2xvc3VyZSB2YWx1ZVxuICAgICAgICAvLyBUaGlzIGFsbG93cyBmb3Igd29ya2VyaXphdGlvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHlcbiAgICAgICAgSW5mbGF0ZS5wcm90b3R5cGUuYy5jYWxsKHRoaXMsIGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBVbnpsaWI7XG59KCkpO1xuZXhwb3J0IHsgVW56bGliIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgWmxpYiBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY1VuemxpYiA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY1VuemxpYihvcHRzLCBjYikge1xuICAgICAgICBhc3RybWlmeShbXG4gICAgICAgICAgICBiSW5mbHQsXG4gICAgICAgICAgICB6dWxlLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBJbmZsYXRlLCBVbnpsaWJdOyB9XG4gICAgICAgIF0sIHRoaXMsIFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYiksIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHN0cm0gPSBuZXcgVW56bGliKGV2LmRhdGEpO1xuICAgICAgICAgICAgb25tZXNzYWdlID0gYXN0cm0oc3RybSk7XG4gICAgICAgIH0sIDExKTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jVW56bGliO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jVW56bGliIH07XG5leHBvcnQgZnVuY3Rpb24gdW56bGliKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIGNiaWZ5KGRhdGEsIG9wdHMsIFtcbiAgICAgICAgYkluZmx0LFxuICAgICAgICB6dWxlLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbdW56bGliU3luY107IH1cbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZih1bnpsaWJTeW5jKGV2LmRhdGFbMF0sIGdvcHQoZXYuZGF0YVsxXSkpKTsgfSwgNSwgY2IpO1xufVxuLyoqXG4gKiBFeHBhbmRzIFpsaWIgZGF0YVxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGRlY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnpsaWJTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICByZXR1cm4gaW5mbHQoZGF0YS5zdWJhcnJheSh6bHMoZGF0YSwgb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkpLCAtNCksIHsgaTogMiB9LCBvcHRzICYmIG9wdHMub3V0LCBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSk7XG59XG4vLyBEZWZhdWx0IGFsZ29yaXRobSBmb3IgY29tcHJlc3Npb24gKHVzZWQgYmVjYXVzZSBoYXZpbmcgYSBrbm93biBvdXRwdXQgc2l6ZSBhbGxvd3MgZmFzdGVyIGRlY29tcHJlc3Npb24pXG5leHBvcnQgeyBnemlwIGFzIGNvbXByZXNzLCBBc3luY0d6aXAgYXMgQXN5bmNDb21wcmVzcyB9O1xuZXhwb3J0IHsgZ3ppcFN5bmMgYXMgY29tcHJlc3NTeW5jLCBHemlwIGFzIENvbXByZXNzIH07XG4vKipcbiAqIFN0cmVhbWluZyBHWklQLCBabGliLCBvciByYXcgREVGTEFURSBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBEZWNvbXByZXNzID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlY29tcHJlc3Mob3B0cywgY2IpIHtcbiAgICAgICAgdGhpcy5HID0gR3VuemlwO1xuICAgICAgICB0aGlzLkkgPSBJbmZsYXRlO1xuICAgICAgICB0aGlzLlogPSBVbnpsaWI7XG4gICAgICAgIHRoaXMubyA9IFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYikgfHwge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGRlY29tcHJlc3NlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBEZWNvbXByZXNzLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBpZiAoIXRoaXMub25kYXRhKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICBpZiAoIXRoaXMucykge1xuICAgICAgICAgICAgaWYgKHRoaXMucCAmJiB0aGlzLnAubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgdTgodGhpcy5wLmxlbmd0aCArIGNodW5rLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbi5zZXQodGhpcy5wKSwgbi5zZXQoY2h1bmssIHRoaXMucC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucCA9IGNodW5rO1xuICAgICAgICAgICAgaWYgKHRoaXMucC5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIF90aGlzXzIgPSB0aGlzO1xuICAgICAgICAgICAgICAgIC8vIGVuYWJsZXMgcmV1c2Ugb2YgdGhpcyBtZXRob2QgYnkgQXN5bmNEZWNvbXByZXNzXG4gICAgICAgICAgICAgICAgdmFyIGNiID0gZnVuY3Rpb24gKCkgeyBfdGhpc18yLm9uZGF0YS5hcHBseShfdGhpc18yLCBhcmd1bWVudHMpOyB9O1xuICAgICAgICAgICAgICAgIHRoaXMucyA9ICh0aGlzLnBbMF0gPT0gMzEgJiYgdGhpcy5wWzFdID09IDEzOSAmJiB0aGlzLnBbMl0gPT0gOClcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgdGhpcy5HKHRoaXMubywgY2IpXG4gICAgICAgICAgICAgICAgICAgIDogKCh0aGlzLnBbMF0gJiAxNSkgIT0gOCB8fCAodGhpcy5wWzBdID4+IDQpID4gNyB8fCAoKHRoaXMucFswXSA8PCA4IHwgdGhpcy5wWzFdKSAlIDMxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IHRoaXMuSSh0aGlzLm8sIGNiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgdGhpcy5aKHRoaXMubywgY2IpO1xuICAgICAgICAgICAgICAgIHRoaXMucy5wdXNoKHRoaXMucCwgZmluYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMucCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zLnB1c2goY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWNvbXByZXNzO1xufSgpKTtcbmV4cG9ydCB7IERlY29tcHJlc3MgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBHWklQLCBabGliLCBvciByYXcgREVGTEFURSBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY0RlY29tcHJlc3MgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXN5bmNEZWNvbXByZXNzKG9wdHMsIGNiKSB7XG4gICAgICAgIHRoaXMuRyA9IEFzeW5jR3VuemlwO1xuICAgICAgICB0aGlzLkkgPSBBc3luY0luZmxhdGU7XG4gICAgICAgIHRoaXMuWiA9IEFzeW5jVW56bGliO1xuICAgICAgICBEZWNvbXByZXNzLmNhbGwodGhpcywgb3B0cywgY2IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBkZWNvbXByZXNzZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgQXN5bmNEZWNvbXByZXNzLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBEZWNvbXByZXNzLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBBc3luY0RlY29tcHJlc3M7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNEZWNvbXByZXNzIH07XG5leHBvcnQgZnVuY3Rpb24gZGVjb21wcmVzcyhkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiAoZGF0YVswXSA9PSAzMSAmJiBkYXRhWzFdID09IDEzOSAmJiBkYXRhWzJdID09IDgpXG4gICAgICAgID8gZ3VuemlwKGRhdGEsIG9wdHMsIGNiKVxuICAgICAgICA6ICgoZGF0YVswXSAmIDE1KSAhPSA4IHx8IChkYXRhWzBdID4+IDQpID4gNyB8fCAoKGRhdGFbMF0gPDwgOCB8IGRhdGFbMV0pICUgMzEpKVxuICAgICAgICAgICAgPyBpbmZsYXRlKGRhdGEsIG9wdHMsIGNiKVxuICAgICAgICAgICAgOiB1bnpsaWIoZGF0YSwgb3B0cywgY2IpO1xufVxuLyoqXG4gKiBFeHBhbmRzIGNvbXByZXNzZWQgR1pJUCwgWmxpYiwgb3IgcmF3IERFRkxBVEUgZGF0YSwgYXV0b21hdGljYWxseSBkZXRlY3RpbmcgdGhlIGZvcm1hdFxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGRlY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvbXByZXNzU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIChkYXRhWzBdID09IDMxICYmIGRhdGFbMV0gPT0gMTM5ICYmIGRhdGFbMl0gPT0gOClcbiAgICAgICAgPyBndW56aXBTeW5jKGRhdGEsIG9wdHMpXG4gICAgICAgIDogKChkYXRhWzBdICYgMTUpICE9IDggfHwgKGRhdGFbMF0gPj4gNCkgPiA3IHx8ICgoZGF0YVswXSA8PCA4IHwgZGF0YVsxXSkgJSAzMSkpXG4gICAgICAgICAgICA/IGluZmxhdGVTeW5jKGRhdGEsIG9wdHMpXG4gICAgICAgICAgICA6IHVuemxpYlN5bmMoZGF0YSwgb3B0cyk7XG59XG4vLyBmbGF0dGVuIGEgZGlyZWN0b3J5IHN0cnVjdHVyZVxudmFyIGZsdG4gPSBmdW5jdGlvbiAoZCwgcCwgdCwgbykge1xuICAgIGZvciAodmFyIGsgaW4gZCkge1xuICAgICAgICB2YXIgdmFsID0gZFtrXSwgbiA9IHAgKyBrLCBvcCA9IG87XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICAgICAgICBvcCA9IG1yZyhvLCB2YWxbMV0pLCB2YWwgPSB2YWxbMF07XG4gICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiB1OClcbiAgICAgICAgICAgIHRbbl0gPSBbdmFsLCBvcF07XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdFtuICs9ICcvJ10gPSBbbmV3IHU4KDApLCBvcF07XG4gICAgICAgICAgICBmbHRuKHZhbCwgbiwgdCwgbyk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLy8gdGV4dCBlbmNvZGVyXG52YXIgdGUgPSB0eXBlb2YgVGV4dEVuY29kZXIgIT0gJ3VuZGVmaW5lZCcgJiYgLyojX19QVVJFX18qLyBuZXcgVGV4dEVuY29kZXIoKTtcbi8vIHRleHQgZGVjb2RlclxudmFyIHRkID0gdHlwZW9mIFRleHREZWNvZGVyICE9ICd1bmRlZmluZWQnICYmIC8qI19fUFVSRV9fKi8gbmV3IFRleHREZWNvZGVyKCk7XG4vLyB0ZXh0IGRlY29kZXIgc3RyZWFtXG52YXIgdGRzID0gMDtcbnRyeSB7XG4gICAgdGQuZGVjb2RlKGV0LCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICB0ZHMgPSAxO1xufVxuY2F0Y2ggKGUpIHsgfVxuLy8gZGVjb2RlIFVURjhcbnZhciBkdXRmOCA9IGZ1bmN0aW9uIChkKSB7XG4gICAgZm9yICh2YXIgciA9ICcnLCBpID0gMDs7KSB7XG4gICAgICAgIHZhciBjID0gZFtpKytdO1xuICAgICAgICB2YXIgZWIgPSAoYyA+IDEyNykgKyAoYyA+IDIyMykgKyAoYyA+IDIzOSk7XG4gICAgICAgIGlmIChpICsgZWIgPiBkLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB7IHM6IHIsIHI6IHNsYyhkLCBpIC0gMSkgfTtcbiAgICAgICAgaWYgKCFlYilcbiAgICAgICAgICAgIHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgICAgZWxzZSBpZiAoZWIgPT0gMykge1xuICAgICAgICAgICAgYyA9ICgoYyAmIDE1KSA8PCAxOCB8IChkW2krK10gJiA2MykgPDwgMTIgfCAoZFtpKytdICYgNjMpIDw8IDYgfCAoZFtpKytdICYgNjMpKSAtIDY1NTM2LFxuICAgICAgICAgICAgICAgIHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IChjID4+IDEwKSwgNTYzMjAgfCAoYyAmIDEwMjMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChlYiAmIDEpXG4gICAgICAgICAgICByICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAzMSkgPDwgNiB8IChkW2krK10gJiA2MykpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAxNSkgPDwgMTIgfCAoZFtpKytdICYgNjMpIDw8IDYgfCAoZFtpKytdICYgNjMpKTtcbiAgICB9XG59O1xuLyoqXG4gKiBTdHJlYW1pbmcgVVRGLTggZGVjb2RpbmdcbiAqL1xudmFyIERlY29kZVVURjggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFVURi04IGRlY29kaW5nIHN0cmVhbVxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuZXZlciBkYXRhIGlzIGRlY29kZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEZWNvZGVVVEY4KGNiKSB7XG4gICAgICAgIHRoaXMub25kYXRhID0gY2I7XG4gICAgICAgIGlmICh0ZHMpXG4gICAgICAgICAgICB0aGlzLnQgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wID0gZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGRlY29kZWQgZnJvbSBVVEYtOCBiaW5hcnlcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgRGVjb2RlVVRGOC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgZmluYWwgPSAhIWZpbmFsO1xuICAgICAgICBpZiAodGhpcy50KSB7XG4gICAgICAgICAgICB0aGlzLm9uZGF0YSh0aGlzLnQuZGVjb2RlKGNodW5rLCB7IHN0cmVhbTogdHJ1ZSB9KSwgZmluYWwpO1xuICAgICAgICAgICAgaWYgKGZpbmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudC5kZWNvZGUoKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGVycig4KTtcbiAgICAgICAgICAgICAgICB0aGlzLnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wKVxuICAgICAgICAgICAgZXJyKDQpO1xuICAgICAgICB2YXIgZGF0ID0gbmV3IHU4KHRoaXMucC5sZW5ndGggKyBjaHVuay5sZW5ndGgpO1xuICAgICAgICBkYXQuc2V0KHRoaXMucCk7XG4gICAgICAgIGRhdC5zZXQoY2h1bmssIHRoaXMucC5sZW5ndGgpO1xuICAgICAgICB2YXIgX2EgPSBkdXRmOChkYXQpLCBzID0gX2EucywgciA9IF9hLnI7XG4gICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgaWYgKHIubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGVycig4KTtcbiAgICAgICAgICAgIHRoaXMucCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wID0gcjtcbiAgICAgICAgdGhpcy5vbmRhdGEocywgZmluYWwpO1xuICAgIH07XG4gICAgcmV0dXJuIERlY29kZVVURjg7XG59KCkpO1xuZXhwb3J0IHsgRGVjb2RlVVRGOCB9O1xuLyoqXG4gKiBTdHJlYW1pbmcgVVRGLTggZW5jb2RpbmdcbiAqL1xudmFyIEVuY29kZVVURjggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFVURi04IGRlY29kaW5nIHN0cmVhbVxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuZXZlciBkYXRhIGlzIGVuY29kZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBFbmNvZGVVVEY4KGNiKSB7XG4gICAgICAgIHRoaXMub25kYXRhID0gY2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGVuY29kZWQgdG8gVVRGLThcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIHN0cmluZyBkYXRhIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgRW5jb2RlVVRGOC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHRoaXMuZClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgdGhpcy5vbmRhdGEoc3RyVG9VOChjaHVuayksIHRoaXMuZCA9IGZpbmFsIHx8IGZhbHNlKTtcbiAgICB9O1xuICAgIHJldHVybiBFbmNvZGVVVEY4O1xufSgpKTtcbmV4cG9ydCB7IEVuY29kZVVURjggfTtcbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgaW50byBhIFVpbnQ4QXJyYXkgZm9yIHVzZSB3aXRoIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbWV0aG9kc1xuICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZVxuICogQHBhcmFtIGxhdGluMSBXaGV0aGVyIG9yIG5vdCB0byBpbnRlcnByZXQgdGhlIGRhdGEgYXMgTGF0aW4tMS4gVGhpcyBzaG91bGRcbiAqICAgICAgICAgICAgICAgbm90IG5lZWQgdG8gYmUgdHJ1ZSB1bmxlc3MgZGVjb2RpbmcgYSBiaW5hcnkgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyBlbmNvZGVkIGluIFVURi04L0xhdGluLTEgYmluYXJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJUb1U4KHN0ciwgbGF0aW4xKSB7XG4gICAgaWYgKGxhdGluMSkge1xuICAgICAgICB2YXIgYXJfMSA9IG5ldyB1OChzdHIubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBhcl8xW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHJldHVybiBhcl8xO1xuICAgIH1cbiAgICBpZiAodGUpXG4gICAgICAgIHJldHVybiB0ZS5lbmNvZGUoc3RyKTtcbiAgICB2YXIgbCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIGFyID0gbmV3IHU4KHN0ci5sZW5ndGggKyAoc3RyLmxlbmd0aCA+PiAxKSk7XG4gICAgdmFyIGFpID0gMDtcbiAgICB2YXIgdyA9IGZ1bmN0aW9uICh2KSB7IGFyW2FpKytdID0gdjsgfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7ICsraSkge1xuICAgICAgICBpZiAoYWkgKyA1ID4gYXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgbiA9IG5ldyB1OChhaSArIDggKyAoKGwgLSBpKSA8PCAxKSk7XG4gICAgICAgICAgICBuLnNldChhcik7XG4gICAgICAgICAgICBhciA9IG47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPCAxMjggfHwgbGF0aW4xKVxuICAgICAgICAgICAgdyhjKTtcbiAgICAgICAgZWxzZSBpZiAoYyA8IDIwNDgpXG4gICAgICAgICAgICB3KDE5MiB8IChjID4+IDYpKSwgdygxMjggfCAoYyAmIDYzKSk7XG4gICAgICAgIGVsc2UgaWYgKGMgPiA1NTI5NSAmJiBjIDwgNTczNDQpXG4gICAgICAgICAgICBjID0gNjU1MzYgKyAoYyAmIDEwMjMgPDwgMTApIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAxMDIzKSxcbiAgICAgICAgICAgICAgICB3KDI0MCB8IChjID4+IDE4KSksIHcoMTI4IHwgKChjID4+IDEyKSAmIDYzKSksIHcoMTI4IHwgKChjID4+IDYpICYgNjMpKSwgdygxMjggfCAoYyAmIDYzKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHcoMjI0IHwgKGMgPj4gMTIpKSwgdygxMjggfCAoKGMgPj4gNikgJiA2MykpLCB3KDEyOCB8IChjICYgNjMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNsYyhhciwgMCwgYWkpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIFVpbnQ4QXJyYXkgdG8gYSBzdHJpbmdcbiAqIEBwYXJhbSBkYXQgVGhlIGRhdGEgdG8gZGVjb2RlIHRvIHN0cmluZ1xuICogQHBhcmFtIGxhdGluMSBXaGV0aGVyIG9yIG5vdCB0byBpbnRlcnByZXQgdGhlIGRhdGEgYXMgTGF0aW4tMS4gVGhpcyBzaG91bGRcbiAqICAgICAgICAgICAgICAgbm90IG5lZWQgdG8gYmUgdHJ1ZSB1bmxlc3MgZW5jb2RpbmcgdG8gYmluYXJ5IHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBvcmlnaW5hbCBVVEYtOC9MYXRpbi0xIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyRnJvbVU4KGRhdCwgbGF0aW4xKSB7XG4gICAgaWYgKGxhdGluMSkge1xuICAgICAgICB2YXIgciA9ICcnO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdC5sZW5ndGg7IGkgKz0gMTYzODQpXG4gICAgICAgICAgICByICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgZGF0LnN1YmFycmF5KGksIGkgKyAxNjM4NCkpO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG4gICAgZWxzZSBpZiAodGQpIHtcbiAgICAgICAgcmV0dXJuIHRkLmRlY29kZShkYXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIF9hID0gZHV0ZjgoZGF0KSwgcyA9IF9hLnMsIHIgPSBfYS5yO1xuICAgICAgICBpZiAoci5sZW5ndGgpXG4gICAgICAgICAgICBlcnIoOCk7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbn1cbjtcbi8vIGRlZmxhdGUgYml0IGZsYWdcbnZhciBkYmYgPSBmdW5jdGlvbiAobCkgeyByZXR1cm4gbCA9PSAxID8gMyA6IGwgPCA2ID8gMiA6IGwgPT0gOSA/IDEgOiAwOyB9O1xuLy8gc2tpcCBsb2NhbCB6aXAgaGVhZGVyXG52YXIgc2x6aCA9IGZ1bmN0aW9uIChkLCBiKSB7IHJldHVybiBiICsgMzAgKyBiMihkLCBiICsgMjYpICsgYjIoZCwgYiArIDI4KTsgfTtcbi8vIHJlYWQgemlwIGhlYWRlclxudmFyIHpoID0gZnVuY3Rpb24gKGQsIGIsIHopIHtcbiAgICB2YXIgZm5sID0gYjIoZCwgYiArIDI4KSwgZm4gPSBzdHJGcm9tVTgoZC5zdWJhcnJheShiICsgNDYsIGIgKyA0NiArIGZubCksICEoYjIoZCwgYiArIDgpICYgMjA0OCkpLCBlcyA9IGIgKyA0NiArIGZubCwgYnMgPSBiNChkLCBiICsgMjApO1xuICAgIHZhciBfYSA9IHogJiYgYnMgPT0gNDI5NDk2NzI5NSA/IHo2NGUoZCwgZXMpIDogW2JzLCBiNChkLCBiICsgMjQpLCBiNChkLCBiICsgNDIpXSwgc2MgPSBfYVswXSwgc3UgPSBfYVsxXSwgb2ZmID0gX2FbMl07XG4gICAgcmV0dXJuIFtiMihkLCBiICsgMTApLCBzYywgc3UsIGZuLCBlcyArIGIyKGQsIGIgKyAzMCkgKyBiMihkLCBiICsgMzIpLCBvZmZdO1xufTtcbi8vIHJlYWQgemlwNjQgZXh0cmEgZmllbGRcbnZhciB6NjRlID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKDsgYjIoZCwgYikgIT0gMTsgYiArPSA0ICsgYjIoZCwgYiArIDIpKVxuICAgICAgICA7XG4gICAgcmV0dXJuIFtiOChkLCBiICsgMTIpLCBiOChkLCBiICsgNCksIGI4KGQsIGIgKyAyMCldO1xufTtcbi8vIGV4dHJhIGZpZWxkIGxlbmd0aFxudmFyIGV4ZmwgPSBmdW5jdGlvbiAoZXgpIHtcbiAgICB2YXIgbGUgPSAwO1xuICAgIGlmIChleCkge1xuICAgICAgICBmb3IgKHZhciBrIGluIGV4KSB7XG4gICAgICAgICAgICB2YXIgbCA9IGV4W2tdLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChsID4gNjU1MzUpXG4gICAgICAgICAgICAgICAgZXJyKDkpO1xuICAgICAgICAgICAgbGUgKz0gbCArIDQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlO1xufTtcbi8vIHdyaXRlIHppcCBoZWFkZXJcbnZhciB3emggPSBmdW5jdGlvbiAoZCwgYiwgZiwgZm4sIHUsIGMsIGNlLCBjbykge1xuICAgIHZhciBmbCA9IGZuLmxlbmd0aCwgZXggPSBmLmV4dHJhLCBjb2wgPSBjbyAmJiBjby5sZW5ndGg7XG4gICAgdmFyIGV4bCA9IGV4ZmwoZXgpO1xuICAgIHdieXRlcyhkLCBiLCBjZSAhPSBudWxsID8gMHgyMDE0QjUwIDogMHg0MDM0QjUwKSwgYiArPSA0O1xuICAgIGlmIChjZSAhPSBudWxsKVxuICAgICAgICBkW2IrK10gPSAyMCwgZFtiKytdID0gZi5vcztcbiAgICBkW2JdID0gMjAsIGIgKz0gMjsgLy8gc3BlYyBjb21wbGlhbmNlPyB3aGF0J3MgdGhhdD9cbiAgICBkW2IrK10gPSAoZi5mbGFnIDw8IDEpIHwgKGMgPCAwICYmIDgpLCBkW2IrK10gPSB1ICYmIDg7XG4gICAgZFtiKytdID0gZi5jb21wcmVzc2lvbiAmIDI1NSwgZFtiKytdID0gZi5jb21wcmVzc2lvbiA+PiA4O1xuICAgIHZhciBkdCA9IG5ldyBEYXRlKGYubXRpbWUgPT0gbnVsbCA/IERhdGUubm93KCkgOiBmLm10aW1lKSwgeSA9IGR0LmdldEZ1bGxZZWFyKCkgLSAxOTgwO1xuICAgIGlmICh5IDwgMCB8fCB5ID4gMTE5KVxuICAgICAgICBlcnIoMTApO1xuICAgIHdieXRlcyhkLCBiLCAoeSA8PCAyNSkgfCAoKGR0LmdldE1vbnRoKCkgKyAxKSA8PCAyMSkgfCAoZHQuZ2V0RGF0ZSgpIDw8IDE2KSB8IChkdC5nZXRIb3VycygpIDw8IDExKSB8IChkdC5nZXRNaW51dGVzKCkgPDwgNSkgfCAoZHQuZ2V0U2Vjb25kcygpID4+IDEpKSwgYiArPSA0O1xuICAgIGlmIChjICE9IC0xKSB7XG4gICAgICAgIHdieXRlcyhkLCBiLCBmLmNyYyk7XG4gICAgICAgIHdieXRlcyhkLCBiICsgNCwgYyA8IDAgPyAtYyAtIDIgOiBjKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyA4LCBmLnNpemUpO1xuICAgIH1cbiAgICB3Ynl0ZXMoZCwgYiArIDEyLCBmbCk7XG4gICAgd2J5dGVzKGQsIGIgKyAxNCwgZXhsKSwgYiArPSAxNjtcbiAgICBpZiAoY2UgIT0gbnVsbCkge1xuICAgICAgICB3Ynl0ZXMoZCwgYiwgY29sKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyA2LCBmLmF0dHJzKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyAxMCwgY2UpLCBiICs9IDE0O1xuICAgIH1cbiAgICBkLnNldChmbiwgYik7XG4gICAgYiArPSBmbDtcbiAgICBpZiAoZXhsKSB7XG4gICAgICAgIGZvciAodmFyIGsgaW4gZXgpIHtcbiAgICAgICAgICAgIHZhciBleGYgPSBleFtrXSwgbCA9IGV4Zi5sZW5ndGg7XG4gICAgICAgICAgICB3Ynl0ZXMoZCwgYiwgK2spO1xuICAgICAgICAgICAgd2J5dGVzKGQsIGIgKyAyLCBsKTtcbiAgICAgICAgICAgIGQuc2V0KGV4ZiwgYiArIDQpLCBiICs9IDQgKyBsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb2wpXG4gICAgICAgIGQuc2V0KGNvLCBiKSwgYiArPSBjb2w7XG4gICAgcmV0dXJuIGI7XG59O1xuLy8gd3JpdGUgemlwIGZvb3RlciAoZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5KVxudmFyIHd6ZiA9IGZ1bmN0aW9uIChvLCBiLCBjLCBkLCBlKSB7XG4gICAgd2J5dGVzKG8sIGIsIDB4NjA1NEI1MCk7IC8vIHNraXAgZGlza1xuICAgIHdieXRlcyhvLCBiICsgOCwgYyk7XG4gICAgd2J5dGVzKG8sIGIgKyAxMCwgYyk7XG4gICAgd2J5dGVzKG8sIGIgKyAxMiwgZCk7XG4gICAgd2J5dGVzKG8sIGIgKyAxNiwgZSk7XG59O1xuLyoqXG4gKiBBIHBhc3MtdGhyb3VnaCBzdHJlYW0gdG8ga2VlcCBkYXRhIHVuY29tcHJlc3NlZCBpbiBhIFpJUCBhcmNoaXZlLlxuICovXG52YXIgWmlwUGFzc1Rocm91Z2ggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhc3MtdGhyb3VnaCBzdHJlYW0gdGhhdCBjYW4gYmUgYWRkZWQgdG8gWklQIGFyY2hpdmVzXG4gICAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGRhdGEgc3RyZWFtXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmlwUGFzc1Rocm91Z2goZmlsZW5hbWUpIHtcbiAgICAgICAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lO1xuICAgICAgICB0aGlzLmMgPSBjcmMoKTtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgICAgdGhpcy5jb21wcmVzc2lvbiA9IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBhIGNodW5rIGFuZCBwdXNoZXMgdG8gdGhlIG91dHB1dCBzdHJlYW0uIFlvdSBjYW4gb3ZlcnJpZGUgdGhpc1xuICAgICAqIG1ldGhvZCBpbiBhIHN1YmNsYXNzIGZvciBjdXN0b20gYmVoYXZpb3IsIGJ1dCBieSBkZWZhdWx0IHRoaXMgcGFzc2VzXG4gICAgICogdGhlIGRhdGEgdGhyb3VnaC4gWW91IG11c3QgY2FsbCB0aGlzLm9uZGF0YShlcnIsIGNodW5rLCBmaW5hbCkgYXQgc29tZVxuICAgICAqIHBvaW50IGluIHRoaXMgbWV0aG9kLlxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHJvY2Vzc1xuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEobnVsbCwgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGFkZGVkLiBJZiB5b3UgYXJlIHN1YmNsYXNzaW5nIHRoaXMgd2l0aCBhIGN1c3RvbVxuICAgICAqIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgbm90ZSB0aGF0IHlvdSBtdXN0IHB1c2ggZGF0YSBmcm9tIHRoZSBzb3VyY2VcbiAgICAgKiBmaWxlIG9ubHksIHByZS1jb21wcmVzc2lvbi5cbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgWmlwUGFzc1Rocm91Z2gucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIHRoaXMuYy5wKGNodW5rKTtcbiAgICAgICAgdGhpcy5zaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgaWYgKGZpbmFsKVxuICAgICAgICAgICAgdGhpcy5jcmMgPSB0aGlzLmMuZCgpO1xuICAgICAgICB0aGlzLnByb2Nlc3MoY2h1bmssIGZpbmFsIHx8IGZhbHNlKTtcbiAgICB9O1xuICAgIHJldHVybiBaaXBQYXNzVGhyb3VnaDtcbn0oKSk7XG5leHBvcnQgeyBaaXBQYXNzVGhyb3VnaCB9O1xuLy8gSSBkb24ndCBleHRlbmQgYmVjYXVzZSBUeXBlU2NyaXB0IGV4dGVuc2lvbiBhZGRzIDFrQiBvZiBydW50aW1lIGJsb2F0XG4vKipcbiAqIFN0cmVhbWluZyBERUZMQVRFIGNvbXByZXNzaW9uIGZvciBaSVAgYXJjaGl2ZXMuIFByZWZlciB1c2luZyBBc3luY1ppcERlZmxhdGVcbiAqIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAqL1xudmFyIFppcERlZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERFRkxBVEUgc3RyZWFtIHRoYXQgY2FuIGJlIGFkZGVkIHRvIFpJUCBhcmNoaXZlc1xuICAgICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZmlsZW5hbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBkYXRhIHN0cmVhbVxuICAgICAqIEBwYXJhbSBvcHRzIFRoZSBjb21wcmVzc2lvbiBvcHRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmlwRGVmbGF0ZShmaWxlbmFtZSwgb3B0cykge1xuICAgICAgICB2YXIgX3RoaXNfMSA9IHRoaXM7XG4gICAgICAgIGlmICghb3B0cylcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgWmlwUGFzc1Rocm91Z2guY2FsbCh0aGlzLCBmaWxlbmFtZSk7XG4gICAgICAgIHRoaXMuZCA9IG5ldyBEZWZsYXRlKG9wdHMsIGZ1bmN0aW9uIChkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICBfdGhpc18xLm9uZGF0YShudWxsLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcHJlc3Npb24gPSA4O1xuICAgICAgICB0aGlzLmZsYWcgPSBkYmYob3B0cy5sZXZlbCk7XG4gICAgfVxuICAgIFppcERlZmxhdGUucHJvdG90eXBlLnByb2Nlc3MgPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmQucHVzaChjaHVuaywgZmluYWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLm9uZGF0YShlLCBudWxsLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGRlZmxhdGVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIFppcERlZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIFppcFBhc3NUaHJvdWdoLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBaaXBEZWZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IFppcERlZmxhdGUgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBERUZMQVRFIGNvbXByZXNzaW9uIGZvciBaSVAgYXJjaGl2ZXNcbiAqL1xudmFyIEFzeW5jWmlwRGVmbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFzeW5jaHJvbm91cyBERUZMQVRFIHN0cmVhbSB0aGF0IGNhbiBiZSBhZGRlZCB0byBaSVAgYXJjaGl2ZXNcbiAgICAgKiBAcGFyYW0gZmlsZW5hbWUgVGhlIGZpbGVuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgZGF0YSBzdHJlYW1cbiAgICAgKiBAcGFyYW0gb3B0cyBUaGUgY29tcHJlc3Npb24gb3B0aW9uc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEFzeW5jWmlwRGVmbGF0ZShmaWxlbmFtZSwgb3B0cykge1xuICAgICAgICB2YXIgX3RoaXNfMSA9IHRoaXM7XG4gICAgICAgIGlmICghb3B0cylcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgWmlwUGFzc1Rocm91Z2guY2FsbCh0aGlzLCBmaWxlbmFtZSk7XG4gICAgICAgIHRoaXMuZCA9IG5ldyBBc3luY0RlZmxhdGUob3B0cywgZnVuY3Rpb24gKGVyciwgZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgX3RoaXNfMS5vbmRhdGEoZXJyLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcHJlc3Npb24gPSA4O1xuICAgICAgICB0aGlzLmZsYWcgPSBkYmYob3B0cy5sZXZlbCk7XG4gICAgICAgIHRoaXMudGVybWluYXRlID0gdGhpcy5kLnRlcm1pbmF0ZTtcbiAgICB9XG4gICAgQXN5bmNaaXBEZWZsYXRlLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0aGlzLmQucHVzaChjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVmbGF0ZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgQXN5bmNaaXBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNaaXBEZWZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jWmlwRGVmbGF0ZSB9O1xuLy8gVE9ETzogQmV0dGVyIHRyZWUgc2hha2luZ1xuLyoqXG4gKiBBIHppcHBhYmxlIGFyY2hpdmUgdG8gd2hpY2ggZmlsZXMgY2FuIGluY3JlbWVudGFsbHkgYmUgYWRkZWRcbiAqL1xudmFyIFppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGVtcHR5IFpJUCBhcmNoaXZlIHRvIHdoaWNoIGZpbGVzIGNhbiBiZSBhZGRlZFxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuZXZlciBkYXRhIGZvciB0aGUgZ2VuZXJhdGVkIFpJUCBhcmNoaXZlXG4gICAgICogICAgICAgICAgIGlzIGF2YWlsYWJsZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFppcChjYikge1xuICAgICAgICB0aGlzLm9uZGF0YSA9IGNiO1xuICAgICAgICB0aGlzLnUgPSBbXTtcbiAgICAgICAgdGhpcy5kID0gMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpbGUgdG8gdGhlIFpJUCBhcmNoaXZlXG4gICAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgc3RyZWFtIHRvIGFkZFxuICAgICAqL1xuICAgIFppcC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgdmFyIF90aGlzXzEgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMub25kYXRhKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICAvLyBmaW5pc2hpbmcgb3IgZmluaXNoZWRcbiAgICAgICAgaWYgKHRoaXMuZCAmIDIpXG4gICAgICAgICAgICB0aGlzLm9uZGF0YShlcnIoNCArICh0aGlzLmQgJiAxKSAqIDgsIDAsIDEpLCBudWxsLCBmYWxzZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGYgPSBzdHJUb1U4KGZpbGUuZmlsZW5hbWUpLCBmbF8xID0gZi5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgY29tID0gZmlsZS5jb21tZW50LCBvID0gY29tICYmIHN0clRvVTgoY29tKTtcbiAgICAgICAgICAgIHZhciB1ID0gZmxfMSAhPSBmaWxlLmZpbGVuYW1lLmxlbmd0aCB8fCAobyAmJiAoY29tLmxlbmd0aCAhPSBvLmxlbmd0aCkpO1xuICAgICAgICAgICAgdmFyIGhsXzEgPSBmbF8xICsgZXhmbChmaWxlLmV4dHJhKSArIDMwO1xuICAgICAgICAgICAgaWYgKGZsXzEgPiA2NTUzNSlcbiAgICAgICAgICAgICAgICB0aGlzLm9uZGF0YShlcnIoMTEsIDAsIDEpLCBudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICB2YXIgaGVhZGVyID0gbmV3IHU4KGhsXzEpO1xuICAgICAgICAgICAgd3poKGhlYWRlciwgMCwgZmlsZSwgZiwgdSwgLTEpO1xuICAgICAgICAgICAgdmFyIGNoa3NfMSA9IFtoZWFkZXJdO1xuICAgICAgICAgICAgdmFyIHBBbGxfMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGNoa3NfMiA9IGNoa3NfMTsgX2kgPCBjaGtzXzIubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGsgPSBjaGtzXzJbX2ldO1xuICAgICAgICAgICAgICAgICAgICBfdGhpc18xLm9uZGF0YShudWxsLCBjaGssIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hrc18xID0gW107XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRyXzEgPSB0aGlzLmQ7XG4gICAgICAgICAgICB0aGlzLmQgPSAwO1xuICAgICAgICAgICAgdmFyIGluZF8xID0gdGhpcy51Lmxlbmd0aDtcbiAgICAgICAgICAgIHZhciB1Zl8xID0gbXJnKGZpbGUsIHtcbiAgICAgICAgICAgICAgICBmOiBmLFxuICAgICAgICAgICAgICAgIHU6IHUsXG4gICAgICAgICAgICAgICAgbzogbyxcbiAgICAgICAgICAgICAgICB0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLnRlcm1pbmF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBBbGxfMSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJfMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG54dCA9IF90aGlzXzEudVtpbmRfMSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG54dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHQucigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzXzEuZCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJfMSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgY2xfMSA9IDA7XG4gICAgICAgICAgICBmaWxlLm9uZGF0YSA9IGZ1bmN0aW9uIChlcnIsIGRhdCwgZmluYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzXzEub25kYXRhKGVyciwgZGF0LCBmaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzXzEudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjbF8xICs9IGRhdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNoa3NfMS5wdXNoKGRhdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRkID0gbmV3IHU4KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgMCwgMHg4MDc0QjUwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgNCwgZmlsZS5jcmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2J5dGVzKGRkLCA4LCBjbF8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgMTIsIGZpbGUuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGtzXzEucHVzaChkZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1Zl8xLmMgPSBjbF8xLCB1Zl8xLmIgPSBobF8xICsgY2xfMSArIDE2LCB1Zl8xLmNyYyA9IGZpbGUuY3JjLCB1Zl8xLnNpemUgPSBmaWxlLnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJfMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Zl8xLnIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyXzEgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRyXzEpXG4gICAgICAgICAgICAgICAgICAgICAgICBwQWxsXzEoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy51LnB1c2godWZfMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEVuZHMgdGhlIHByb2Nlc3Mgb2YgYWRkaW5nIGZpbGVzIGFuZCBwcmVwYXJlcyB0byBlbWl0IHRoZSBmaW5hbCBjaHVua3MuXG4gICAgICogVGhpcyAqbXVzdCogYmUgY2FsbGVkIGFmdGVyIGFkZGluZyBhbGwgZGVzaXJlZCBmaWxlcyBmb3IgdGhlIHJlc3VsdGluZ1xuICAgICAqIFpJUCBmaWxlIHRvIHdvcmsgcHJvcGVybHkuXG4gICAgICovXG4gICAgWmlwLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpc18xID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuZCAmIDIpIHtcbiAgICAgICAgICAgIHRoaXMub25kYXRhKGVycig0ICsgKHRoaXMuZCAmIDEpICogOCwgMCwgMSksIG51bGwsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmQpXG4gICAgICAgICAgICB0aGlzLmUoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy51LnB1c2goe1xuICAgICAgICAgICAgICAgIHI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoX3RoaXNfMS5kICYgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIF90aGlzXzEudS5zcGxpY2UoLTEsIDEpO1xuICAgICAgICAgICAgICAgICAgICBfdGhpc18xLmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHQ6IGZ1bmN0aW9uICgpIHsgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZCA9IDM7XG4gICAgfTtcbiAgICBaaXAucHJvdG90eXBlLmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBidCA9IDAsIGwgPSAwLCB0bCA9IDA7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnU7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgZiA9IF9hW19pXTtcbiAgICAgICAgICAgIHRsICs9IDQ2ICsgZi5mLmxlbmd0aCArIGV4ZmwoZi5leHRyYSkgKyAoZi5vID8gZi5vLmxlbmd0aCA6IDApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXQgPSBuZXcgdTgodGwgKyAyMik7XG4gICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSB0aGlzLnU7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7XG4gICAgICAgICAgICB2YXIgZiA9IF9jW19iXTtcbiAgICAgICAgICAgIHd6aChvdXQsIGJ0LCBmLCBmLmYsIGYudSwgLWYuYyAtIDIsIGwsIGYubyk7XG4gICAgICAgICAgICBidCArPSA0NiArIGYuZi5sZW5ndGggKyBleGZsKGYuZXh0cmEpICsgKGYubyA/IGYuby5sZW5ndGggOiAwKSwgbCArPSBmLmI7XG4gICAgICAgIH1cbiAgICAgICAgd3pmKG91dCwgYnQsIHRoaXMudS5sZW5ndGgsIHRsLCBsKTtcbiAgICAgICAgdGhpcy5vbmRhdGEobnVsbCwgb3V0LCB0cnVlKTtcbiAgICAgICAgdGhpcy5kID0gMjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHRvIHRlcm1pbmF0ZSBhbnkgaW50ZXJuYWwgd29ya2VycyB1c2VkIGJ5IHRoZSBzdHJlYW0uIFN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB0byBhZGQoKSB3aWxsIGZhaWwuXG4gICAgICovXG4gICAgWmlwLnByb3RvdHlwZS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnU7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgZiA9IF9hW19pXTtcbiAgICAgICAgICAgIGYudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZCA9IDI7XG4gICAgfTtcbiAgICByZXR1cm4gWmlwO1xufSgpKTtcbmV4cG9ydCB7IFppcCB9O1xuZXhwb3J0IGZ1bmN0aW9uIHppcChkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHZhciByID0ge307XG4gICAgZmx0bihkYXRhLCAnJywgciwgb3B0cyk7XG4gICAgdmFyIGsgPSBPYmplY3Qua2V5cyhyKTtcbiAgICB2YXIgbGZ0ID0gay5sZW5ndGgsIG8gPSAwLCB0b3QgPSAwO1xuICAgIHZhciBzbGZ0ID0gbGZ0LCBmaWxlcyA9IG5ldyBBcnJheShsZnQpO1xuICAgIHZhciB0ZXJtID0gW107XG4gICAgdmFyIHRBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVybS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIHRlcm1baV0oKTtcbiAgICB9O1xuICAgIHZhciBjYmQgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBtdChmdW5jdGlvbiAoKSB7IGNiKGEsIGIpOyB9KTtcbiAgICB9O1xuICAgIG10KGZ1bmN0aW9uICgpIHsgY2JkID0gY2I7IH0pO1xuICAgIHZhciBjYmYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvdXQgPSBuZXcgdTgodG90ICsgMjIpLCBvZSA9IG8sIGNkbCA9IHRvdCAtIG87XG4gICAgICAgIHRvdCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xmdDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZpbGVzW2ldO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IGYuYy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd3poKG91dCwgdG90LCBmLCBmLmYsIGYudSwgbCk7XG4gICAgICAgICAgICAgICAgdmFyIGJhZGQgPSAzMCArIGYuZi5sZW5ndGggKyBleGZsKGYuZXh0cmEpO1xuICAgICAgICAgICAgICAgIHZhciBsb2MgPSB0b3QgKyBiYWRkO1xuICAgICAgICAgICAgICAgIG91dC5zZXQoZi5jLCBsb2MpO1xuICAgICAgICAgICAgICAgIHd6aChvdXQsIG8sIGYsIGYuZiwgZi51LCBsLCB0b3QsIGYubSksIG8gKz0gMTYgKyBiYWRkICsgKGYubSA/IGYubS5sZW5ndGggOiAwKSwgdG90ID0gbG9jICsgbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNiZChlLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3emYob3V0LCBvLCBmaWxlcy5sZW5ndGgsIGNkbCwgb2UpO1xuICAgICAgICBjYmQobnVsbCwgb3V0KTtcbiAgICB9O1xuICAgIGlmICghbGZ0KVxuICAgICAgICBjYmYoKTtcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHZhciBmbiA9IGtbaV07XG4gICAgICAgIHZhciBfYSA9IHJbZm5dLCBmaWxlID0gX2FbMF0sIHAgPSBfYVsxXTtcbiAgICAgICAgdmFyIGMgPSBjcmMoKSwgc2l6ZSA9IGZpbGUubGVuZ3RoO1xuICAgICAgICBjLnAoZmlsZSk7XG4gICAgICAgIHZhciBmID0gc3RyVG9VOChmbiksIHMgPSBmLmxlbmd0aDtcbiAgICAgICAgdmFyIGNvbSA9IHAuY29tbWVudCwgbSA9IGNvbSAmJiBzdHJUb1U4KGNvbSksIG1zID0gbSAmJiBtLmxlbmd0aDtcbiAgICAgICAgdmFyIGV4bCA9IGV4ZmwocC5leHRyYSk7XG4gICAgICAgIHZhciBjb21wcmVzc2lvbiA9IHAubGV2ZWwgPT0gMCA/IDAgOiA4O1xuICAgICAgICB2YXIgY2JsID0gZnVuY3Rpb24gKGUsIGQpIHtcbiAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgdEFsbCgpO1xuICAgICAgICAgICAgICAgIGNiZChlLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBsID0gZC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZmlsZXNbaV0gPSBtcmcocCwge1xuICAgICAgICAgICAgICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICAgICAgICAgICAgICBjcmM6IGMuZCgpLFxuICAgICAgICAgICAgICAgICAgICBjOiBkLFxuICAgICAgICAgICAgICAgICAgICBmOiBmLFxuICAgICAgICAgICAgICAgICAgICBtOiBtLFxuICAgICAgICAgICAgICAgICAgICB1OiBzICE9IGZuLmxlbmd0aCB8fCAobSAmJiAoY29tLmxlbmd0aCAhPSBtcykpLFxuICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbjogY29tcHJlc3Npb25cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvICs9IDMwICsgcyArIGV4bCArIGw7XG4gICAgICAgICAgICAgICAgdG90ICs9IDc2ICsgMiAqIChzICsgZXhsKSArIChtcyB8fCAwKSArIGw7XG4gICAgICAgICAgICAgICAgaWYgKCEtLWxmdClcbiAgICAgICAgICAgICAgICAgICAgY2JmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzID4gNjU1MzUpXG4gICAgICAgICAgICBjYmwoZXJyKDExLCAwLCAxKSwgbnVsbCk7XG4gICAgICAgIGlmICghY29tcHJlc3Npb24pXG4gICAgICAgICAgICBjYmwobnVsbCwgZmlsZSk7XG4gICAgICAgIGVsc2UgaWYgKHNpemUgPCAxNjAwMDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2JsKG51bGwsIGRlZmxhdGVTeW5jKGZpbGUsIHApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY2JsKGUsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRlcm0ucHVzaChkZWZsYXRlKGZpbGUsIHAsIGNibCkpO1xuICAgIH07XG4gICAgLy8gQ2Fubm90IHVzZSBsZnQgYmVjYXVzZSBpdCBjYW4gZGVjcmVhc2VcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsZnQ7ICsraSkge1xuICAgICAgICBfbG9vcF8xKGkpO1xuICAgIH1cbiAgICByZXR1cm4gdEFsbDtcbn1cbi8qKlxuICogU3luY2hyb25vdXNseSBjcmVhdGVzIGEgWklQIGZpbGUuIFByZWZlciB1c2luZyBgemlwYCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gKiB3aXRoIG1vcmUgdGhhbiBvbmUgZmlsZS5cbiAqIEBwYXJhbSBkYXRhIFRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciB0aGUgWklQIGFyY2hpdmVcbiAqIEBwYXJhbSBvcHRzIFRoZSBtYWluIG9wdGlvbnMsIG1lcmdlZCB3aXRoIHBlci1maWxlIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgWklQIGFyY2hpdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHppcFN5bmMoZGF0YSwgb3B0cykge1xuICAgIGlmICghb3B0cylcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgIHZhciByID0ge307XG4gICAgdmFyIGZpbGVzID0gW107XG4gICAgZmx0bihkYXRhLCAnJywgciwgb3B0cyk7XG4gICAgdmFyIG8gPSAwO1xuICAgIHZhciB0b3QgPSAwO1xuICAgIGZvciAodmFyIGZuIGluIHIpIHtcbiAgICAgICAgdmFyIF9hID0gcltmbl0sIGZpbGUgPSBfYVswXSwgcCA9IF9hWzFdO1xuICAgICAgICB2YXIgY29tcHJlc3Npb24gPSBwLmxldmVsID09IDAgPyAwIDogODtcbiAgICAgICAgdmFyIGYgPSBzdHJUb1U4KGZuKSwgcyA9IGYubGVuZ3RoO1xuICAgICAgICB2YXIgY29tID0gcC5jb21tZW50LCBtID0gY29tICYmIHN0clRvVTgoY29tKSwgbXMgPSBtICYmIG0ubGVuZ3RoO1xuICAgICAgICB2YXIgZXhsID0gZXhmbChwLmV4dHJhKTtcbiAgICAgICAgaWYgKHMgPiA2NTUzNSlcbiAgICAgICAgICAgIGVycigxMSk7XG4gICAgICAgIHZhciBkID0gY29tcHJlc3Npb24gPyBkZWZsYXRlU3luYyhmaWxlLCBwKSA6IGZpbGUsIGwgPSBkLmxlbmd0aDtcbiAgICAgICAgdmFyIGMgPSBjcmMoKTtcbiAgICAgICAgYy5wKGZpbGUpO1xuICAgICAgICBmaWxlcy5wdXNoKG1yZyhwLCB7XG4gICAgICAgICAgICBzaXplOiBmaWxlLmxlbmd0aCxcbiAgICAgICAgICAgIGNyYzogYy5kKCksXG4gICAgICAgICAgICBjOiBkLFxuICAgICAgICAgICAgZjogZixcbiAgICAgICAgICAgIG06IG0sXG4gICAgICAgICAgICB1OiBzICE9IGZuLmxlbmd0aCB8fCAobSAmJiAoY29tLmxlbmd0aCAhPSBtcykpLFxuICAgICAgICAgICAgbzogbyxcbiAgICAgICAgICAgIGNvbXByZXNzaW9uOiBjb21wcmVzc2lvblxuICAgICAgICB9KSk7XG4gICAgICAgIG8gKz0gMzAgKyBzICsgZXhsICsgbDtcbiAgICAgICAgdG90ICs9IDc2ICsgMiAqIChzICsgZXhsKSArIChtcyB8fCAwKSArIGw7XG4gICAgfVxuICAgIHZhciBvdXQgPSBuZXcgdTgodG90ICsgMjIpLCBvZSA9IG8sIGNkbCA9IHRvdCAtIG87XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgZiA9IGZpbGVzW2ldO1xuICAgICAgICB3emgob3V0LCBmLm8sIGYsIGYuZiwgZi51LCBmLmMubGVuZ3RoKTtcbiAgICAgICAgdmFyIGJhZGQgPSAzMCArIGYuZi5sZW5ndGggKyBleGZsKGYuZXh0cmEpO1xuICAgICAgICBvdXQuc2V0KGYuYywgZi5vICsgYmFkZCk7XG4gICAgICAgIHd6aChvdXQsIG8sIGYsIGYuZiwgZi51LCBmLmMubGVuZ3RoLCBmLm8sIGYubSksIG8gKz0gMTYgKyBiYWRkICsgKGYubSA/IGYubS5sZW5ndGggOiAwKTtcbiAgICB9XG4gICAgd3pmKG91dCwgbywgZmlsZXMubGVuZ3RoLCBjZGwsIG9lKTtcbiAgICByZXR1cm4gb3V0O1xufVxuLyoqXG4gKiBTdHJlYW1pbmcgcGFzcy10aHJvdWdoIGRlY29tcHJlc3Npb24gZm9yIFpJUCBhcmNoaXZlc1xuICovXG52YXIgVW56aXBQYXNzVGhyb3VnaCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBVbnppcFBhc3NUaHJvdWdoKCkge1xuICAgIH1cbiAgICBVbnppcFBhc3NUaHJvdWdoLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIGZpbmFsKSB7XG4gICAgICAgIHRoaXMub25kYXRhKG51bGwsIGRhdGEsIGZpbmFsKTtcbiAgICB9O1xuICAgIFVuemlwUGFzc1Rocm91Z2guY29tcHJlc3Npb24gPSAwO1xuICAgIHJldHVybiBVbnppcFBhc3NUaHJvdWdoO1xufSgpKTtcbmV4cG9ydCB7IFVuemlwUGFzc1Rocm91Z2ggfTtcbi8qKlxuICogU3RyZWFtaW5nIERFRkxBVEUgZGVjb21wcmVzc2lvbiBmb3IgWklQIGFyY2hpdmVzLiBQcmVmZXIgQXN5bmNaaXBJbmZsYXRlIGZvclxuICogYmV0dGVyIHBlcmZvcm1hbmNlLlxuICovXG52YXIgVW56aXBJbmZsYXRlID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBERUZMQVRFIGRlY29tcHJlc3Npb24gdGhhdCBjYW4gYmUgdXNlZCBpbiBaSVAgYXJjaGl2ZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBVbnppcEluZmxhdGUoKSB7XG4gICAgICAgIHZhciBfdGhpc18xID0gdGhpcztcbiAgICAgICAgdGhpcy5pID0gbmV3IEluZmxhdGUoZnVuY3Rpb24gKGRhdCwgZmluYWwpIHtcbiAgICAgICAgICAgIF90aGlzXzEub25kYXRhKG51bGwsIGRhdCwgZmluYWwpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgVW56aXBJbmZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGRhdGEsIGZpbmFsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmkucHVzaChkYXRhLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMub25kYXRhKGUsIG51bGwsIGZpbmFsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVW56aXBJbmZsYXRlLmNvbXByZXNzaW9uID0gODtcbiAgICByZXR1cm4gVW56aXBJbmZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IFVuemlwSW5mbGF0ZSB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIERFRkxBVEUgZGVjb21wcmVzc2lvbiBmb3IgWklQIGFyY2hpdmVzXG4gKi9cbnZhciBBc3luY1VuemlwSW5mbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgREVGTEFURSBkZWNvbXByZXNzaW9uIHRoYXQgY2FuIGJlIHVzZWQgaW4gWklQIGFyY2hpdmVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQXN5bmNVbnppcEluZmxhdGUoXywgc3opIHtcbiAgICAgICAgdmFyIF90aGlzXzEgPSB0aGlzO1xuICAgICAgICBpZiAoc3ogPCAzMjAwMDApIHtcbiAgICAgICAgICAgIHRoaXMuaSA9IG5ldyBJbmZsYXRlKGZ1bmN0aW9uIChkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICAgICAgX3RoaXNfMS5vbmRhdGEobnVsbCwgZGF0LCBmaW5hbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaSA9IG5ldyBBc3luY0luZmxhdGUoZnVuY3Rpb24gKGVyciwgZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgICAgIF90aGlzXzEub25kYXRhKGVyciwgZGF0LCBmaW5hbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGVybWluYXRlID0gdGhpcy5pLnRlcm1pbmF0ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBBc3luY1VuemlwSW5mbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChkYXRhLCBmaW5hbCkge1xuICAgICAgICBpZiAodGhpcy5pLnRlcm1pbmF0ZSlcbiAgICAgICAgICAgIGRhdGEgPSBzbGMoZGF0YSwgMCk7XG4gICAgICAgIHRoaXMuaS5wdXNoKGRhdGEsIGZpbmFsKTtcbiAgICB9O1xuICAgIEFzeW5jVW56aXBJbmZsYXRlLmNvbXByZXNzaW9uID0gODtcbiAgICByZXR1cm4gQXN5bmNVbnppcEluZmxhdGU7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNVbnppcEluZmxhdGUgfTtcbi8qKlxuICogQSBaSVAgYXJjaGl2ZSBkZWNvbXByZXNzaW9uIHN0cmVhbSB0aGF0IGVtaXRzIGZpbGVzIGFzIHRoZXkgYXJlIGRpc2NvdmVyZWRcbiAqL1xudmFyIFVuemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBaSVAgZGVjb21wcmVzc2lvbiBzdHJlYW1cbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbmV2ZXIgYSBmaWxlIGluIHRoZSBaSVAgYXJjaGl2ZSBpcyBmb3VuZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFVuemlwKGNiKSB7XG4gICAgICAgIHRoaXMub25maWxlID0gY2I7XG4gICAgICAgIHRoaXMuayA9IFtdO1xuICAgICAgICB0aGlzLm8gPSB7XG4gICAgICAgICAgICAwOiBVbnppcFBhc3NUaHJvdWdoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucCA9IGV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSB1bnppcHBlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBVbnppcC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdmFyIF90aGlzXzEgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMub25maWxlKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICBpZiAoIXRoaXMucClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgaWYgKHRoaXMuYyA+IDApIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbih0aGlzLmMsIGNodW5rLmxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgdG9BZGQgPSBjaHVuay5zdWJhcnJheSgwLCBsZW4pO1xuICAgICAgICAgICAgdGhpcy5jIC09IGxlbjtcbiAgICAgICAgICAgIGlmICh0aGlzLmQpXG4gICAgICAgICAgICAgICAgdGhpcy5kLnB1c2godG9BZGQsICF0aGlzLmMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMua1swXS5wdXNoKHRvQWRkKTtcbiAgICAgICAgICAgIGNodW5rID0gY2h1bmsuc3ViYXJyYXkobGVuKTtcbiAgICAgICAgICAgIGlmIChjaHVuay5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaChjaHVuaywgZmluYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGYgPSAwLCBpID0gMCwgaXMgPSB2b2lkIDAsIGJ1ZiA9IHZvaWQgMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5wLmxlbmd0aClcbiAgICAgICAgICAgICAgICBidWYgPSBjaHVuaztcbiAgICAgICAgICAgIGVsc2UgaWYgKCFjaHVuay5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYnVmID0gdGhpcy5wO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmID0gbmV3IHU4KHRoaXMucC5sZW5ndGggKyBjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGJ1Zi5zZXQodGhpcy5wKSwgYnVmLnNldChjaHVuaywgdGhpcy5wLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbCA9IGJ1Zi5sZW5ndGgsIG9jID0gdGhpcy5jLCBhZGQgPSBvYyAmJiB0aGlzLmQ7XG4gICAgICAgICAgICB2YXIgX2xvb3BfMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdmFyIHNpZyA9IGI0KGJ1ZiwgaSk7XG4gICAgICAgICAgICAgICAgaWYgKHNpZyA9PSAweDQwMzRCNTApIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IDEsIGlzID0gaTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc18xLmQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzXzEuYyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiZiA9IGIyKGJ1ZiwgaSArIDYpLCBjbXBfMSA9IGIyKGJ1ZiwgaSArIDgpLCB1ID0gYmYgJiAyMDQ4LCBkZCA9IGJmICYgOCwgZm5sID0gYjIoYnVmLCBpICsgMjYpLCBlcyA9IGIyKGJ1ZiwgaSArIDI4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPiBpICsgMzAgKyBmbmwgKyBlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoa3NfMyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18xLmsudW5zaGlmdChjaGtzXzMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NfMSA9IGI0KGJ1ZiwgaSArIDE4KSwgc3VfMSA9IGI0KGJ1ZiwgaSArIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbl8xID0gc3RyRnJvbVU4KGJ1Zi5zdWJhcnJheShpICsgMzAsIGkgKz0gMzAgKyBmbmwpLCAhdSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NfMSA9PSA0Mjk0OTY3Mjk1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EgPSBkZCA/IFstMl0gOiB6NjRlKGJ1ZiwgaSksIHNjXzEgPSBfYVswXSwgc3VfMSA9IF9hWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NfMSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfMS5jID0gc2NfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZV8xID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZuXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb246IGNtcF8xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZV8xLm9uZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY18xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV8xLm9uZGF0YShudWxsLCBldCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0ciA9IF90aGlzXzEub1tjbXBfMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlXzEub25kYXRhKGVycigxNCwgJ3Vua25vd24gY29tcHJlc3Npb24gdHlwZSAnICsgY21wXzEsIDEpLCBudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEgPSBzY18xIDwgMCA/IG5ldyBjdHIoZm5fMSkgOiBuZXcgY3RyKGZuXzEsIHNjXzEsIHN1XzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF8xLm9uZGF0YSA9IGZ1bmN0aW9uIChlcnIsIGRhdCwgZmluYWwpIHsgZmlsZV8xLm9uZGF0YShlcnIsIGRhdCwgZmluYWwpOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjaGtzXzQgPSBjaGtzXzM7IF9pIDwgY2hrc180Lmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXQgPSBjaGtzXzRbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfMS5wdXNoKGRhdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzXzEua1swXSA9PSBjaGtzXzMgJiYgX3RoaXNfMS5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzXzEuZCA9IGRfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEucHVzaChldCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZF8xICYmIGRfMS50ZXJtaW5hdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY18xID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV8xLnNpemUgPSBzY18xLCBmaWxlXzEub3JpZ2luYWxTaXplID0gc3VfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfMS5vbmZpbGUoZmlsZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2lnID09IDB4ODA3NEI1MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXMgPSBpICs9IDEyICsgKG9jID09IC0yICYmIDgpLCBmID0gMywgdGhpc18xLmMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaWcgPT0gMHgyMDE0QjUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpcyA9IGkgLT0gNCwgZiA9IDMsIHRoaXNfMS5jID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXM7XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGwgLSA0OyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzIoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVfMSA9PT0gXCJicmVha1wiKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucCA9IGV0O1xuICAgICAgICAgICAgaWYgKG9jIDwgMCkge1xuICAgICAgICAgICAgICAgIHZhciBkYXQgPSBmID8gYnVmLnN1YmFycmF5KDAsIGlzIC0gMTIgLSAob2MgPT0gLTIgJiYgOCkgLSAoYjQoYnVmLCBpcyAtIDE2KSA9PSAweDgwNzRCNTAgJiYgNCkpIDogYnVmLnN1YmFycmF5KDAsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChhZGQpXG4gICAgICAgICAgICAgICAgICAgIGFkZC5wdXNoKGRhdCwgISFmKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMua1srKGYgPT0gMildLnB1c2goZGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmICYgMilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoKGJ1Zi5zdWJhcnJheShpKSwgZmluYWwpO1xuICAgICAgICAgICAgdGhpcy5wID0gYnVmLnN1YmFycmF5KGkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYylcbiAgICAgICAgICAgICAgICBlcnIoMTMpO1xuICAgICAgICAgICAgdGhpcy5wID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgZGVjb2RlciB3aXRoIHRoZSBzdHJlYW0sIGFsbG93aW5nIGZvciBmaWxlcyBjb21wcmVzc2VkIHdpdGhcbiAgICAgKiB0aGUgY29tcHJlc3Npb24gdHlwZSBwcm92aWRlZCB0byBiZSBleHBhbmRlZCBjb3JyZWN0bHlcbiAgICAgKiBAcGFyYW0gZGVjb2RlciBUaGUgZGVjb2RlciBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIFVuemlwLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChkZWNvZGVyKSB7XG4gICAgICAgIHRoaXMub1tkZWNvZGVyLmNvbXByZXNzaW9uXSA9IGRlY29kZXI7XG4gICAgfTtcbiAgICByZXR1cm4gVW56aXA7XG59KCkpO1xuZXhwb3J0IHsgVW56aXAgfTtcbnZhciBtdCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PSAnZnVuY3Rpb24nID8gcXVldWVNaWNyb3Rhc2sgOiB0eXBlb2Ygc2V0VGltZW91dCA9PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9O1xuZXhwb3J0IGZ1bmN0aW9uIHVuemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgdmFyIHRlcm0gPSBbXTtcbiAgICB2YXIgdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXJtLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgdGVybVtpXSgpO1xuICAgIH07XG4gICAgdmFyIGZpbGVzID0ge307XG4gICAgdmFyIGNiZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIG10KGZ1bmN0aW9uICgpIHsgY2IoYSwgYik7IH0pO1xuICAgIH07XG4gICAgbXQoZnVuY3Rpb24gKCkgeyBjYmQgPSBjYjsgfSk7XG4gICAgdmFyIGUgPSBkYXRhLmxlbmd0aCAtIDIyO1xuICAgIGZvciAoOyBiNChkYXRhLCBlKSAhPSAweDYwNTRCNTA7IC0tZSkge1xuICAgICAgICBpZiAoIWUgfHwgZGF0YS5sZW5ndGggLSBlID4gNjU1NTgpIHtcbiAgICAgICAgICAgIGNiZChlcnIoMTMsIDAsIDEpLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybiB0QWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIDtcbiAgICB2YXIgbGZ0ID0gYjIoZGF0YSwgZSArIDgpO1xuICAgIGlmIChsZnQpIHtcbiAgICAgICAgdmFyIGMgPSBsZnQ7XG4gICAgICAgIHZhciBvID0gYjQoZGF0YSwgZSArIDE2KTtcbiAgICAgICAgdmFyIHogPSBvID09IDQyOTQ5NjcyOTUgfHwgYyA9PSA2NTUzNTtcbiAgICAgICAgaWYgKHopIHtcbiAgICAgICAgICAgIHZhciB6ZSA9IGI0KGRhdGEsIGUgLSAxMik7XG4gICAgICAgICAgICB6ID0gYjQoZGF0YSwgemUpID09IDB4NjA2NEI1MDtcbiAgICAgICAgICAgIGlmICh6KSB7XG4gICAgICAgICAgICAgICAgYyA9IGxmdCA9IGI0KGRhdGEsIHplICsgMzIpO1xuICAgICAgICAgICAgICAgIG8gPSBiNChkYXRhLCB6ZSArIDQ4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZmx0ciA9IG9wdHMgJiYgb3B0cy5maWx0ZXI7XG4gICAgICAgIHZhciBfbG9vcF8zID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHpoKGRhdGEsIG8sIHopLCBjXzEgPSBfYVswXSwgc2MgPSBfYVsxXSwgc3UgPSBfYVsyXSwgZm4gPSBfYVszXSwgbm8gPSBfYVs0XSwgb2ZmID0gX2FbNV0sIGIgPSBzbHpoKGRhdGEsIG9mZik7XG4gICAgICAgICAgICBvID0gbm87XG4gICAgICAgICAgICB2YXIgY2JsID0gZnVuY3Rpb24gKGUsIGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0QWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIGNiZChlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbZm5dID0gZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEtLWxmdClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiZChudWxsLCBmaWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghZmx0ciB8fCBmbHRyKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmbixcbiAgICAgICAgICAgICAgICBzaXplOiBzYyxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFNpemU6IHN1LFxuICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uOiBjXzFcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjXzEpXG4gICAgICAgICAgICAgICAgICAgIGNibChudWxsLCBzbGMoZGF0YSwgYiwgYiArIHNjKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY18xID09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZmwgPSBkYXRhLnN1YmFycmF5KGIsIGIgKyBzYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzYyA8IDMyMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYmwobnVsbCwgaW5mbGF0ZVN5bmMoaW5mbCwgeyBvdXQ6IG5ldyB1OChzdSkgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYmwoZSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGVybS5wdXNoKGluZmxhdGUoaW5mbCwgeyBzaXplOiBzdSB9LCBjYmwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjYmwoZXJyKDE0LCAndW5rbm93biBjb21wcmVzc2lvbiB0eXBlICcgKyBjXzEsIDEpLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjYmwobnVsbCwgbnVsbCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYzsgKytpKSB7XG4gICAgICAgICAgICBfbG9vcF8zKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgY2JkKG51bGwsIHt9KTtcbiAgICByZXR1cm4gdEFsbDtcbn1cbi8qKlxuICogU3luY2hyb25vdXNseSBkZWNvbXByZXNzZXMgYSBaSVAgYXJjaGl2ZS4gUHJlZmVyIHVzaW5nIGB1bnppcGAgZm9yIGJldHRlclxuICogcGVyZm9ybWFuY2Ugd2l0aCBtb3JlIHRoYW4gb25lIGZpbGUuXG4gKiBAcGFyYW0gZGF0YSBUaGUgcmF3IGNvbXByZXNzZWQgWklQIGZpbGVcbiAqIEBwYXJhbSBvcHRzIFRoZSBaSVAgZXh0cmFjdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZGVjb21wcmVzc2VkIGZpbGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnppcFN5bmMoZGF0YSwgb3B0cykge1xuICAgIHZhciBmaWxlcyA9IHt9O1xuICAgIHZhciBlID0gZGF0YS5sZW5ndGggLSAyMjtcbiAgICBmb3IgKDsgYjQoZGF0YSwgZSkgIT0gMHg2MDU0QjUwOyAtLWUpIHtcbiAgICAgICAgaWYgKCFlIHx8IGRhdGEubGVuZ3RoIC0gZSA+IDY1NTU4KVxuICAgICAgICAgICAgZXJyKDEzKTtcbiAgICB9XG4gICAgO1xuICAgIHZhciBjID0gYjIoZGF0YSwgZSArIDgpO1xuICAgIGlmICghYylcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIHZhciBvID0gYjQoZGF0YSwgZSArIDE2KTtcbiAgICB2YXIgeiA9IG8gPT0gNDI5NDk2NzI5NSB8fCBjID09IDY1NTM1O1xuICAgIGlmICh6KSB7XG4gICAgICAgIHZhciB6ZSA9IGI0KGRhdGEsIGUgLSAxMik7XG4gICAgICAgIHogPSBiNChkYXRhLCB6ZSkgPT0gMHg2MDY0QjUwO1xuICAgICAgICBpZiAoeikge1xuICAgICAgICAgICAgYyA9IGI0KGRhdGEsIHplICsgMzIpO1xuICAgICAgICAgICAgbyA9IGI0KGRhdGEsIHplICsgNDgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBmbHRyID0gb3B0cyAmJiBvcHRzLmZpbHRlcjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGM7ICsraSkge1xuICAgICAgICB2YXIgX2EgPSB6aChkYXRhLCBvLCB6KSwgY18yID0gX2FbMF0sIHNjID0gX2FbMV0sIHN1ID0gX2FbMl0sIGZuID0gX2FbM10sIG5vID0gX2FbNF0sIG9mZiA9IF9hWzVdLCBiID0gc2x6aChkYXRhLCBvZmYpO1xuICAgICAgICBvID0gbm87XG4gICAgICAgIGlmICghZmx0ciB8fCBmbHRyKHtcbiAgICAgICAgICAgIG5hbWU6IGZuLFxuICAgICAgICAgICAgc2l6ZTogc2MsXG4gICAgICAgICAgICBvcmlnaW5hbFNpemU6IHN1LFxuICAgICAgICAgICAgY29tcHJlc3Npb246IGNfMlxuICAgICAgICB9KSkge1xuICAgICAgICAgICAgaWYgKCFjXzIpXG4gICAgICAgICAgICAgICAgZmlsZXNbZm5dID0gc2xjKGRhdGEsIGIsIGIgKyBzYyk7XG4gICAgICAgICAgICBlbHNlIGlmIChjXzIgPT0gOClcbiAgICAgICAgICAgICAgICBmaWxlc1tmbl0gPSBpbmZsYXRlU3luYyhkYXRhLnN1YmFycmF5KGIsIGIgKyBzYyksIHsgb3V0OiBuZXcgdTgoc3UpIH0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVycigxNCwgJ3Vua25vd24gY29tcHJlc3Npb24gdHlwZSAnICsgY18yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/fflate/esm/browser.js\n"); /***/ }), /***/ "./node_modules/isomorphic-ws/browser.js": /*!***********************************************!*\ !*** ./node_modules/isomorphic-ws/browser.js ***! \***********************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// https://github.com/maxogden/websocket-stream/blob/48dc3ddf943e5ada668c31ccd94e9186f02fafbd/ws-fallback.js\n\nvar ws = null\n\nif (typeof WebSocket !== 'undefined ') {\n ws = WebSocket\n} else if (typeof MozWebSocket !== 'undefined ') {\n ws = MozWebSocket\n} else if (typeof __webpack_require__.g !== 'undefined ') {\n ws = __webpack_require__.g.WebSocket || __webpack_require__.g.MozWebSocket\n} else if (typeof window !== 'undefined ') {\n ws = window.WebSocket || window.MozWebSocket\n} else if (typeof self !== 'undefined ') {\n ws = self.WebSocket || self.MozWebSocket\n}\n\nmodule.exports = ws\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvaXNvbW9ycGhpYy13cy9icm93c2VyLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxFQUFFLGdCQUFnQixxQkFBTTtBQUN4QixPQUFPLHFCQUFNLGNBQWMscUJBQU07QUFDakMsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MTVYvLi9ub2RlX21vZHVsZXMvaXNvbW9ycGhpYy13cy9icm93c2VyLmpzPzNmZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL21heG9nZGVuL3dlYnNvY2tldC1zdHJlYW0vYmxvYi80OGRjM2RkZjk0M2U1YWRhNjY4YzMxY2NkOTRlOTE4NmYwMmZhZmJkL3dzLWZhbGxiYWNrLmpzXG5cbnZhciB3cyA9IG51bGxcblxuaWYgKHR5cGVvZiBXZWJTb2NrZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gIHdzID0gV2ViU29ja2V0XG59IGVsc2UgaWYgKHR5cGVvZiBNb3pXZWJTb2NrZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gIHdzID0gTW96V2ViU29ja2V0XG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gIHdzID0gZ2xvYmFsLldlYlNvY2tldCB8fCBnbG9iYWwuTW96V2ViU29ja2V0XG59IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHdzID0gd2luZG93LldlYlNvY2tldCB8fCB3aW5kb3cuTW96V2ViU29ja2V0XG59IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICB3cyA9IHNlbGYuV2ViU29ja2V0IHx8IHNlbGYuTW96V2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd3NcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/isomorphic-ws/browser.js\n"); /***/ }), /***/ "./node_modules/pend/index.js": /*!************************************!*\ !*** ./node_modules/pend/index.js ***! \************************************/ /***/ ((module) => { eval("module.exports = Pend;\n\nfunction Pend() {\n this.pending = 0;\n this.max = Infinity;\n this.listeners = [];\n this.waiting = [];\n this.error = null;\n}\n\nPend.prototype.go = function(fn) {\n if (this.pending < this.max) {\n pendGo(this, fn);\n } else {\n this.waiting.push(fn);\n }\n};\n\nPend.prototype.wait = function(cb) {\n if (this.pending === 0) {\n cb(this.error);\n } else {\n this.listeners.push(cb);\n }\n};\n\nPend.prototype.hold = function() {\n return pendHold(this);\n};\n\nfunction pendHold(self) {\n self.pending += 1;\n var called = false;\n return onCb;\n function onCb(err) {\n if (called) throw new Error(\"callback called twice\");\n called = true;\n self.error = self.error || err;\n self.pending -= 1;\n if (self.waiting.length > 0 && self.pending < self.max) {\n pendGo(self, self.waiting.shift());\n } else if (self.pending === 0) {\n var listeners = self.listeners;\n self.listeners = [];\n listeners.forEach(cbListener);\n }\n }\n function cbListener(listener) {\n listener(self.error);\n }\n}\n\nfunction pendGo(self, fn) {\n fn(pendHold(self));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcGVuZC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy9wZW5kL2luZGV4LmpzP2YwYzgiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBQZW5kO1xuXG5mdW5jdGlvbiBQZW5kKCkge1xuICB0aGlzLnBlbmRpbmcgPSAwO1xuICB0aGlzLm1heCA9IEluZmluaXR5O1xuICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB0aGlzLndhaXRpbmcgPSBbXTtcbiAgdGhpcy5lcnJvciA9IG51bGw7XG59XG5cblBlbmQucHJvdG90eXBlLmdvID0gZnVuY3Rpb24oZm4pIHtcbiAgaWYgKHRoaXMucGVuZGluZyA8IHRoaXMubWF4KSB7XG4gICAgcGVuZEdvKHRoaXMsIGZuKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLndhaXRpbmcucHVzaChmbik7XG4gIH1cbn07XG5cblBlbmQucHJvdG90eXBlLndhaXQgPSBmdW5jdGlvbihjYikge1xuICBpZiAodGhpcy5wZW5kaW5nID09PSAwKSB7XG4gICAgY2IodGhpcy5lcnJvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYik7XG4gIH1cbn07XG5cblBlbmQucHJvdG90eXBlLmhvbGQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHBlbmRIb2xkKHRoaXMpO1xufTtcblxuZnVuY3Rpb24gcGVuZEhvbGQoc2VsZikge1xuICBzZWxmLnBlbmRpbmcgKz0gMTtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gb25DYjtcbiAgZnVuY3Rpb24gb25DYihlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB0aHJvdyBuZXcgRXJyb3IoXCJjYWxsYmFjayBjYWxsZWQgdHdpY2VcIik7XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBzZWxmLmVycm9yID0gc2VsZi5lcnJvciB8fCBlcnI7XG4gICAgc2VsZi5wZW5kaW5nIC09IDE7XG4gICAgaWYgKHNlbGYud2FpdGluZy5sZW5ndGggPiAwICYmIHNlbGYucGVuZGluZyA8IHNlbGYubWF4KSB7XG4gICAgICBwZW5kR28oc2VsZiwgc2VsZi53YWl0aW5nLnNoaWZ0KCkpO1xuICAgIH0gZWxzZSBpZiAoc2VsZi5wZW5kaW5nID09PSAwKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gc2VsZi5saXN0ZW5lcnM7XG4gICAgICBzZWxmLmxpc3RlbmVycyA9IFtdO1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goY2JMaXN0ZW5lcik7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNiTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICBsaXN0ZW5lcihzZWxmLmVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZW5kR28oc2VsZiwgZm4pIHtcbiAgZm4ocGVuZEhvbGQoc2VsZikpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/pend/index.js\n"); /***/ }), /***/ "./node_modules/querystring/decode.js": /*!********************************************!*\ !*** ./node_modules/querystring/decode.js ***! \********************************************/ /***/ ((module) => { "use strict"; eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '& ';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== ' string ' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number ') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20 '),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = ' ';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmcvZGVjb2RlLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nL2RlY29kZS5qcz82MWMwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIElmIG9iai5oYXNPd25Qcm9wZXJ0eSBoYXMgYmVlbiBvdmVycmlkZGVuLCB0aGVuIGNhbGxpbmdcbi8vIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSB3aWxsIGJyZWFrLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MDdcbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocXMsIHNlcCwgZXEsIG9wdGlvbnMpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodHlwZW9mIHFzICE9PSAnc3RyaW5nJyB8fCBxcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IC9cXCsvZztcbiAgcXMgPSBxcy5zcGxpdChzZXApO1xuXG4gIHZhciBtYXhLZXlzID0gMTAwMDtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4S2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICBtYXhLZXlzID0gb3B0aW9ucy5tYXhLZXlzO1xuICB9XG5cbiAgdmFyIGxlbiA9IHFzLmxlbmd0aDtcbiAgLy8gbWF4S2V5cyA8PSAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsaW1pdCBrZXlzIGNvdW50XG4gIGlmIChtYXhLZXlzID4gMCAmJiBsZW4gPiBtYXhLZXlzKSB7XG4gICAgbGVuID0gbWF4S2V5cztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgeCA9IHFzW2ldLnJlcGxhY2UocmVnZXhwLCAnJTIwJyksXG4gICAgICAgIGlkeCA9IHguaW5kZXhPZihlcSksXG4gICAgICAgIGtzdHIsIHZzdHIsIGssIHY7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGtzdHIgPSB4LnN1YnN0cigwLCBpZHgpO1xuICAgICAgdnN0ciA9IHguc3Vic3RyKGlkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrc3RyID0geDtcbiAgICAgIHZzdHIgPSAnJztcbiAgICB9XG5cbiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGtzdHIpO1xuICAgIHYgPSBkZWNvZGVVUklDb21wb25lbnQodnN0cik7XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5KG9iaiwgaykpIHtcbiAgICAgIG9ialtrXSA9IHY7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXS5wdXNoKHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBbb2JqW2tdLCB2XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/querystring/decode.js\n"); /***/ }), /***/ "./node_modules/querystring/encode.js": /*!********************************************!*\ !*** ./node_modules/querystring/encode.js ***! \********************************************/ /***/ ((module) => { "use strict"; eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string ':\n return v;\n\n case 'boolean ':\n return v ? 'true ' : 'false ';\n\n case 'number ':\n return isFinite(v) ? v : ' ';\n\n default:\n return ' ';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '& ';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === ' object ') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return ' ';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmcvZW5jb2RlLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nL2VuY29kZS5qcz9lOGM1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnlQcmltaXRpdmUgPSBmdW5jdGlvbih2KSB7XG4gIHN3aXRjaCAodHlwZW9mIHYpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHY7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB2ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogJyc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgc2VwLCBlcSwgbmFtZSkge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIG9iaiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbihrKSB7XG4gICAgICB2YXIga3MgPSBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKGspKSArIGVxO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgICByZXR1cm4gb2JqW2tdLm1hcChmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/querystring/encode.js\n"); /***/ }), /***/ "./node_modules/querystring/index.js": /*!*******************************************!*\ !*** ./node_modules/querystring/index.js ***! \*******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; eval("\n\nexports.decode = exports.parse = __webpack_require__(/*! ./decode */ \"./node_modules/querystring/decode.js\");\nexports.encode = exports.stringify = __webpack_require__(/*! ./encode */ \"./node_modules/querystring/encode.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmcvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsY0FBYyxHQUFHLDJGQUFtQztBQUNwRCxjQUFjLEdBQUcsK0ZBQXVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nL2luZGV4LmpzP2FmYzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/querystring/index.js\n"); /***/ }), /***/ "./src/file-loaders/lmvtk/otg/OPFSCache.ts": /*!*************************************************!*\ !*** ./src/file-loaders/lmvtk/otg/OPFSCache.ts ***! \*************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ OPFSCache: () => (/* binding */ OPFSCache)\n/* harmony export */ });\n/* harmony import */ var _HashStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HashStrings */ \"./src/file-loaders/lmvtk/otg/HashStrings.js\");\n/* harmony import */ var _HashStrings__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_HashStrings__WEBPACK_IMPORTED_MODULE_0__);\n/// \n\n// Metadata file layout:\n// 4 bytes: last access timestamp\n// 20 bytes hash + 4 bytes size of the first blob in the data file\n// same for the second blob etc\nconst METADATA_OFFSET = 4;\nconst HASH_SIZE = 20;\nconst METADATA_STRIDE = HASH_SIZE + 4;\nconst METADATA_SUFFIX = '_metadata ';\nconst BUCKET_OPEN_FAILED = 'Placeholder value for buckets that failed to open ';\nconst EVICTION_CUTOFF = 3 * 30 * 24 * 60 * 60 * 1000; // Evict everything older than 3 months\nconst WRITE_LOCK_PREFIX = 'opfs-cache-write-lock- ';\nconst QUOTA_EXCEEDED_ERROR = 'QuotaExceededError '; // from https://webidl.spec.whatwg.org/#quotaexceedederror\nasync function getFiles(dir) {\n const results = [];\n for await (const [key, handle] of dir) {\n if (handle.kind === 'file ') {\n results.push(handle.getFile().then((file) => [key, file]));\n }\n }\n return Promise.all(results);\n}\nfunction makeFilenameSafe(s) {\n // List of disallowed characters comes from https://stackoverflow.com/questions/1976007/what-characters-are-forbidden-in-windows-and-linux-directory-names\n return s.replaceAll(/<|>|:|\"|\\/|\\\\|\\||\\?\\*/g, '_ ');\n}\n/**\n * Implements an asset cache using the Origin Private File System (OPFS).\n * It has arbitrarily many buckets which are identified by arbitrary names. Each bucket is stored as two files.\n * The first file contains only the concatenated asset blobs, the second file contains metadata, i.e. hashes and sizes of the blobs.\n * @class\n */\nclass OPFSCache {\n #analyticsCallback;\n #quotaExceededAnalyticsCallbackExecuted = false;\n #initPromise;\n #evictPromise;\n #cacheDir = null;\n #buckets = new Map();\n #initializingBuckets = new Map();\n #cacheDirectoryName = ' ';\n /** Creates a new OPFSCache instance. Creates the cache directory if it doesn't exist yet. */\n constructor(analyticsCallback, cacheDirectoryName='otg_cache' ) {\n this.#cacheDirectoryName=c acheDirectoryName;\n this.#initPromise=t his.#init();\n this.#analyticsCallback=a nalyticsCallback;\n }\n async #init() {\n try {\n // this throws on firefox and safari in private browsing mode\n const root=a wait navigator.storage.getDirectory();\n // this throws when the quota is exceeded\n this.#cacheDir=a wait root.getDirectoryHandle(this.#cacheDirectoryName, { create: true });\n }\n catch (e) {\n console.warn( 'Failed to open cache directory', e);\n this.#analyticsCallback?.( 'viewer.opfsCache.cacheOpenFailed', {\n errorName: e.name,\n errorMessage: e.message,\n });\n }\n this.#initPromise=u ndefined;\n }\n async open(bucketName) {\n const bucket=t his.#buckets.get(bucketName);\n if (bucket) {\n return bucket;\n }\n let p=t his.#initializingBuckets.get(bucketName);\n if (p) {\n return p;\n }\n p=( async ()=> {\n await this.#initPromise;\n let dataAccessHandle, metadataAccessHandle;\n let bucket;\n const bucketFileName = makeFilenameSafe(bucketName);\n const writeLockName = WRITE_LOCK_PREFIX + bucketFileName;\n try {\n if (!this.#cacheDir) {\n throw new Error('Cache directory not initialized');\n }\n const dataDraftHandle = await this.#cacheDir.getFileHandle(bucketFileName, { create: true });\n dataAccessHandle = await dataDraftHandle.createSyncAccessHandle({ mode: 'readwrite-unsafe' });\n const metadataDraftHandle = await this.#cacheDir.getFileHandle(bucketFileName + METADATA_SUFFIX, {\n create: true,\n });\n metadataAccessHandle = await metadataDraftHandle.createSyncAccessHandle({ mode: 'readwrite-unsafe' });\n const timestampBuffer = new Uint32Array(1);\n // Update the file's lastModified value to avoid eviction\n timestampBuffer[0] = new Date().valueOf();\n metadataAccessHandle.write(timestampBuffer, { at: 0 });\n bucket = {\n dataHandle: dataAccessHandle,\n offsets: new Map(),\n metadataHandle: metadataAccessHandle,\n };\n this.#buckets.set(bucketName, bucket);\n navigator.locks.request(writeLockName, { ifAvailable: true, mode: 'exclusive' }, (lock) => {\n if (!lock) {\n return;\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API#advanced_use\n return new Promise((res) => {\n bucket.writeLock = res;\n });\n });\n // Read metadata and file size sanity check\n const expectedDataSize = this.#loadMetadata(bucket);\n if (expectedDataSize !== bucket.dataHandle.getSize()) {\n console.warn('Data file has unexpected size, clearing cache for', bucketName);\n bucket.offsets.clear();\n bucket.dataHandle.truncate(0);\n bucket.metadataHandle.truncate(METADATA_OFFSET);\n }\n return bucket;\n }\n catch (error) {\n if (error.name === 'NoModificationAllowedError') {\n console.log(error.message);\n console.warn(`Failed to acquire lock on cache for ${bucketName}. It is probably open in another tab. Disabling cache.`);\n }\n else {\n console.warn('Failed to initialize cache bucket', bucketName, error);\n }\n // cache dir open failures have their own event above\n if (this.#cacheDir) {\n this.#analyticsCallback?.('viewer.opfsCache.bucketOpenFailed', {\n bucketName,\n errorName: error.name,\n errorMessage: error.message,\n });\n }\n dataAccessHandle?.close();\n metadataAccessHandle?.close();\n bucket?.writeLock?.();\n this.#buckets.set(bucketName, BUCKET_OPEN_FAILED);\n return BUCKET_OPEN_FAILED;\n }\n finally {\n this.#initializingBuckets.delete(bucketName);\n }\n })();\n this.#initializingBuckets.set(bucketName, p);\n return p;\n }\n #loadMetadata(bucket) {\n bucket.offsets.clear();\n const metadataSize = bucket.metadataHandle.getSize() - METADATA_OFFSET;\n const data = new Uint8Array(metadataSize);\n const data32 = new Uint32Array(data.buffer);\n bucket.metadataHandle.read(data, { at: METADATA_OFFSET });\n const stride = METADATA_STRIDE;\n let currentDataOffset = 0;\n for (let offset = 0; offset < data.byteLength; offset +=s tride) {\n const hash=( 0,_HashStrings__WEBPACK_IMPORTED_MODULE_0__.binToPackedString)(data, offset, HASH_SIZE);\n const size=d ata32[(offset + HASH_SIZE) / 4];\n bucket.offsets.set(hash, [currentDataOffset, size]);\n currentDataOffset +=s ize;\n }\n return currentDataOffset;\n }\n /**\n * Stores data associated with the given hash. Attempts one round of cache eviction if the quota is exceeded.\n * Note this does not check whether the hashes are already cached. It will ignore requests for buckets that are not open yet.\n * @param {string[]} hashes - 20 byte hashes of datas\n * @param {string[]} bucketNames - Names of the buckets in which the hashes should be stored. Must have same length as hashes.\n * @param {Uint8Array[]} datas - Array of data to store\n * @throws - Any error thrown by the underlying write function except QuotaExceededError\n */\n store(hashes, bucketNames, datas) {\n // split hashes, bucketNames and datas by bucketName\n const buckets=n ew Map();\n for (let i=0 ; i < hashes.length; i++) {\n const bucketName=b ucketNames[i];\n let bucket=b uckets.get(bucketName);\n if (!bucket) {\n bucket=[ [], []];\n buckets.set(bucketName, bucket);\n }\n bucket[0].push(hashes[i]);\n bucket[1].push(datas[i]);\n }\n for (const [bucketName, [hashes, datas]] of buckets) {\n this.#storeInner(hashes, bucketName, datas);\n }\n }\n async #storeInner(hashes, bucketName, datas) {\n // Collect data into two buffers for data and metadata\n // This is done first because if we go async (eviction),\n // we must have copied the buffers before because the caller might transfer them.\n const bucket=t his.#buckets.get(bucketName);\n if (!bucket || bucket===B UCKET_OPEN_FAILED || !bucket.writeLock) {\n return;\n }\n const lengths=d atas.map((d)=> d.length); // lengths become 0 on transfer\n const metadataBuffer = new Uint8Array(hashes.length * METADATA_STRIDE);\n const metadataBuffer32 = new Uint32Array(metadataBuffer.buffer);\n const dataBuffer = new Uint8Array(lengths.reduce((acc, d) => acc + d, 0));\n let dataBufferOffset = 0;\n for (let i = 0; i < hashes.length; i++) {\n const data=d atas[i];\n (0,_HashStrings__WEBPACK_IMPORTED_MODULE_0__.packedToBin)(hashes[i], metadataBuffer, i * METADATA_STRIDE);\n metadataBuffer32[(i * METADATA_STRIDE + HASH_SIZE) / 4]=d ata.length;\n dataBuffer.set(data, dataBufferOffset);\n dataBufferOffset +=d ata.length;\n }\n // go async to let the caller continue processing (e.g. send the data to the decoder threads)\n await new Promise((resolve)=> setTimeout(resolve, 0));\n // Write the buffers\n if (!this.#writeBatchWithRollback(bucket, dataBuffer, metadataBuffer)) {\n await this.#evict();\n if (!this.#writeBatchWithRollback(bucket, dataBuffer, metadataBuffer)) {\n return;\n }\n }\n // Update the in-memory index\n let offset = bucket.dataHandle.getSize() - dataBuffer.length;\n for (let i = 0; i < hashes.length; i++) {\n bucket.offsets.set(hashes[i], [offset, lengths[i]]);\n offset +=l engths[i];\n }\n }\n /**\n * Appends data and metadata to the bucket. Tries to roll back writes on any error.\n * @param {Bucket} bucket - Bucket to write to\n * @param {Uint8Array} dataBuffer - Data to write\n * @param {number} metadataBuffer - Metadata to write\n * @returns {boolean} - true, if data was written successfully, false if the quota was exceeded\n * @throws - any error thrown by the underlying write function except QuotaExceededError\n */\n #writeBatchWithRollback(bucket, dataBuffer, metadataBuffer) {\n const dataSize=b ucket.dataHandle.getSize();\n const metadataSize=b ucket.metadataHandle.getSize();\n try {\n this.#write(bucket.dataHandle, dataBuffer, { at: dataSize });\n this.#write(bucket.metadataHandle, metadataBuffer, { at: metadataSize });\n }\n catch (error) {\n // Every error could come with a partial write, so we try to roll it back.\n // In theory, truncating can also fail, but we can 't do anything about it. The next cache open will clear the cache in that case.\n bucket.dataHandle.truncate(dataSize);\n bucket.metadataHandle.truncate(metadataSize);\n if (error.name !== QUOTA_EXCEEDED_ERROR) {\n throw error;\n }\n this.#sendQuotaExceededAnalytics();\n return false;\n }\n return true;\n }\n /**\n * Wrapper around FileSystemSyncAccessHandle.write to turn partial writes into an exception and to handle a chrome bug\n */\n #write(handle, data, options) {\n const bytesWritten = handle.write(data, options);\n // Chrome bug workaround: When exceeding the quota in incognito mode, it does a partial write,\n // throws no QuotaExceededError, and returns something like 0xFFFFFF00, maybe an internal error code.\n // Not having this code here and just throwing a generic exception like below would work,\n // but turning this into a QuotaExceededError allows playwright tests to continue using incognito mode.\n if (bytesWritten > data.length) {\n throw new DOMException('Quota Exceeded in Chrome Incognito mode ', QUOTA_EXCEEDED_ERROR);\n }\n // The spec allows partial writes, see https://fs.spec.whatwg.org/#api-filesystemsyncaccesshandle-write.\n // We'll handle that as an error.\n // Note that when `write` throws some other error, it could also have performed a partial write.\n if (bytesWritten !==d ata.length) {\n throw new DOMException( 'Partial write detected');\n }\n }\n /** Retrieves data associated with the given hashes.\n * @param {string[]} hashes - Array of 20 byte hashes of the data\n * @param {string[]} bucketNames - Names of the buckets in which the hashes should be looked up. Must have same length as hashes.\n * @returns {Uint8Array[]} Array of data associated with the hashes. If a hash is not found in the specified bucket, the array contains null instead.\n */\n async get(hashes, bucketNames) {\n const result=n ew Array(hashes.length).fill(null);\n for (let i=0 ; i < hashes.length; i++) {\n const hash=h ashes[i];\n const bucketName=b ucketNames[i];\n const bucket=t his.#buckets.get(bucketName) || (await this.open(bucketName));\n if (!bucket || bucket===B UCKET_OPEN_FAILED) {\n continue;\n }\n const fileOffset=b ucket.offsets.get(hash);\n if (!fileOffset) {\n continue;\n }\n const data=n ew Uint8Array(fileOffset[1]);\n bucket.dataHandle.read(data, { at: fileOffset[0] });\n result[i]=d ata;\n }\n return result;\n }\n /**\n * Removes data from the cache to make room for new.\n * Always removes everything with an LRU-date older than EVICTION_CUTOFF, and then tries to remove more if necessary to hit minFraction.\n * @param {number} minFraction - Minimal fraction of data that should to be removed. E.g. 0.1 means at least 10% of the cache should be evicted.\n * @returns {boolean} True if the requested amount of data or more was evicted from the cache\n */\n async #evict(minFraction=0 .1) {\n if (this.#evictPromise) {\n return this.#evictPromise;\n }\n this.#evictPromise=t his.#evictImpl(minFraction);\n const result=a wait this.#evictPromise;\n this.#evictPromise=u ndefined;\n return result;\n }\n async #evictImpl(minFraction) {\n await this.#initPromise;\n if (!this.#cacheDir) {\n return false;\n }\n const files=n ew Array();\n let totalSize=0 ;\n for (const [, file] of await getFiles(this.#cacheDir)) {\n totalSize +=f ile.size;\n if (!file.name.endsWith(METADATA_SUFFIX)) {\n continue;\n }\n files.push(file);\n }\n const minBytes=t otalSize * minFraction;\n // We do write a last access timestamp into the files, but we use the .lastModified property here,\n // which should be equivalent and doesn 't require opening the file. We still have to write *something*\n // to the file to update lastModified though as there is no touch API, and a timestamp seemed only fitting.\n const filesSorted = files.sort((a, b) => a.lastModified - b.lastModified);\n let deletedBytes = 0;\n const cutoff = Date.now() - EVICTION_CUTOFF;\n for (const metadataFile of filesSorted) {\n if (metadataFile.lastModified > cutoff && deletedBytes >= minBytes) {\n break;\n }\n try {\n await this.#cacheDir.removeEntry(metadataFile.name);\n deletedBytes += metadataFile.size;\n const bucketFileName = metadataFile.name.slice(0, -METADATA_SUFFIX.length);\n const dataFile = await (await this.#cacheDir.getFileHandle(bucketFileName)).getFile();\n await this.#cacheDir.removeEntry(bucketFileName);\n deletedBytes += dataFile.size;\n }\n catch (e) {\n // The currently open files will throw this\n if (e.name !== 'NoModificationAllowedError ') {\n console.warn('Error during cache eviction ', e);\n }\n }\n }\n return deletedBytes >= minBytes;\n }\n /** Closes all open file handles. Since the handles are exclusive, this should be called as soon as possible.\n * Note that calling this while initialization is running will make this asynchronous,\n * and attempting any other operation while the close is in progress might break things.\n * Also, calling close while e.g. an asynchronous store is in progress will probably break.\n */\n async close() {\n this.#initPromise && (await this.#initPromise);\n this.#initializingBuckets.size && (await Promise.all(this.#initializingBuckets.values()));\n for (const bucket of this.#buckets.values()) {\n if (!bucket || bucket === BUCKET_OPEN_FAILED) {\n return;\n }\n if (bucket.dataHandle) {\n bucket.dataHandle.flush();\n bucket.dataHandle.close();\n }\n if (bucket.metadataHandle) {\n bucket.metadataHandle.flush();\n bucket.metadataHandle.close();\n }\n // release all write locks\n bucket.writeLock?.();\n }\n this.#buckets.clear();\n await this.#evict(0.0);\n }\n /** Deletes all buckets */\n async clear() {\n await this.close();\n await this.#evict(1.0);\n }\n async getStats() {\n await this.#initPromise;\n let entries = 0;\n let dataSize = 0;\n let metadataSize = 0;\n if (this.#cacheDir) {\n for (const [key, file] of await getFiles(this.#cacheDir)) {\n if (key.endsWith(METADATA_SUFFIX)) {\n metadataSize += file.size;\n entries += (file.size - METADATA_OFFSET) / METADATA_STRIDE;\n }\n else {\n dataSize += file.size;\n }\n }\n }\n return {\n entries,\n dataSize,\n metadataSize,\n };\n }\n #sendQuotaExceededAnalytics() {\n if (this.#quotaExceededAnalyticsCallbackExecuted) {\n return;\n }\n this.#quotaExceededAnalyticsCallbackExecuted = true;\n navigator.storage\n .estimate()\n .then((estimate) => {\n this.#analyticsCallback?.('viewer.opfsCache.quotaExceeded ', estimate);\n })\n .catch((error) => {\n console.error('Failed to get storage estimate ', error);\n });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL2xtdnRrL290Zy9PUEZTQ2FjaGUudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsaUNBQWlDO0FBRThCO0FBRS9ELHdCQUF3QjtBQUN4QixpQ0FBaUM7QUFDakMsa0VBQWtFO0FBQ2xFLCtCQUErQjtBQUMvQixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLE1BQU0sZUFBZSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFdEMsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDO0FBRXBDLE1BQU0sa0JBQWtCLEdBQUcsbURBQW1ELENBQUM7QUFHL0UsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyx1Q0FBdUM7QUFFN0YsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQztBQUVuRCxNQUFNLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLENBQUMsMERBQTBEO0FBNkI3RyxLQUFLLFVBQVUsUUFBUSxDQUFDLEdBQThCO0lBQ2xELE1BQU0sT0FBTyxHQUFtQyxFQUFFLENBQUM7SUFDbkQsSUFBSSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7UUFDbkMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN4QixPQUFPLENBQUMsSUFBSSxDQUFFLE1BQStCLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEY7S0FDSjtJQUNELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFTO0lBQy9CLDBKQUEw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QUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDdEQsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFO29CQUMvQixZQUFZLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlEO3FCQUFNO29CQUNILFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUN6QjthQUNKO1NBQ0o7UUFFRCxPQUFPO1lBQ0gsT0FBTztZQUNQLFFBQVE7WUFDUixZQUFZO1NBQ2YsQ0FBQztJQUNOLENBQUM7SUFFRCwyQkFBMkI7UUFDdkIsSUFBSSxJQUFJLENBQUMsdUNBQXVDLEVBQUU7WUFDOUMsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLHVDQUF1QyxHQUFHLElBQUksQ0FBQztRQUNwRCxTQUFTLENBQUMsT0FBTzthQUNaLFFBQVEsRUFBRTthQUNWLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztDQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vc3JjL2ZpbGUtbG9hZGVycy9sbXZ0ay9vdGcvT1BGU0NhY2hlLnRzP2YyNTYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgbGliPVwid2Vid29ya2VyXCIgLz5cblxuaW1wb3J0IHsgYmluVG9QYWNrZWRTdHJpbmcsIHBhY2tlZFRvQmluIH0gZnJvbSAnLi9IYXNoU3RyaW5ncyc7XG5cbi8vIE1ldGFkYXRhIGZpbGUgbGF5b3V0OlxuLy8gNCBieXRlczogbGFzdCBhY2Nlc3MgdGltZXN0YW1wXG4vLyAyMCBieXRlcyBoYXNoICsgNCBieXRlcyBzaXplIG9mIHRoZSBmaXJzdCBibG9iIGluIHRoZSBkYXRhIGZpbGVcbi8vIHNhbWUgZm9yIHRoZSBzZWNvbmQgYmxvYiBldGNcbmNvbnN0IE1FVEFEQVRBX09GRlNFVCA9IDQ7XG5jb25zdCBIQVNIX1NJWkUgPSAyMDtcbmNvbnN0IE1FVEFEQVRBX1NUUklERSA9IEhBU0hfU0laRSArIDQ7XG5cbmNvbnN0IE1FVEFEQVRBX1NVRkZJWCA9ICdfbWV0YWRhdGEnO1xuXG5jb25zdCBCVUNLRVRfT1BFTl9GQUlMRUQgPSAnUGxhY2Vob2xkZXIgdmFsdWUgZm9yIGJ1Y2tldHMgdGhhdCBmYWlsZWQgdG8gb3Blbic7XG50eXBlIEJ1Y2tldE9wZW5GYWlsZWQgPSB0eXBlb2YgQlVDS0VUX09QRU5fRkFJTEVEO1xuXG5jb25zdCBFVklDVElPTl9DVVRPRkYgPSAzICogMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyBFdmljdCBldmVyeXRoaW5nIG9sZGVyIHRoYW4gMyBtb250aHNcblxuY29uc3QgV1JJVEVfTE9DS19QUkVGSVggPSAnb3Bmcy1jYWNoZS13cml0ZS1sb2NrLSc7XG5cbmNvbnN0IFFVT1RBX0VYQ0VFREVEX0VSUk9SID0gJ1F1b3RhRXhjZWVkZWRFcnJvcic7IC8vIGZyb20gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNxdW90YWV4Y2VlZGVkZXJyb3JcblxudHlwZSBCdWNrZXQgPSB7XG4gICAgZGF0YUhhbmRsZTogRmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGU7IC8vIFN5bmNocm9ub3VzIGZpbGUgaGFuZGxlIHRvIHRoZSBkYXRhIHN0b3JhZ2UgZmlsZVxuICAgIG1ldGFkYXRhSGFuZGxlOiBGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZTsgLy8gU3luY2hyb25vdXMgZmlsZSBoYW5kbGUgdG8gdGhlIG1ldGFkYXRhIHN0b3JhZ2UgZmlsZVxuICAgIG9mZnNldHM6IE1hcDxzdHJpbmcsIFtudW1iZXIsIG51bWJlcl0+OyAvLyA8aGFzaCwgW29mZnNldCwgc2l6ZV0+XG4gICAgd3JpdGVMb2NrPzogKCkgPT4gdm9pZDsgLy8gRnVuY3Rpb24gdG8gcmVsZWFzZSB0aGUgd3JpdGUgbG9ja1xufTtcblxudHlwZSBTdGF0aXN0aWNzID0ge1xuICAgIGVudHJpZXM6IG51bWJlcjsgLy8gTnVtYmVyIG9mIGNhY2hlIGVudHJpZXNcbiAgICBkYXRhU2l6ZTogbnVtYmVyOyAvLyBTaXplIG9mIGRhdGEgc3RvcmVkIGluIGNhY2hlLiBEb2Vzbid0IGhhdmUgdG8gbWF0Y2ggYWN0dWFsIGRpc2MgdXNhZ2VcbiAgICBtZXRhZGF0YVNpemU6IG51bWJlcjsgLy8gU2l6ZSBvZiBtZXRhZGF0YSBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gT1BGUy5cbn07XG5cbi8vIFRTIGlzIG1pc3Npbmcgc29tZSBBUEksIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9pc3N1ZXMvMTYzOVxuLy8gU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mcy9ibG9iL21haW4vcHJvcG9zYWxzL011bHRpcGxlUmVhZGVyc1dyaXRlcnMubWQjbW9kZXMtb2YtY3JlYXRpbmctYS1maWxlc3lzdGVtc3luY2FjY2Vzc2hhbmRsZVxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBGaWxlU3lzdGVtRmlsZUhhbmRsZSB7XG4gICAgICAgIGNyZWF0ZVN5bmNBY2Nlc3NIYW5kbGUob3B0aW9uczogeyBtb2RlOiBzdHJpbmcgfSk6IFByb21pc2U8RmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGU+O1xuICAgIH1cbiAgICBpbnRlcmZhY2UgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSB7XG4gICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIEZpbGVTeXN0ZW1IYW5kbGVdPjtcbiAgICAgICAgZW50cmllcygpOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgRmlsZVN5c3RlbUhhbmRsZV0+O1xuICAgICAgICBrZXlzKCk6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxzdHJpbmc+O1xuICAgICAgICB2YWx1ZXMoKTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPEZpbGVTeXN0ZW1IYW5kbGU+O1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZXMoZGlyOiBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlKTogUHJvbWlzZTxBcnJheTxbc3RyaW5nLCBGaWxlXT4+IHtcbiAgICBjb25zdCByZXN1bHRzOiBBcnJheTxQcm9taXNlPFtzdHJpbmcsIEZpbGVdPj4gPSBbXTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IFtrZXksIGhhbmRsZV0gb2YgZGlyKSB7XG4gICAgICAgIGlmIChoYW5kbGUua2luZCA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goKGhhbmRsZSBhcyBGaWxlU3lzdGVtRmlsZUhhbmRsZSkuZ2V0RmlsZSgpLnRoZW4oKGZpbGUpID0+IFtrZXksIGZpbGVdKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdHMpO1xufVxuXG5mdW5jdGlvbiBtYWtlRmlsZW5hbWVTYWZlKHM6IHN0cmluZykge1xuICAgIC8vIExpc3Qgb2YgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzIGNvbWVzIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTk3NjAwNy93aGF0LWNoYXJhY3RlcnMtYXJlLWZvcmJpZGRlbi1pbi13aW5kb3dzLWFuZC1saW51eC1kaXJlY3RvcnktbmFtZXNcbiAgICByZXR1cm4gcy5yZXBsYWNlQWxsKC88fD58OnxcInxcXC98XFxcXHxcXHx8XFw/XFwqL2csICdfJyk7XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhbiBhc3NldCBjYWNoZSB1c2luZyB0aGUgT3JpZ2luIFByaXZhdGUgRmlsZSBTeXN0ZW0gKE9QRlMpLlxuICogSXQgaGFzIGFyYml0cmFyaWx5IG1hbnkgYnVja2V0cyB3aGljaCBhcmUgaWRlbnRpZmllZCBieSBhcmJpdHJhcnkgbmFtZXMuIEVhY2ggYnVja2V0IGlzIHN0b3JlZCBhcyB0d28gZmlsZXMuXG4gKiBUaGUgZmlyc3QgZmlsZSBjb250YWlucyBvbmx5IHRoZSBjb25jYXRlbmF0ZWQgYXNzZXQgYmxvYnMsIHRoZSBzZWNvbmQgZmlsZSBjb250YWlucyBtZXRhZGF0YSwgaS5lLiBoYXNoZXMgYW5kIHNpemVzIG9mIHRoZSBibG9icy5cbiAqIEBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgT1BGU0NhY2hlIHtcbiAgICAjYW5hbHl0aWNzQ2FsbGJhY2s6ICgobmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICAjcXVvdGFFeGNlZWRlZEFuYWx5dGljc0NhbGxiYWNrRXhlY3V0ZWQgPSBmYWxzZTtcbiAgICAjaW5pdFByb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gICAgI2V2aWN0UHJvbWlzZTogUHJvbWlzZTxib29sZWFuPiB8IHVuZGVmaW5lZDtcbiAgICAjY2FjaGVEaXI6IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUgfCBudWxsID0gbnVsbDtcbiAgICAjYnVja2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBCdWNrZXQgfCBCdWNrZXRPcGVuRmFpbGVkPigpO1xuICAgICNpbml0aWFsaXppbmdCdWNrZXRzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8QnVja2V0IHwgQnVja2V0T3BlbkZhaWxlZD4+KCk7XG4gICAgI2NhY2hlRGlyZWN0b3J5TmFtZSA9ICcnO1xuXG4gICAgLyoqIENyZWF0ZXMgYSBuZXcgT1BGU0NhY2hlIGluc3RhbmNlLiBDcmVhdGVzIHRoZSBjYWNoZSBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuICovXG4gICAgY29uc3RydWN0b3IoYW5hbHl0aWNzQ2FsbGJhY2s/OiAobmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzOiB1bmtub3duKSA9PiB2b2lkLCBjYWNoZURpcmVjdG9yeU5hbWUgPSAnb3RnX2NhY2hlJykge1xuICAgICAgICB0aGlzLiNjYWNoZURpcmVjdG9yeU5hbWUgPSBjYWNoZURpcmVjdG9yeU5hbWU7XG4gICAgICAgIHRoaXMuI2luaXRQcm9taXNlID0gdGhpcy4jaW5pdCgpO1xuICAgICAgICB0aGlzLiNhbmFseXRpY3NDYWxsYmFjayA9IGFuYWx5dGljc0NhbGxiYWNrO1xuICAgIH1cblxuICAgIGFzeW5jICNpbml0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gdGhpcyB0aHJvd3Mgb24gZmlyZWZveCBhbmQgc2FmYXJpIGluIHByaXZhdGUgYnJvd3NpbmcgbW9kZVxuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IGF3YWl0IG5hdmlnYXRvci5zdG9yYWdlLmdldERpcmVjdG9yeSgpO1xuICAgICAgICAgICAgLy8gdGhpcyB0aHJvd3Mgd2hlbiB0aGUgcXVvdGEgaXMgZXhjZWVkZWRcbiAgICAgICAgICAgIHRoaXMuI2NhY2hlRGlyID0gYXdhaXQgcm9vdC5nZXREaXJlY3RvcnlIYW5kbGUodGhpcy4jY2FjaGVEaXJlY3RvcnlOYW1lLCB7IGNyZWF0ZTogdHJ1ZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gb3BlbiBjYWNoZSBkaXJlY3RvcnknLCBlKTtcbiAgICAgICAgICAgIHRoaXMuI2FuYWx5dGljc0NhbGxiYWNrPy4oJ3ZpZXdlci5vcGZzQ2FjaGUuY2FjaGVPcGVuRmFpbGVkJywge1xuICAgICAgICAgICAgICAgIGVycm9yTmFtZTogZS5uYW1lLFxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogZS5tZXNzYWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaW5pdFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlbihidWNrZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPEJ1Y2tldCB8IEJ1Y2tldE9wZW5GYWlsZWQ+IHtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy4jYnVja2V0cy5nZXQoYnVja2V0TmFtZSk7XG4gICAgICAgIGlmIChidWNrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBidWNrZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcCA9IHRoaXMuI2luaXRpYWxpemluZ0J1Y2tldHMuZ2V0KGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICAgICAgcCA9IChhc3luYyAoKTogUHJvbWlzZTxCdWNrZXQgfCBCdWNrZXRPcGVuRmFpbGVkPiA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNpbml0UHJvbWlzZTtcblxuICAgICAgICAgICAgbGV0IGRhdGFBY2Nlc3NIYW5kbGUsIG1ldGFkYXRhQWNjZXNzSGFuZGxlO1xuICAgICAgICAgICAgbGV0IGJ1Y2tldDogQnVja2V0IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgYnVja2V0RmlsZU5hbWUgPSBtYWtlRmlsZW5hbWVTYWZlKGJ1Y2tldE5hbWUpO1xuICAgICAgICAgICAgY29uc3Qgd3JpdGVMb2NrTmFtZSA9IFdSSVRFX0xPQ0tfUFJFRklYICsgYnVja2V0RmlsZU5hbWU7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLiNjYWNoZURpcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhY2hlIGRpcmVjdG9yeSBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhRHJhZnRIYW5kbGUgPSBhd2FpdCB0aGlzLiNjYWNoZURpci5nZXRGaWxlSGFuZGxlKGJ1Y2tldEZpbGVOYW1lLCB7IGNyZWF0ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBkYXRhQWNjZXNzSGFuZGxlID0gYXdhaXQgZGF0YURyYWZ0SGFuZGxlLmNyZWF0ZVN5bmNBY2Nlc3NIYW5kbGUoeyBtb2RlOiAncmVhZHdyaXRlLXVuc2FmZScgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YURyYWZ0SGFuZGxlID0gYXdhaXQgdGhpcy4jY2FjaGVEaXIuZ2V0RmlsZUhhbmRsZShidWNrZXRGaWxlTmFtZSArIE1FVEFEQVRBX1NVRkZJWCwge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFBY2Nlc3NIYW5kbGUgPSBhd2FpdCBtZXRhZGF0YURyYWZ0SGFuZGxlLmNyZWF0ZVN5bmNBY2Nlc3NIYW5kbGUoeyBtb2RlOiAncmVhZHdyaXRlLXVuc2FmZScgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lc3RhbXBCdWZmZXIgPSBuZXcgVWludDMyQXJyYXkoMSk7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBmaWxlJ3MgbGFzdE1vZGlmaWVkIHZhbHVlIHRvIGF2b2lkIGV2aWN0aW9uXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wQnVmZmVyWzBdID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFBY2Nlc3NIYW5kbGUud3JpdGUodGltZXN0YW1wQnVmZmVyLCB7IGF0OiAwIH0pO1xuICAgICAgICAgICAgICAgIGJ1Y2tldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUhhbmRsZTogZGF0YUFjY2Vzc0hhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0czogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YUhhbmRsZTogbWV0YWRhdGFBY2Nlc3NIYW5kbGUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLiNidWNrZXRzLnNldChidWNrZXROYW1lLCBidWNrZXQpO1xuXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3Qod3JpdGVMb2NrTmFtZSwgeyBpZkF2YWlsYWJsZTogdHJ1ZSwgbW9kZTogJ2V4Y2x1c2l2ZScgfSwgKGxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYl9Mb2Nrc19BUEkjYWR2YW5jZWRfdXNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVja2V0IGFzIEJ1Y2tldCkud3JpdGVMb2NrID0gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIFJlYWQgbWV0YWRhdGEgYW5kIGZpbGUgc2l6ZSBzYW5pdHkgY2hlY2tcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZERhdGFTaXplID0gdGhpcy4jbG9hZE1ldGFkYXRhKGJ1Y2tldCk7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkRGF0YVNpemUgIT09IGJ1Y2tldC5kYXRhSGFuZGxlLmdldFNpemUoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RhdGEgZmlsZSBoYXMgdW5leHBlY3RlZCBzaXplLCBjbGVhcmluZyBjYWNoZSBmb3InLCBidWNrZXROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0Lm9mZnNldHMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0LmRhdGFIYW5kbGUudHJ1bmNhdGUoMCk7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5tZXRhZGF0YUhhbmRsZS50cnVuY2F0ZShNRVRBREFUQV9PRkZTRVQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBidWNrZXQ7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgRmFpbGVkIHRvIGFjcXVpcmUgbG9jayBvbiBjYWNoZSBmb3IgJHtidWNrZXROYW1lfS4gSXQgaXMgcHJvYmFibHkgb3BlbiBpbiBhbm90aGVyIHRhYi4gRGlzYWJsaW5nIGNhY2hlLmBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBpbml0aWFsaXplIGNhY2hlIGJ1Y2tldCcsIGJ1Y2tldE5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY2FjaGUgZGlyIG9wZW4gZmFpbHVyZXMgaGF2ZSB0aGVpciBvd24gZXZlbnQgYWJvdmVcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jY2FjaGVEaXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jYW5hbHl0aWNzQ2FsbGJhY2s/Ligndmlld2VyLm9wZnNDYWNoZS5idWNrZXRPcGVuRmFpbGVkJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTmFtZTogZXJyb3IubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGF0YUFjY2Vzc0hhbmRsZT8uY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YUFjY2Vzc0hhbmRsZT8uY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBidWNrZXQ/LndyaXRlTG9jaz8uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jYnVja2V0cy5zZXQoYnVja2V0TmFtZSwgQlVDS0VUX09QRU5fRkFJTEVEKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQlVDS0VUX09QRU5fRkFJTEVEO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNpbml0aWFsaXppbmdCdWNrZXRzLmRlbGV0ZShidWNrZXROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgdGhpcy4jaW5pdGlhbGl6aW5nQnVja2V0cy5zZXQoYnVja2V0TmFtZSwgcCk7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgICNsb2FkTWV0YWRhdGEoYnVja2V0OiBCdWNrZXQpIHtcbiAgICAgICAgYnVja2V0Lm9mZnNldHMuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBtZXRhZGF0YVNpemUgPSBidWNrZXQubWV0YWRhdGFIYW5kbGUuZ2V0U2l6ZSgpIC0gTUVUQURBVEFfT0ZGU0VUO1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkobWV0YWRhdGFTaXplKTtcbiAgICAgICAgY29uc3QgZGF0YTMyID0gbmV3IFVpbnQzMkFycmF5KGRhdGEuYnVmZmVyKTtcbiAgICAgICAgYnVja2V0Lm1ldGFkYXRhSGFuZGxlLnJlYWQoZGF0YSwgeyBhdDogTUVUQURBVEFfT0ZGU0VUIH0pO1xuXG4gICAgICAgIGNvbnN0IHN0cmlkZSA9IE1FVEFEQVRBX1NUUklERTtcbiAgICAgICAgbGV0IGN1cnJlbnREYXRhT2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZGF0YS5ieXRlTGVuZ3RoOyBvZmZzZXQgKz0gc3RyaWRlKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNoID0gYmluVG9QYWNrZWRTdHJpbmcoZGF0YSwgb2Zmc2V0LCBIQVNIX1NJWkUpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGRhdGEzMlsob2Zmc2V0ICsgSEFTSF9TSVpFKSAvIDRdO1xuICAgICAgICAgICAgYnVja2V0Lm9mZnNldHMuc2V0KGhhc2gsIFtjdXJyZW50RGF0YU9mZnNldCwgc2l6ZV0pO1xuICAgICAgICAgICAgY3VycmVudERhdGFPZmZzZXQgKz0gc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudERhdGFPZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBoYXNoLiBBdHRlbXB0cyBvbmUgcm91bmQgb2YgY2FjaGUgZXZpY3Rpb24gaWYgdGhlIHF1b3RhIGlzIGV4Y2VlZGVkLlxuICAgICAqIE5vdGUgdGhpcyBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBoYXNoZXMgYXJlIGFscmVhZHkgY2FjaGVkLiBJdCB3aWxsIGlnbm9yZSByZXF1ZXN0cyBmb3IgYnVja2V0cyB0aGF0IGFyZSBub3Qgb3BlbiB5ZXQuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gaGFzaGVzIC0gMjAgYnl0ZSBoYXNoZXMgb2YgZGF0YXNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBidWNrZXROYW1lcyAtIE5hbWVzIG9mIHRoZSBidWNrZXRzIGluIHdoaWNoIHRoZSBoYXNoZXMgc2hvdWxkIGJlIHN0b3JlZC4gTXVzdCBoYXZlIHNhbWUgbGVuZ3RoIGFzIGhhc2hlcy5cbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gZGF0YXMgLSBBcnJheSBvZiBkYXRhIHRvIHN0b3JlXG4gICAgICogQHRocm93cyAtIEFueSBlcnJvciB0aHJvd24gYnkgdGhlIHVuZGVybHlpbmcgd3JpdGUgZnVuY3Rpb24gZXhjZXB0IFF1b3RhRXhjZWVkZWRFcnJvclxuICAgICAqL1xuICAgIHN0b3JlKGhhc2hlczogc3RyaW5nW10sIGJ1Y2tldE5hbWVzOiBzdHJpbmdbXSwgZGF0YXM6IFVpbnQ4QXJyYXlbXSkge1xuICAgICAgICAvLyBzcGxpdCBoYXNoZXMsIGJ1Y2tldE5hbWVzIGFuZCBkYXRhcyBieSBidWNrZXROYW1lXG4gICAgICAgIGNvbnN0IGJ1Y2tldHMgPSBuZXcgTWFwPHN0cmluZywgW3N0cmluZ1tdLCBVaW50OEFycmF5W11dPigpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldE5hbWVzW2ldO1xuICAgICAgICAgICAgbGV0IGJ1Y2tldCA9IGJ1Y2tldHMuZ2V0KGJ1Y2tldE5hbWUpO1xuICAgICAgICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgICAgICAgICBidWNrZXQgPSBbW10sIFtdXTtcbiAgICAgICAgICAgICAgICBidWNrZXRzLnNldChidWNrZXROYW1lLCBidWNrZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVja2V0WzBdLnB1c2goaGFzaGVzW2ldKTtcbiAgICAgICAgICAgIGJ1Y2tldFsxXS5wdXNoKGRhdGFzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtidWNrZXROYW1lLCBbaGFzaGVzLCBkYXRhc11dIG9mIGJ1Y2tldHMpIHtcbiAgICAgICAgICAgIHRoaXMuI3N0b3JlSW5uZXIoaGFzaGVzLCBidWNrZXROYW1lLCBkYXRhcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyAjc3RvcmVJbm5lcihoYXNoZXM6IHN0cmluZ1tdLCBidWNrZXROYW1lOiBzdHJpbmcsIGRhdGFzOiBVaW50OEFycmF5W10pOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyBDb2xsZWN0IGRhdGEgaW50byB0d28gYnVmZmVycyBmb3IgZGF0YSBhbmQgbWV0YWRhdGFcbiAgICAgICAgLy8gVGhpcyBpcyBkb25lIGZpcnN0IGJlY2F1c2UgaWYgd2UgZ28gYXN5bmMgKGV2aWN0aW9uKSxcbiAgICAgICAgLy8gd2UgbXVzdCBoYXZlIGNvcGllZCB0aGUgYnVmZmVycyBiZWZvcmUgYmVjYXVzZSB0aGUgY2FsbGVyIG1pZ2h0IHRyYW5zZmVyIHRoZW0uXG4gICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuI2J1Y2tldHMuZ2V0KGJ1Y2tldE5hbWUpO1xuICAgICAgICBpZiAoIWJ1Y2tldCB8fCBidWNrZXQgPT09IEJVQ0tFVF9PUEVOX0ZBSUxFRCB8fCAhYnVja2V0LndyaXRlTG9jaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGVuZ3RocyA9IGRhdGFzLm1hcCgoZCkgPT4gZC5sZW5ndGgpOyAvLyBsZW5ndGhzIGJlY29tZSAwIG9uIHRyYW5zZmVyXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoaGFzaGVzLmxlbmd0aCAqIE1FVEFEQVRBX1NUUklERSk7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQnVmZmVyMzIgPSBuZXcgVWludDMyQXJyYXkobWV0YWRhdGFCdWZmZXIuYnVmZmVyKTtcbiAgICAgICAgY29uc3QgZGF0YUJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGxlbmd0aHMucmVkdWNlKChhY2MsIGQpID0+IGFjYyArIGQsIDApKTtcbiAgICAgICAgbGV0IGRhdGFCdWZmZXJPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGRhdGFzW2ldO1xuICAgICAgICAgICAgcGFja2VkVG9CaW4oaGFzaGVzW2ldLCBtZXRhZGF0YUJ1ZmZlciwgaSAqIE1FVEFEQVRBX1NUUklERSk7XG4gICAgICAgICAgICBtZXRhZGF0YUJ1ZmZlcjMyWyhpICogTUVUQURBVEFfU1RSSURFICsgSEFTSF9TSVpFKSAvIDRdID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBkYXRhQnVmZmVyLnNldChkYXRhLCBkYXRhQnVmZmVyT2Zmc2V0KTtcbiAgICAgICAgICAgIGRhdGFCdWZmZXJPZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnbyBhc3luYyB0byBsZXQgdGhlIGNhbGxlciBjb250aW51ZSBwcm9jZXNzaW5nIChlLmcuIHNlbmQgdGhlIGRhdGEgdG8gdGhlIGRlY29kZXIgdGhyZWFkcylcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpO1xuXG4gICAgICAgIC8vIFdyaXRlIHRoZSBidWZmZXJzXG4gICAgICAgIGlmICghdGhpcy4jd3JpdGVCYXRjaFdpdGhSb2xsYmFjayhidWNrZXQsIGRhdGFCdWZmZXIsIG1ldGFkYXRhQnVmZmVyKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jZXZpY3QoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy4jd3JpdGVCYXRjaFdpdGhSb2xsYmFjayhidWNrZXQsIGRhdGFCdWZmZXIsIG1ldGFkYXRhQnVmZmVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgaW4tbWVtb3J5IGluZGV4XG4gICAgICAgIGxldCBvZmZzZXQgPSBidWNrZXQuZGF0YUhhbmRsZS5nZXRTaXplKCkgLSBkYXRhQnVmZmVyLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1Y2tldC5vZmZzZXRzLnNldChoYXNoZXNbaV0sIFtvZmZzZXQsIGxlbmd0aHNbaV1dKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBsZW5ndGhzW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyBkYXRhIGFuZCBtZXRhZGF0YSB0byB0aGUgYnVja2V0LiBUcmllcyB0byByb2xsIGJhY2sgd3JpdGVzIG9uIGFueSBlcnJvci5cbiAgICAgKiBAcGFyYW0ge0J1Y2tldH0gYnVja2V0IC0gQnVja2V0IHRvIHdyaXRlIHRvXG4gICAgICogQHBhcmFtIHtVaW50OEFycmF5fSBkYXRhQnVmZmVyIC0gRGF0YSB0byB3cml0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtZXRhZGF0YUJ1ZmZlciAtIE1ldGFkYXRhIHRvIHdyaXRlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdHJ1ZSwgaWYgZGF0YSB3YXMgd3JpdHRlbiBzdWNjZXNzZnVsbHksIGZhbHNlIGlmIHRoZSBxdW90YSB3YXMgZXhjZWVkZWRcbiAgICAgKiBAdGhyb3dzIC0gYW55IGVycm9yIHRocm93biBieSB0aGUgdW5kZXJseWluZyB3cml0ZSBmdW5jdGlvbiBleGNlcHQgUXVvdGFFeGNlZWRlZEVycm9yXG4gICAgICovXG4gICAgI3dyaXRlQmF0Y2hXaXRoUm9sbGJhY2soYnVja2V0OiBCdWNrZXQsIGRhdGFCdWZmZXI6IFVpbnQ4QXJyYXksIG1ldGFkYXRhQnVmZmVyOiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRhdGFTaXplID0gYnVja2V0LmRhdGFIYW5kbGUuZ2V0U2l6ZSgpO1xuICAgICAgICBjb25zdCBtZXRhZGF0YVNpemUgPSBidWNrZXQubWV0YWRhdGFIYW5kbGUuZ2V0U2l6ZSgpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLiN3cml0ZShidWNrZXQuZGF0YUhhbmRsZSwgZGF0YUJ1ZmZlciwgeyBhdDogZGF0YVNpemUgfSk7XG4gICAgICAgICAgICB0aGlzLiN3cml0ZShidWNrZXQubWV0YWRhdGFIYW5kbGUsIG1ldGFkYXRhQnVmZmVyLCB7IGF0OiBtZXRhZGF0YVNpemUgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBFdmVyeSBlcnJvciBjb3VsZCBjb21lIHdpdGggYSBwYXJ0aWFsIHdyaXRlLCBzbyB3ZSB0cnkgdG8gcm9sbCBpdCBiYWNrLlxuICAgICAgICAgICAgLy8gSW4gdGhlb3J5LCB0cnVuY2F0aW5nIGNhbiBhbHNvIGZhaWwsIGJ1dCB3ZSBjYW4ndCBkbyBhbnl0aGluZyBhYm91dCBpdC4gVGhlIG5leHQgY2FjaGUgb3BlbiB3aWxsIGNsZWFyIHRoZSBjYWNoZSBpbiB0aGF0IGNhc2UuXG4gICAgICAgICAgICBidWNrZXQuZGF0YUhhbmRsZS50cnVuY2F0ZShkYXRhU2l6ZSk7XG4gICAgICAgICAgICBidWNrZXQubWV0YWRhdGFIYW5kbGUudHJ1bmNhdGUobWV0YWRhdGFTaXplKTtcbiAgICAgICAgICAgIGlmIChlcnJvci5uYW1lICE9PSBRVU9UQV9FWENFRURFRF9FUlJPUikge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4jc2VuZFF1b3RhRXhjZWVkZWRBbmFseXRpY3MoKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcGVyIGFyb3VuZCBGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZS53cml0ZSB0byB0dXJuIHBhcnRpYWwgd3JpdGVzIGludG8gYW4gZXhjZXB0aW9uIGFuZCB0byBoYW5kbGUgYSBjaHJvbWUgYnVnXG4gICAgICovXG4gICAgI3dyaXRlKGhhbmRsZTogRmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGUsIGRhdGE6IFVpbnQ4QXJyYXksIG9wdGlvbnM6IEZpbGVTeXN0ZW1SZWFkV3JpdGVPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJ5dGVzV3JpdHRlbiA9IGhhbmRsZS53cml0ZShkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgLy8gQ2hyb21lIGJ1ZyB3b3JrYXJvdW5kOiBXaGVuIGV4Y2VlZGluZyB0aGUgcXVvdGEgaW4gaW5jb2duaXRvIG1vZGUsIGl0IGRvZXMgYSBwYXJ0aWFsIHdyaXRlLFxuICAgICAgICAvLyB0aHJvd3Mgbm8gUXVvdGFFeGNlZWRlZEVycm9yLCBhbmQgcmV0dXJucyBzb21ldGhpbmcgbGlrZSAweEZGRkZGRjAwLCBtYXliZSBhbiBpbnRlcm5hbCBlcnJvciBjb2RlLlxuICAgICAgICAvLyBOb3QgaGF2aW5nIHRoaXMgY29kZSBoZXJlIGFuZCBqdXN0IHRocm93aW5nIGEgZ2VuZXJpYyBleGNlcHRpb24gbGlrZSBiZWxvdyB3b3VsZCB3b3JrLFxuICAgICAgICAvLyBidXQgdHVybmluZyB0aGlzIGludG8gYSBRdW90YUV4Y2VlZGVkRXJyb3IgYWxsb3dzIHBsYXl3cmlnaHQgdGVzdHMgdG8gY29udGludWUgdXNpbmcgaW5jb2duaXRvIG1vZGUuXG4gICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPiBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignUXVvdGEgRXhjZWVkZWQgaW4gQ2hyb21lIEluY29nbml0byBtb2RlJywgUVVPVEFfRVhDRUVERURfRVJST1IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBzcGVjIGFsbG93cyBwYXJ0aWFsIHdyaXRlcywgc2VlIGh0dHBzOi8vZnMuc3BlYy53aGF0d2cub3JnLyNhcGktZmlsZXN5c3RlbXN5bmNhY2Nlc3NoYW5kbGUtd3JpdGUuXG4gICAgICAgIC8vIFdlJ2xsIGhhbmRsZSB0aGF0IGFzIGFuIGVycm9yLlxuICAgICAgICAvLyBOb3RlIHRoYXQgd2hlbiBgd3JpdGVgIHRocm93cyBzb21lIG90aGVyIGVycm9yLCBpdCBjb3VsZCBhbHNvIGhhdmUgcGVyZm9ybWVkIGEgcGFydGlhbCB3cml0ZS5cbiAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1BhcnRpYWwgd3JpdGUgZGV0ZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXRyaWV2ZXMgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGhhc2hlcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBoYXNoZXMgLSBBcnJheSBvZiAyMCBieXRlIGhhc2hlcyBvZiB0aGUgZGF0YVxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IGJ1Y2tldE5hbWVzIC0gTmFtZXMgb2YgdGhlIGJ1Y2tldHMgaW4gd2hpY2ggdGhlIGhhc2hlcyBzaG91bGQgYmUgbG9va2VkIHVwLiBNdXN0IGhhdmUgc2FtZSBsZW5ndGggYXMgaGFzaGVzLlxuICAgICAqIEByZXR1cm5zIHtVaW50OEFycmF5W119IEFycmF5IG9mIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBoYXNoZXMuIElmIGEgaGFzaCBpcyBub3QgZm91bmQgaW4gdGhlIHNwZWNpZmllZCBidWNrZXQsIHRoZSBhcnJheSBjb250YWlucyBudWxsIGluc3RlYWQuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0KGhhc2hlczogc3RyaW5nW10sIGJ1Y2tldE5hbWVzOiBzdHJpbmdbXSk6IFByb21pc2U8KFVpbnQ4QXJyYXkgfCBudWxsKVtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxVaW50OEFycmF5IHwgbnVsbD4oaGFzaGVzLmxlbmd0aCkuZmlsbChudWxsKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoZXNbaV07XG4gICAgICAgICAgICBjb25zdCBidWNrZXROYW1lID0gYnVja2V0TmFtZXNbaV07XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLiNidWNrZXRzLmdldChidWNrZXROYW1lKSB8fCAoYXdhaXQgdGhpcy5vcGVuKGJ1Y2tldE5hbWUpKTtcbiAgICAgICAgICAgIGlmICghYnVja2V0IHx8IGJ1Y2tldCA9PT0gQlVDS0VUX09QRU5fRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaWxlT2Zmc2V0ID0gYnVja2V0Lm9mZnNldHMuZ2V0KGhhc2gpO1xuICAgICAgICAgICAgaWYgKCFmaWxlT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZmlsZU9mZnNldFsxXSk7XG4gICAgICAgICAgICBidWNrZXQuZGF0YUhhbmRsZS5yZWFkKGRhdGEsIHsgYXQ6IGZpbGVPZmZzZXRbMF0gfSk7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkYXRhIGZyb20gdGhlIGNhY2hlIHRvIG1ha2Ugcm9vbSBmb3IgbmV3LlxuICAgICAqIEFsd2F5cyByZW1vdmVzIGV2ZXJ5dGhpbmcgd2l0aCBhbiBMUlUtZGF0ZSBvbGRlciB0aGFuIEVWSUNUSU9OX0NVVE9GRiwgYW5kIHRoZW4gdHJpZXMgdG8gcmVtb3ZlIG1vcmUgaWYgbmVjZXNzYXJ5IHRvIGhpdCBtaW5GcmFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWluRnJhY3Rpb24gLSBNaW5pbWFsIGZyYWN0aW9uIG9mIGRhdGEgdGhhdCBzaG91bGQgdG8gYmUgcmVtb3ZlZC4gRS5nLiAwLjEgbWVhbnMgYXQgbGVhc3QgMTAlIG9mIHRoZSBjYWNoZSBzaG91bGQgYmUgZXZpY3RlZC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGFtb3VudCBvZiBkYXRhIG9yIG1vcmUgd2FzIGV2aWN0ZWQgZnJvbSB0aGUgY2FjaGVcbiAgICAgKi9cbiAgICBhc3luYyAjZXZpY3QobWluRnJhY3Rpb24gPSAwLjEpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKHRoaXMuI2V2aWN0UHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2V2aWN0UHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNldmljdFByb21pc2UgPSB0aGlzLiNldmljdEltcGwobWluRnJhY3Rpb24pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLiNldmljdFByb21pc2U7XG4gICAgICAgIHRoaXMuI2V2aWN0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyAjZXZpY3RJbXBsKG1pbkZyYWN0aW9uOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgYXdhaXQgdGhpcy4jaW5pdFByb21pc2U7XG4gICAgICAgIGlmICghdGhpcy4jY2FjaGVEaXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlcyA9IG5ldyBBcnJheTxGaWxlPigpO1xuICAgICAgICBsZXQgdG90YWxTaXplID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBbLCBmaWxlXSBvZiBhd2FpdCBnZXRGaWxlcyh0aGlzLiNjYWNoZURpcikpIHtcbiAgICAgICAgICAgIHRvdGFsU2l6ZSArPSBmaWxlLnNpemU7XG5cbiAgICAgICAgICAgIGlmICghZmlsZS5uYW1lLmVuZHNXaXRoKE1FVEFEQVRBX1NVRkZJWCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5CeXRlcyA9IHRvdGFsU2l6ZSAqIG1pbkZyYWN0aW9uO1xuXG4gICAgICAgIC8vIFdlIGRvIHdyaXRlIGEgbGFzdCBhY2Nlc3MgdGltZXN0YW1wIGludG8gdGhlIGZpbGVzLCBidXQgd2UgdXNlIHRoZSAubGFzdE1vZGlmaWVkIHByb3BlcnR5IGhlcmUsXG4gICAgICAgIC8vIHdoaWNoIHNob3VsZCBiZSBlcXVpdmFsZW50IGFuZCBkb2Vzbid0IHJlcXVpcmUgb3BlbmluZyB0aGUgZmlsZS4gV2Ugc3RpbGwgaGF2ZSB0byB3cml0ZSAqc29tZXRoaW5nKlxuICAgICAgICAvLyB0byB0aGUgZmlsZSB0byB1cGRhdGUgbGFzdE1vZGlmaWVkIHRob3VnaCBhcyB0aGVyZSBpcyBubyB0b3VjaCBBUEksIGFuZCBhIHRpbWVzdGFtcCBzZWVtZWQgb25seSBmaXR0aW5nLlxuICAgICAgICBjb25zdCBmaWxlc1NvcnRlZCA9IGZpbGVzLnNvcnQoKGEsIGIpID0+IGEubGFzdE1vZGlmaWVkIC0gYi5sYXN0TW9kaWZpZWQpO1xuICAgICAgICBsZXQgZGVsZXRlZEJ5dGVzID0gMDtcbiAgICAgICAgY29uc3QgY3V0b2ZmID0gRGF0ZS5ub3coKSAtIEVWSUNUSU9OX0NVVE9GRjtcbiAgICAgICAgZm9yIChjb25zdCBtZXRhZGF0YUZpbGUgb2YgZmlsZXNTb3J0ZWQpIHtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YUZpbGUubGFzdE1vZGlmaWVkID4gY3V0b2ZmICYmIGRlbGV0ZWRCeXRlcyA+PSBtaW5CeXRlcykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNjYWNoZURpci5yZW1vdmVFbnRyeShtZXRhZGF0YUZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlZEJ5dGVzICs9IG1ldGFkYXRhRmlsZS5zaXplO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYnVja2V0RmlsZU5hbWUgPSBtZXRhZGF0YUZpbGUubmFtZS5zbGljZSgwLCAtTUVUQURBVEFfU1VGRklYLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YUZpbGUgPSBhd2FpdCAoYXdhaXQgdGhpcy4jY2FjaGVEaXIuZ2V0RmlsZUhhbmRsZShidWNrZXRGaWxlTmFtZSkpLmdldEZpbGUoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNjYWNoZURpci5yZW1vdmVFbnRyeShidWNrZXRGaWxlTmFtZSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlZEJ5dGVzICs9IGRhdGFGaWxlLnNpemU7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGN1cnJlbnRseSBvcGVuIGZpbGVzIHdpbGwgdGhyb3cgdGhpc1xuICAgICAgICAgICAgICAgIGlmIChlLm5hbWUgIT09ICdOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBkdXJpbmcgY2FjaGUgZXZpY3Rpb24nLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbGV0ZWRCeXRlcyA+PSBtaW5CeXRlcztcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIGFsbCBvcGVuIGZpbGUgaGFuZGxlcy4gU2luY2UgdGhlIGhhbmRsZXMgYXJlIGV4Y2x1c2l2ZSwgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuXG4gICAgICogTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyB3aGlsZSBpbml0aWFsaXphdGlvbiBpcyBydW5uaW5nIHdpbGwgbWFrZSB0aGlzIGFzeW5jaHJvbm91cyxcbiAgICAgKiBhbmQgYXR0ZW1wdGluZyBhbnkgb3RoZXIgb3BlcmF0aW9uIHdoaWxlIHRoZSBjbG9zZSBpcyBpbiBwcm9ncmVzcyBtaWdodCBicmVhayB0aGluZ3MuXG4gICAgICogQWxzbywgY2FsbGluZyBjbG9zZSB3aGlsZSBlLmcuIGFuIGFzeW5jaHJvbm91cyBzdG9yZSBpcyBpbiBwcm9ncmVzcyB3aWxsIHByb2JhYmx5IGJyZWFrLlxuICAgICAqL1xuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgICB0aGlzLiNpbml0UHJvbWlzZSAmJiAoYXdhaXQgdGhpcy4jaW5pdFByb21pc2UpO1xuICAgICAgICB0aGlzLiNpbml0aWFsaXppbmdCdWNrZXRzLnNpemUgJiYgKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuI2luaXRpYWxpemluZ0J1Y2tldHMudmFsdWVzKCkpKTtcbiAgICAgICAgZm9yIChjb25zdCBidWNrZXQgb2YgdGhpcy4jYnVja2V0cy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKCFidWNrZXQgfHwgYnVja2V0ID09PSBCVUNLRVRfT1BFTl9GQUlMRUQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnVja2V0LmRhdGFIYW5kbGUpIHtcbiAgICAgICAgICAgICAgICBidWNrZXQuZGF0YUhhbmRsZS5mbHVzaCgpO1xuICAgICAgICAgICAgICAgIGJ1Y2tldC5kYXRhSGFuZGxlLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidWNrZXQubWV0YWRhdGFIYW5kbGUpIHtcbiAgICAgICAgICAgICAgICBidWNrZXQubWV0YWRhdGFIYW5kbGUuZmx1c2goKTtcbiAgICAgICAgICAgICAgICBidWNrZXQubWV0YWRhdGFIYW5kbGUuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmVsZWFzZSBhbGwgd3JpdGUgbG9ja3NcbiAgICAgICAgICAgIGJ1Y2tldC53cml0ZUxvY2s/LigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2J1Y2tldHMuY2xlYXIoKTtcbiAgICAgICAgYXdhaXQgdGhpcy4jZXZpY3QoMC4wKTtcbiAgICB9XG5cbiAgICAvKiogRGVsZXRlcyBhbGwgYnVja2V0cyAqL1xuICAgIGFzeW5jIGNsZWFyKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuI2V2aWN0KDEuMCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U3RhdHMoKTogUHJvbWlzZTxTdGF0aXN0aWNzPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuI2luaXRQcm9taXNlO1xuICAgICAgICBsZXQgZW50cmllcyA9IDA7XG4gICAgICAgIGxldCBkYXRhU2l6ZSA9IDA7XG4gICAgICAgIGxldCBtZXRhZGF0YVNpemUgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLiNjYWNoZURpcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBmaWxlXSBvZiBhd2FpdCBnZXRGaWxlcyh0aGlzLiNjYWNoZURpcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmVuZHNXaXRoKE1FVEFEQVRBX1NVRkZJWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFTaXplICs9IGZpbGUuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcyArPSAoZmlsZS5zaXplIC0gTUVUQURBVEFfT0ZGU0VUKSAvIE1FVEFEQVRBX1NUUklERTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSArPSBmaWxlLnNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVudHJpZXMsXG4gICAgICAgICAgICBkYXRhU2l6ZSxcbiAgICAgICAgICAgIG1ldGFkYXRhU2l6ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAjc2VuZFF1b3RhRXhjZWVkZWRBbmFseXRpY3MoKSB7XG4gICAgICAgIGlmICh0aGlzLiNxdW90YUV4Y2VlZGVkQW5hbHl0aWNzQ2FsbGJhY2tFeGVjdXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3F1b3RhRXhjZWVkZWRBbmFseXRpY3NDYWxsYmFja0V4ZWN1dGVkID0gdHJ1ZTtcbiAgICAgICAgbmF2aWdhdG9yLnN0b3JhZ2VcbiAgICAgICAgICAgIC5lc3RpbWF0ZSgpXG4gICAgICAgICAgICAudGhlbigoZXN0aW1hdGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNhbmFseXRpY3NDYWxsYmFjaz8uKCd2aWV3ZXIub3Bmc0NhY2hlLnF1b3RhRXhjZWVkZWQnLCBlc3RpbWF0ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgc3RvcmFnZSBlc3RpbWF0ZScsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/file-loaders/lmvtk/otg/OPFSCache.ts\n"); /***/ }), /***/ "./src/file-loaders/workers/OtgDecodeWorker.ts": /*!*****************************************************!*\ !*** ./src/file-loaders/workers/OtgDecodeWorker.ts ***! \*****************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ register: () => (/* binding */ register)\n/* harmony export */ });\n/* harmony import */ var _lmvtk_otg_OtgGeomCodec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lmvtk/otg/OtgGeomCodec */ \"./src/file-loaders/lmvtk/otg/OtgGeomCodec.js\");\n/* harmony import */ var fflate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fflate */ \"./node_modules/fflate/esm/browser.js\");\n\n\nfunction isGzip(data) {\n return data[0] === 31 && data[1] === 139;\n}\nfunction doInstallInputPort(loadContext) {\n loadContext.port.onmessage = (event) => {\n switch (event.data.operation) {\n case 'DECODE_GEOMETRIES ':\n doDecodeGeometries(loadContext, event.data.hashes, event.data.arrays, event.data.fromCache);\n break;\n case 'DECODE_MATERIALS ':\n doDecodeMaterials(loadContext.worker, event.data.hashes, event.data.arrays);\n break;\n }\n };\n}\nfunction doDecodeGeometries(loadContext, hashes, arrays, fromCaches) {\n const mdatas = new Array();\n for (let i = 0; i < hashes.length; i++) {\n const hash = hashes[i];\n let geom = arrays[i];\n const fromCache = fromCaches[i];\n // If the HTTP fallback was used, the browser already did the decompression\n // Also, we did encounter uncompressed blobs in production.\n if (isGzip(geom)) {\n geom = (0,fflate__WEBPACK_IMPORTED_MODULE_1__.gunzipSync)(geom);\n }\n else if (geom.byteLength !== geom.buffer.byteLength) {\n // create a copy so the main thread has individual buffers that can be thrown away individually\n geom = geom.slice();\n }\n const mdata = _lmvtk_otg_OtgGeomCodec__WEBPACK_IMPORTED_MODULE_0__.readLmvBufferGeom(geom);\n if (!mdata) {\n loadContext.raiseError(null, 'Failed to parse geometry ', { hash: hash, resourceType: 'g ' });\n continue;\n }\n mdata.fromCache = fromCache;\n mdata.hash = hash;\n mdatas.push(mdata);\n }\n const transferList = new Array();\n for (const mdata of mdatas) {\n const mesh = mdata.mesh;\n if (mesh) {\n const b = mesh.vb.buffer;\n transferList.push(b);\n if (mesh.indices && mesh.indices.buffer !== b) {\n transferList.push(mesh.indices.buffer);\n }\n if (mesh.iblines && mesh.iblines.buffer !== b) {\n transferList.push(mesh.iblines.buffer);\n }\n }\n }\n loadContext.worker.postMessage(mdatas, transferList);\n}\nfunction doDecodeMaterials(worker, hashes, arrays) {\n const out = new Array();\n for (let i = 0; i < hashes.length; i++) {\n let data = arrays[i];\n if (isGzip(data)) {\n data = (0,fflate__WEBPACK_IMPORTED_MODULE_1__.gunzipSync)(data);\n }\n else if (data.byteLength !== data.buffer.byteLength) {\n // create a copy so the main thread has individual buffers that can be thrown away individually\n data = data.slice();\n }\n out.push(data);\n }\n worker.postMessage({ materials: out, hashes: hashes }, out.map((e) => e.buffer));\n}\nfunction register(workerMain) {\n workerMain.register('INSTALL_INPUT_PORT ', { doOperation: doInstallInputPort });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvZmlsZS1sb2FkZXJzL3dvcmtlcnMvT3RnRGVjb2RlV29ya2VyLnRzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwRDtBQUV0QjtBQUVwQyxTQUFTLE1BQU0sQ0FBQyxJQUFnQjtJQUM1QixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUM3QyxDQUFDO0FBUUQsU0FBUyxrQkFBa0IsQ0FBQyxXQUFnQjtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQTBCLEVBQUUsRUFBRTtRQUN4RCxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFCLEtBQUssbUJBQW1CO2dCQUNwQixrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUYsTUFBTTtZQUNWLEtBQUssa0JBQWtCO2dCQUNuQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVFLE1BQU07U0FDYjtJQUNMLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFdBQWdCLEVBQUUsTUFBZ0IsRUFBRSxNQUFvQixFQUFFLFVBQXFCO0lBQ3ZHLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxFQUFPLENBQUM7SUFFaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUks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QUMsTUFBTSxDQUFDLENBQzNCLENBQUM7QUFDTixDQUFDO0FBRU0sU0FBUyxRQUFRLENBQUMsVUFBc0I7SUFDM0MsVUFBVSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDbkYsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL3NyYy9maWxlLWxvYWRlcnMvd29ya2Vycy9PdGdEZWNvZGVXb3JrZXIudHM/MTczZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBPdGdHZW9tQ29kZWMgZnJvbSAnLi4vbG12dGsvb3RnL090Z0dlb21Db2RlYyc7XG5pbXBvcnQgeyBXb3JrZXJNYWluIH0gZnJvbSAnLi9NYWluV29ya2VyJztcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tICdmZmxhdGUnO1xuXG5mdW5jdGlvbiBpc0d6aXAoZGF0YTogVWludDhBcnJheSkge1xuICAgIHJldHVybiBkYXRhWzBdID09PSAzMSAmJiBkYXRhWzFdID09PSAxMzk7XG59XG5cbnR5cGUgRGVjb2RlV29ya2VyTWVzc2FnZSA9IHtcbiAgICBkYXRhOlxuICAgICAgICB8IHsgb3BlcmF0aW9uOiAnREVDT0RFX0dFT01FVFJJRVMnOyBoYXNoZXM6IHN0cmluZ1tdOyBhcnJheXM6IFVpbnQ4QXJyYXlbXTsgZnJvbUNhY2hlOiBib29sZWFuW10gfVxuICAgICAgICB8IHsgb3BlcmF0aW9uOiAnREVDT0RFX01BVEVSSUFMUyc7IGhhc2hlczogc3RyaW5nW107IGFycmF5czogVWludDhBcnJheVtdIH07XG59O1xuXG5mdW5jdGlvbiBkb0luc3RhbGxJbnB1dFBvcnQobG9hZENvbnRleHQ6IGFueSkge1xuICAgIGxvYWRDb250ZXh0LnBvcnQub25tZXNzYWdlID0gKGV2ZW50OiBEZWNvZGVXb3JrZXJNZXNzYWdlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZGF0YS5vcGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ0RFQ09ERV9HRU9NRVRSSUVTJzpcbiAgICAgICAgICAgICAgICBkb0RlY29kZUdlb21ldHJpZXMobG9hZENvbnRleHQsIGV2ZW50LmRhdGEuaGFzaGVzLCBldmVudC5kYXRhLmFycmF5cywgZXZlbnQuZGF0YS5mcm9tQ2FjaGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnREVDT0RFX01BVEVSSUFMUyc6XG4gICAgICAgICAgICAgICAgZG9EZWNvZGVNYXRlcmlhbHMobG9hZENvbnRleHQud29ya2VyLCBldmVudC5kYXRhLmhhc2hlcywgZXZlbnQuZGF0YS5hcnJheXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZG9EZWNvZGVHZW9tZXRyaWVzKGxvYWRDb250ZXh0OiBhbnksIGhhc2hlczogc3RyaW5nW10sIGFycmF5czogVWludDhBcnJheVtdLCBmcm9tQ2FjaGVzOiBib29sZWFuW10pIHtcbiAgICBjb25zdCBtZGF0YXMgPSBuZXcgQXJyYXk8YW55PigpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGhhc2hlc1tpXTtcbiAgICAgICAgbGV0IGdlb20gPSBhcnJheXNbaV07XG4gICAgICAgIGNvbnN0IGZyb21DYWNoZSA9IGZyb21DYWNoZXNbaV07XG5cbiAgICAgICAgLy8gSWYgdGhlIEhUVFAgZmFsbGJhY2sgd2FzIHVzZWQsIHRoZSBicm93c2VyIGFscmVhZHkgZGlkIHRoZSBkZWNvbXByZXNzaW9uXG4gICAgICAgIC8vIEFsc28sIHdlIGRpZCBlbmNvdW50ZXIgdW5jb21wcmVzc2VkIGJsb2JzIGluIHByb2R1Y3Rpb24uXG4gICAgICAgIGlmIChpc0d6aXAoZ2VvbSkpIHtcbiAgICAgICAgICAgIGdlb20gPSBndW56aXBTeW5jKGdlb20pO1xuICAgICAgICB9IGVsc2UgaWYgKGdlb20uYnl0ZUxlbmd0aCAhPT0gZ2VvbS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgY29weSBzbyB0aGUgbWFpbiB0aHJlYWQgaGFzIGluZGl2aWR1YWwgYnVmZmVycyB0aGF0IGNhbiBiZSB0aHJvd24gYXdheSBpbmRpdmlkdWFsbHlcbiAgICAgICAgICAgIGdlb20gPSBnZW9tLnNsaWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZGF0YSA9IE90Z0dlb21Db2RlYy5yZWFkTG12QnVmZmVyR2VvbShnZW9tKSBhcyBhbnk7XG5cbiAgICAgICAgaWYgKCFtZGF0YSkge1xuICAgICAgICAgICAgbG9hZENvbnRleHQucmFpc2VFcnJvcihudWxsLCAnRmFpbGVkIHRvIHBhcnNlIGdlb21ldHJ5JywgeyBoYXNoOiBoYXNoLCByZXNvdXJjZVR5cGU6ICdnJyB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWRhdGEuZnJvbUNhY2hlID0gZnJvbUNhY2hlO1xuICAgICAgICBtZGF0YS5oYXNoID0gaGFzaDtcbiAgICAgICAgbWRhdGFzLnB1c2gobWRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZmVyTGlzdCA9IG5ldyBBcnJheTxBcnJheUJ1ZmZlcj4oKTtcbiAgICBmb3IgKGNvbnN0IG1kYXRhIG9mIG1kYXRhcykge1xuICAgICAgICBjb25zdCBtZXNoID0gbWRhdGEubWVzaDtcbiAgICAgICAgaWYgKG1lc2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBtZXNoLnZiLmJ1ZmZlcjtcbiAgICAgICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKGIpO1xuXG4gICAgICAgICAgICBpZiAobWVzaC5pbmRpY2VzICYmIG1lc2guaW5kaWNlcy5idWZmZXIgIT09IGIpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zlckxpc3QucHVzaChtZXNoLmluZGljZXMuYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXNoLmlibGluZXMgJiYgbWVzaC5pYmxpbmVzLmJ1ZmZlciAhPT0gYikge1xuICAgICAgICAgICAgICAgIHRyYW5zZmVyTGlzdC5wdXNoKG1lc2guaWJsaW5lcy5idWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGxvYWRDb250ZXh0Lndvcmtlci5wb3N0TWVzc2FnZShtZGF0YXMsIHRyYW5zZmVyTGlzdCk7XG59XG5cbmZ1bmN0aW9uIGRvRGVjb2RlTWF0ZXJpYWxzKHdvcmtlcjogV29ya2VyLCBoYXNoZXM6IHN0cmluZ1tdLCBhcnJheXM6IFVpbnQ4QXJyYXlbXSkge1xuICAgIGNvbnN0IG91dCA9IG5ldyBBcnJheTxVaW50OEFycmF5PigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFzaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBkYXRhID0gYXJyYXlzW2ldO1xuXG4gICAgICAgIGlmIChpc0d6aXAoZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGEgPSBndW56aXBTeW5jKGRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuYnl0ZUxlbmd0aCAhPT0gZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgY29weSBzbyB0aGUgbWFpbiB0aHJlYWQgaGFzIGluZGl2aWR1YWwgYnVmZmVycyB0aGF0IGNhbiBiZSB0aHJvd24gYXdheSBpbmRpdmlkdWFsbHlcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0LnB1c2goZGF0YSk7XG4gICAgfVxuICAgIHdvcmtlci5wb3N0TWVzc2FnZShcbiAgICAgICAgeyBtYXRlcmlhbHM6IG91dCwgaGFzaGVzOiBoYXNoZXMgfSxcbiAgICAgICAgb3V0Lm1hcCgoZSkgPT4gZS5idWZmZXIpXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHdvcmtlck1haW46IFdvcmtlck1haW4pIHtcbiAgICB3b3JrZXJNYWluLnJlZ2lzdGVyKCdJTlNUQUxMX0lOUFVUX1BPUlQnLCB7IGRvT3BlcmF0aW9uOiBkb0luc3RhbGxJbnB1dFBvcnQgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/file-loaders/workers/OtgDecodeWorker.ts\n"); /***/ }), /***/ "./node_modules/url/node_modules/punycode/punycode.js": /*!************************************************************!*\ !*** ./node_modules/url/node_modules/punycode/punycode.js ***! \************************************************************/ /***/ (function(module, exports, __webpack_require__) { eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = true && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = true && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof __webpack_require__.g == 'object ' && __webpack_require__.g;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '- ', // '\\x2D '\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow ': 'Overflow: input needs wider integers to process ',\n\t\t'not-basic ': 'Illegal input>= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue=s tring.charCodeAt(counter++);\n\t\t\tif (value>= 0xD800 && value <=0 xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra=s tring.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00)==0 xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output='' ;\n\t\t\tif (value> 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag !=0 ) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k=0 ;\n\t\tdelta=f irstTime ? floor(delta / damp) : delta>> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic=0 ;\n\t\t}\n\n\t\tfor (j=0 ; j < basic; ++j) {\n\t\t\t// if it 's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic ');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input ');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow ');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow ');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out)> maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue=i nput[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount=b asicLength=o utput.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m=m axInt, j=0 ; j < inputLength; ++j) {\n\t\t\t\tcurrentValue=i nput[j];\n\t\t\t\tif (currentValue>= n && currentValue < m) {\n\t\t\t\t\tm=c urrentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder 's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow ');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow ');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join(' ');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn 't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode={ \n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t 'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript 's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2 ': {\n\t\t\t'decode ': ucs2decode,\n\t\t\t'encode ': ucs2encode\n\t\t},\n\t\t'decode ': decode,\n\t\t'encode ': encode,\n\t\t'toASCII ': toASCII,\n\t\t'toUnicode ': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttrue\n\t) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\t\treturn punycode;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n\n}(this));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXJsL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQSxDQUFDOztBQUVEO0FBQ0EsbUJBQW1CLEtBQTBCO0FBQzdDO0FBQ0Esa0JBQWtCLEtBQXlCO0FBQzNDO0FBQ0EseUJBQXlCLHFCQUFNLGdCQUFnQixxQkFBTTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQixZQUFZLFVBQVU7QUFDdEI7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLFlBQVksVUFBVTtBQUN0QjtBQUNBLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFFVTtBQUNaO0FBQ0EsRUFBRSxtQ0FBbUI7QUFDckI7QUFDQSxHQUFHO0FBQUEsa0dBQUM7QUFDSixHQUFHLEtBQUssRUFVTjs7QUFFRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vTE1WLy4vbm9kZV9tb2R1bGVzL3VybC9ub2RlX21vZHVsZXMvcHVueWNvZGUvcHVueWNvZGUuanM/YWQ2YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjMuMiBieSBAbWF0aGlhcyAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlcyAqL1xuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmXG5cdFx0IWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdCFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoXG5cdFx0ZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwuc2VsZiA9PT0gZnJlZUdsb2JhbFxuXHQpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHB1bnljb2RlYCBvYmplY3QuXG5cdCAqIEBuYW1lIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0dmFyIHB1bnljb2RlLFxuXG5cdC8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cblx0bWF4SW50ID0gMjE0NzQ4MzY0NywgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG5cdC8qKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgKi9cblx0YmFzZSA9IDM2LFxuXHR0TWluID0gMSxcblx0dE1heCA9IDI2LFxuXHRza2V3ID0gMzgsXG5cdGRhbXAgPSA3MDAsXG5cdGluaXRpYWxCaWFzID0gNzIsXG5cdGluaXRpYWxOID0gMTI4LCAvLyAweDgwXG5cdGRlbGltaXRlciA9ICctJywgLy8gJ1xceDJEJ1xuXG5cdC8qKiBSZWd1bGFyIGV4cHJlc3Npb25zICovXG5cdHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vLFxuXHRyZWdleE5vbkFTQ0lJID0gL1teXFx4MjAtXFx4N0VdLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZywgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG5cdC8qKiBFcnJvciBtZXNzYWdlcyAqL1xuXHRlcnJvcnMgPSB7XG5cdFx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0XHQnbm90LWJhc2ljJzogJ0lsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCknLFxuXHRcdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG5cdH0sXG5cblx0LyoqIENvbnZlbmllbmNlIHNob3J0Y3V0cyAqL1xuXHRiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW4sXG5cdGZsb29yID0gTWF0aC5mbG9vcixcblx0c3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcblxuXHQvKiogVGVtcG9yYXJ5IHZhcmlhYmxlICovXG5cdGtleTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGVycm9yIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuXHQgKiBAcmV0dXJucyB7RXJyb3J9IFRocm93cyBhIGBSYW5nZUVycm9yYCB3aXRoIHRoZSBhcHBsaWNhYmxlIGVycm9yIG1lc3NhZ2UuXG5cdCAqL1xuXHRmdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdFx0dGhyb3cgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuXHQgKiBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuXHQgKiB0byBVbmljb2RlLiBPbmx5IHRoZSBQdW55Y29kZWQgcGFydHMgb2YgdGhlIGlucHV0IHdpbGwgYmUgY29udmVydGVkLCBpLmUuXG5cdCAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuXHQgKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogY29udmVydCB0byBVbmljb2RlLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUHVueWNvZGVcblx0ICogc3RyaW5nLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9Vbmljb2RlKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcblx0ICogaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluXG5cdCAqIEFTQ0lJLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvIGNvbnZlcnQsIGFzIGFcblx0ICogVW5pY29kZSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3Jcblx0ICogZW1haWwgYWRkcmVzcy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvQVNDSUkoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuXHRwdW55Y29kZSA9IHtcblx0XHQvKipcblx0XHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0J3ZlcnNpb24nOiAnMS4zLjInLFxuXHRcdC8qKlxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdFx0ICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cblx0XHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiBmcmVlTW9kdWxlKSB7XG5cdFx0aWYgKG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yIChrZXkgaW4gcHVueWNvZGUpIHtcblx0XHRcdFx0cHVueWNvZGUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IHB1bnljb2RlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QucHVueWNvZGUgPSBwdW55Y29kZTtcblx0fVxuXG59KHRoaXMpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/url/node_modules/punycode/punycode.js\n"); /***/ }), /***/ "./node_modules/url/url.js": /*!*********************************!*\ !*** ./node_modules/url/url.js ***! \*********************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar punycode = __webpack_require__(/*! punycode */ \"./node_modules/url/node_modules/punycode/punycode.js\");\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['< ', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = __webpack_require__(/*! querystring */ \"./node_modules/querystring/index.js\");\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec=r est.indexOf(hostEndingChars[i]);\n if (hec !==- 1 && (hostEnd===- 1 || hec < hostEnd))\n hostEnd=h ec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd===- 1) {\n // atSign can be anywhere.\n atSign=r est.lastIndexOf( '@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d=> host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec=r est.indexOf(nonHostChars[i]);\n if (hec !==- 1 && (hostEnd===- 1 || hec < hostEnd))\n hostEnd=h ec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd===- 1)\n hostEnd=r est.length;\n\n this.host=r est.slice(0, hostEnd);\n rest=r est.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we 've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname=t his.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it 's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[ ' &&\n this.hostname[this.hostname.length - 1] === '] ';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = ' ';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x ';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/ ' + notHost.join('. ') + rest;\n }\n this.hostname = validParts.join('. ');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = ' ';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a puny coded representation of \"domain\".\n // It only converts the part of the domain name that\n // has non ASCII characters. I.e. it dosent matter if\n // you call it with a domain that already is in ASCII.\n var domainArray = this.hostname.split('. ');\n var newOut = [];\n for (var i = 0; i < domainArray.length; ++i) {\n var s = domainArray[i];\n newOut.push(s.match(/[^A-Za-z0-9_-]/) ?\n 'xn-- ' + punycode.encode(s) : s);\n }\n this.hostname = newOut.join('. ');\n }\n\n var p = this.port ? ': ' + this.port : ' ';\n var h = this.hostname || ' ';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/ ') {\n rest = '/ ' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i=0 , l=a utoEscape.length; i < l; i++) {\n var ae=a utoEscape[i];\n var esc=e ncodeURIComponent(ae);\n if (esc===a e) {\n esc=e scape(ae);\n }\n rest=r est.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash=r est.indexOf( '#');\n if (hash !==- 1) {\n // got a fragment string.\n this.hash=r est.substr(hash);\n rest=r est.slice(0, hash);\n }\n var qm=r est.indexOf( '?');\n if (qm !==- 1) {\n this.search=r est.substr(qm);\n this.query=r est.substr(qm + 1);\n if (parseQueryString) {\n this.query=q uerystring.parse(this.query);\n }\n rest=r est.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search='' ;\n this.query={ };\n }\n if (rest) this.pathname=r est;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname='/' ;\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p=t his.pathname || '';\n var s=t his.search || '';\n this.path=p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href=t his.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it 's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (isString(obj)) obj=u rlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format=f unction() {\n var auth=t his.auth || '';\n if (auth) {\n auth=e ncodeURIComponent(auth);\n auth=a uth.replace(/%3A/i, ':');\n auth +='@' ;\n }\n\n var protocol=t his.protocol || '',\n pathname=t his.pathname || '',\n hash=t his.hash || '',\n host=f alse,\n query='' ;\n\n if (this.host) {\n host=a uth + this.host;\n } else if (this.hostname) {\n host=a uth + (this.hostname.indexOf( ':')===- 1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host +=':' + this.port;\n }\n }\n\n if (this.query &&\n isObject(this.query) &&\n Object.keys(this.query).length) {\n query=q uerystring.stringify(this.query);\n }\n\n var search=t his.search || (query && ( '?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !==':' ) protocol +=':' ;\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !==f alse) {\n host='//' + (host || '');\n if (pathname && pathname.charAt(0) !=='/' ) pathname='/' + pathname;\n } else if (!host) {\n host='' ;\n }\n\n if (hash && hash.charAt(0) !=='#' ) hash='#' + hash;\n if (search && search.charAt(0) !=='?' ) search='?' + search;\n\n pathname=p athname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search=s earch.replace( '#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve=f unction(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject=f unction(relative) {\n if (isString(relative)) {\n var rel=n ew Url();\n rel.parse(relative, false, true);\n relative=r el;\n }\n\n var result=n ew Url();\n Object.keys(this).forEach(function(k) {\n result[k]=t his[k];\n }, this);\n\n // hash is always overridden, no matter what.\n // even href=\ "\" will remove it.\n result.hash=r elative.hash;\n\n // if the relative url is empty, then there 's nothing left to do here.\n if (relative.href === ' ') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n Object.keys(relative).forEach(function(k) {\n if (k !== 'protocol ')\n result[k] = relative[k];\n });\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/ ';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it 's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n Object.keys(relative).forEach(function(k) {\n result[k]=r elative[k];\n });\n result.href=r esult.format();\n return result;\n }\n\n result.protocol=r elative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath=( relative.pathname || '').split( '/');\n while (relPath.length && !(relative.host=r elPath.shift()));\n if (!relative.host) relative.host='' ;\n if (!relative.hostname) relative.hostname='' ;\n if (relPath[0] !=='' ) relPath.unshift( '');\n if (relPath.length < 2) relPath.unshift( '');\n result.pathname=r elPath.join( '/');\n } else {\n result.pathname=r elative.pathname;\n }\n result.search=r elative.search;\n result.query=r elative.query;\n result.host=r elative.host || '';\n result.auth=r elative.auth;\n result.hostname=r elative.hostname || relative.host;\n result.port=r elative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p=r esult.pathname || '';\n var s=r esult.search || '';\n result.path=p + s;\n }\n result.slashes=r esult.slashes || relative.slashes;\n result.href=r esult.format();\n return result;\n }\n\n var isSourceAbs=( result.pathname && result.pathname.charAt(0)==='/' ),\n isRelAbs=( \n relative.host ||\n relative.pathname && relative.pathname.charAt(0)==='/' \n ),\n mustEndAbs=( isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots=m ustEndAbs,\n srcPath=r esult.pathname && result.pathname.split( '/') || [],\n relPath=r elative.pathname && relative.pathname.split( '/') || [],\n psychotic=r esult.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname='' ;\n result.port=n ull;\n if (result.host) {\n if (srcPath[0]==='' ) srcPath[0]=r esult.host;\n else srcPath.unshift(result.host);\n }\n result.host='' ;\n if (relative.protocol) {\n relative.hostname=n ull;\n relative.port=n ull;\n if (relative.host) {\n if (relPath[0]==='' ) relPath[0]=r elative.host;\n else relPath.unshift(relative.host);\n }\n relative.host=n ull;\n }\n mustEndAbs=m ustEndAbs && (relPath[0]==='' || srcPath[0]==='' );\n }\n\n if (isRelAbs) {\n // it 's absolute.\n result.host = (relative.host || relative.host === ' ') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === ' ') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath=[ ];\n srcPath.pop();\n srcPath=s rcPath.concat(relPath);\n result.search=r elative.search;\n result.query=r elative.query;\n } else if (!isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo' .\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname=r esult.host=s rcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especialy happens in cases like\n //url.resolveObject( 'mailto:local1@domain1', 'local2@domain2')\n var authInHost=r esult.host && result.host.indexOf( '@')> 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!isNull(result.pathname) || !isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host) && (last === '.' || last === '..') ||\n last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last == '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especialy happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!isNull(result.pathname) || !isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n\nfunction isString(arg) {\n return typeof arg === \"string\";\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isNull(arg) {\n return arg === null;\n}\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixRQUFRO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0xNVi8uL25vZGVfbW9kdWxlcy91cmwvdXJsLmpzPzBiMTYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoJ3B1bnljb2RlJyk7XG5cbmV4cG9ydHMucGFyc2UgPSB1cmxQYXJzZTtcbmV4cG9ydHMucmVzb2x2ZSA9IHVybFJlc29sdmU7XG5leHBvcnRzLnJlc29sdmVPYmplY3QgPSB1cmxSZXNvbHZlT2JqZWN0O1xuZXhwb3J0cy5mb3JtYXQgPSB1cmxGb3JtYXQ7XG5cbmV4cG9ydHMuVXJsID0gVXJsO1xuXG5mdW5jdGlvbiBVcmwoKSB7XG4gIHRoaXMucHJvdG9jb2wgPSBudWxsO1xuICB0aGlzLnNsYXNoZXMgPSBudWxsO1xuICB0aGlzLmF1dGggPSBudWxsO1xuICB0aGlzLmhvc3QgPSBudWxsO1xuICB0aGlzLnBvcnQgPSBudWxsO1xuICB0aGlzLmhvc3RuYW1lID0gbnVsbDtcbiAgdGhpcy5oYXNoID0gbnVsbDtcbiAgdGhpcy5zZWFyY2ggPSBudWxsO1xuICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgdGhpcy5wYXRobmFtZSA9IG51bGw7XG4gIHRoaXMucGF0aCA9IG51bGw7XG4gIHRoaXMuaHJlZiA9IG51bGw7XG59XG5cbi8vIFJlZmVyZW5jZTogUkZDIDM5ODYsIFJGQyAxODA4LCBSRkMgMjM5NlxuXG4vLyBkZWZpbmUgdGhlc2UgaGVyZSBzbyBhdCBsZWFzdCB0aGV5IG9ubHkgaGF2ZSB0byBiZVxuLy8gY29tcGlsZWQgb25jZSBvbiB0aGUgZmlyc3QgbW9kdWxlIGxvYWQuXG52YXIgcHJvdG9jb2xQYXR0ZXJuID0gL14oW2EtejAtOS4rLV0rOikvaSxcbiAgICBwb3J0UGF0dGVybiA9IC86WzAtOV0qJC8sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyByZXNlcnZlZCBmb3IgZGVsaW1pdGluZyBVUkxzLlxuICAgIC8vIFdlIGFjdHVhbGx5IGp1c3QgYXV0by1lc2NhcGUgdGhlc2UuXG4gICAgZGVsaW1zID0gWyc8JywgJz4nLCAnXCInLCAnYCcsICcgJywgJ1xccicsICdcXG4nLCAnXFx0J10sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyBub3QgYWxsb3dlZCBmb3IgdmFyaW91cyByZWFzb25zLlxuICAgIHVud2lzZSA9IFsneycsICd9JywgJ3wnLCAnXFxcXCcsICdeJywgJ2AnXS5jb25jYXQoZGVsaW1zKSxcblxuICAgIC8vIEFsbG93ZWQgYnkgUkZDcywgYnV0IGNhdXNlIG9mIFhTUyBhdHRhY2tzLiAgQWx3YXlzIGVzY2FwZSB0aGVzZS5cbiAgICBhdXRvRXNjYXBlID0gWydcXCcnXS5jb25jYXQodW53aXNlKSxcbiAgICAvLyBDaGFyYWN0ZXJzIHRoYXQgYXJlIG5ldmVyIGV2ZXIgYWxsb3dlZCBpbiBhIGhvc3RuYW1lLlxuICAgIC8vIE5vdGUgdGhhdCBhbnkgaW52YWxpZCBjaGFycyBhcmUgYWxzbyBoYW5kbGVkLCBidXQgdGhlc2VcbiAgICAvLyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgKmV4cGVjdGVkKiB0byBiZSBzZWVuLCBzbyB3ZSBmYXN0LXBhdGhcbiAgICAvLyB0aGVtLlxuICAgIG5vbkhvc3RDaGFycyA9IFsnJScsICcvJywgJz8nLCAnOycsICcjJ10uY29uY2F0KGF1dG9Fc2NhcGUpLFxuICAgIGhvc3RFbmRpbmdDaGFycyA9IFsnLycsICc/JywgJyMnXSxcbiAgICBob3N0bmFtZU1heExlbiA9IDI1NSxcbiAgICBob3N0bmFtZVBhcnRQYXR0ZXJuID0gL15bYS16MC05QS1aXy1dezAsNjN9JC8sXG4gICAgaG9zdG5hbWVQYXJ0U3RhcnQgPSAvXihbYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBjYW4gYWxsb3cgXCJ1bnNhZmVcIiBhbmQgXCJ1bndpc2VcIiBjaGFycy5cbiAgICB1bnNhZmVQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IG5ldmVyIGhhdmUgYSBob3N0bmFtZS5cbiAgICBob3N0bGVzc1Byb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgYWx3YXlzIGNvbnRhaW4gYSAvLyBiaXQuXG4gICAgc2xhc2hlZFByb3RvY29sID0ge1xuICAgICAgJ2h0dHAnOiB0cnVlLFxuICAgICAgJ2h0dHBzJzogdHJ1ZSxcbiAgICAgICdmdHAnOiB0cnVlLFxuICAgICAgJ2dvcGhlcic6IHRydWUsXG4gICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAnaHR0cDonOiB0cnVlLFxuICAgICAgJ2h0dHBzOic6IHRydWUsXG4gICAgICAnZnRwOic6IHRydWUsXG4gICAgICAnZ29waGVyOic6IHRydWUsXG4gICAgICAnZmlsZTonOiB0cnVlXG4gICAgfSxcbiAgICBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbmZ1bmN0aW9uIHVybFBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKHVybCAmJiBpc09iamVjdCh1cmwpICYmIHVybCBpbnN0YW5jZW9mIFVybCkgcmV0dXJuIHVybDtcblxuICB2YXIgdSA9IG5ldyBVcmw7XG4gIHUucGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCk7XG4gIHJldHVybiB1O1xufVxuXG5VcmwucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24odXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAoIWlzU3RyaW5nKHVybCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCBcIiArIHR5cGVvZiB1cmwpO1xuICB9XG5cbiAgdmFyIHJlc3QgPSB1cmw7XG5cbiAgLy8gdHJpbSBiZWZvcmUgcHJvY2VlZGluZy5cbiAgLy8gVGhpcyBpcyB0byBzdXBwb3J0IHBhcnNlIHN0dWZmIGxpa2UgXCIgIGh0dHA6Ly9mb28uY29tICBcXG5cIlxuICByZXN0ID0gcmVzdC50cmltKCk7XG5cbiAgdmFyIHByb3RvID0gcHJvdG9jb2xQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gIGlmIChwcm90bykge1xuICAgIHByb3RvID0gcHJvdG9bMF07XG4gICAgdmFyIGxvd2VyUHJvdG8gPSBwcm90by50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucHJvdG9jb2wgPSBsb3dlclByb3RvO1xuICAgIHJlc3QgPSByZXN0LnN1YnN0cihwcm90by5sZW5ndGgpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCBpZiBpdCdzIGdvdCBhIGhvc3RcbiAgLy8gdXNlckBzZXJ2ZXIgaXMgKmFsd2F5cyogaW50ZXJwcmV0ZWQgYXMgYSBob3N0bmFtZSwgYW5kIHVybFxuICAvLyByZXNvbHV0aW9uIHdpbGwgdHJlYXQgLy9mb28vYmFyIGFzIGhvc3Q9Zm9vLHBhdGg9YmFyIGJlY2F1c2UgdGhhdCdzXG4gIC8vIGhvdyB0aGUgYnJvd3NlciByZXNvbHZlcyByZWxhdGl2ZSBVUkxzLlxuICBpZiAoc2xhc2hlc0Rlbm90ZUhvc3QgfHwgcHJvdG8gfHwgcmVzdC5tYXRjaCgvXlxcL1xcL1teQFxcL10rQFteQFxcL10rLykpIHtcbiAgICB2YXIgc2xhc2hlcyA9IHJlc3Quc3Vic3RyKDAsIDIpID09PSAnLy8nO1xuICAgIGlmIChzbGFzaGVzICYmICEocHJvdG8gJiYgaG9zdGxlc3NQcm90b2NvbFtwcm90b10pKSB7XG4gICAgICByZXN0ID0gcmVzdC5zdWJzdHIoMik7XG4gICAgICB0aGlzLnNsYXNoZXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaG9zdGxlc3NQcm90b2NvbFtwcm90b10gJiZcbiAgICAgIChzbGFzaGVzIHx8IChwcm90byAmJiAhc2xhc2hlZFByb3RvY29sW3Byb3RvXSkpKSB7XG5cbiAgICAvLyB0aGVyZSdzIGEgaG9zdG5hbWUuXG4gICAgLy8gdGhlIGZpcnN0IGluc3RhbmNlIG9mIC8sID8sIDssIG9yICMgZW5kcyB0aGUgaG9zdC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGlzIGFuIEAgaW4gdGhlIGhvc3RuYW1lLCB0aGVuIG5vbi1ob3N0IGNoYXJzICphcmUqIGFsbG93ZWRcbiAgICAvLyB0byB0aGUgbGVmdCBvZiB0aGUgbGFzdCBAIHNpZ24sIHVubGVzcyBzb21lIGhvc3QtZW5kaW5nIGNoYXJhY3RlclxuICAgIC8vIGNvbWVzICpiZWZvcmUqIHRoZSBALXNpZ24uXG4gICAgLy8gVVJMcyBhcmUgb2Jub3hpb3VzLlxuICAgIC8vXG4gICAgLy8gZXg6XG4gICAgLy8gaHR0cDovL2FAYkBjLyA9PiB1c2VyOmFAYiBob3N0OmNcbiAgICAvLyBodHRwOi8vYUBiP0BjID0+IHVzZXI6YSBob3N0OmMgcGF0aDovP0BjXG5cbiAgICAvLyB2MC4xMiBUT0RPKGlzYWFjcyk6IFRoaXMgaXMgbm90IHF1aXRlIGhvdyBDaHJvbWUgZG9lcyB0aGluZ3MuXG4gICAgLy8gUmV2aWV3IG91ciB0ZXN0IGNhc2UgYWdhaW5zdCBicm93c2VycyBtb3JlIGNvbXByZWhlbnNpdmVseS5cblxuICAgIC8vIGZpbmQgdGhlIGZpcnN0IGluc3RhbmNlIG9mIGFueSBob3N0RW5kaW5nQ2hhcnNcbiAgICB2YXIgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9zdEVuZGluZ0NoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKGhvc3RFbmRpbmdDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgZWl0aGVyIHdlIGhhdmUgYW4gZXhwbGljaXQgcG9pbnQgd2hlcmUgdGhlXG4gICAgLy8gYXV0aCBwb3J0aW9uIGNhbm5vdCBnbyBwYXN0LCBvciB0aGUgbGFzdCBAIGNoYXIgaXMgdGhlIGRlY2lkZXIuXG4gICAgdmFyIGF1dGgsIGF0U2lnbjtcbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIGF0U2lnbiBjYW4gYmUgYW55d2hlcmUuXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGF0U2lnbiBtdXN0IGJlIGluIGF1dGggcG9ydGlvbi5cbiAgICAgIC8vIGh0dHA6Ly9hQGIvY0BkID0+IGhvc3Q6YiBhdXRoOmEgcGF0aDovY0BkXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJywgaG9zdEVuZCk7XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGhhdmUgYSBwb3J0aW9uIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGF1dGguXG4gICAgLy8gUHVsbCB0aGF0IG9mZi5cbiAgICBpZiAoYXRTaWduICE9PSAtMSkge1xuICAgICAgYXV0aCA9IHJlc3Quc2xpY2UoMCwgYXRTaWduKTtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKGF0U2lnbiArIDEpO1xuICAgICAgdGhpcy5hdXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIH1cblxuICAgIC8vIHRoZSBob3N0IGlzIHRoZSByZW1haW5pbmcgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IG5vbi1ob3N0IGNoYXJcbiAgICBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub25Ib3N0Q2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2Yobm9uSG9zdENoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG4gICAgLy8gaWYgd2Ugc3RpbGwgaGF2ZSBub3QgaGl0IGl0LCB0aGVuIHRoZSBlbnRpcmUgdGhpbmcgaXMgYSBob3N0LlxuICAgIGlmIChob3N0RW5kID09PSAtMSlcbiAgICAgIGhvc3RFbmQgPSByZXN0Lmxlbmd0aDtcblxuICAgIHRoaXMuaG9zdCA9IHJlc3Quc2xpY2UoMCwgaG9zdEVuZCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoaG9zdEVuZCk7XG5cbiAgICAvLyBwdWxsIG91dCBwb3J0LlxuICAgIHRoaXMucGFyc2VIb3N0KCk7XG5cbiAgICAvLyB3ZSd2ZSBpbmRpY2F0ZWQgdGhhdCB0aGVyZSBpcyBhIGhvc3RuYW1lLFxuICAgIC8vIHNvIGV2ZW4gaWYgaXQncyBlbXB0eSwgaXQgaGFzIHRvIGJlIHByZXNlbnQuXG4gICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG5cbiAgICAvLyBpZiBob3N0bmFtZSBiZWdpbnMgd2l0aCBbIGFuZCBlbmRzIHdpdGggXVxuICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYW4gSVB2NiBhZGRyZXNzLlxuICAgIHZhciBpcHY2SG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lWzBdID09PSAnWycgJiZcbiAgICAgICAgdGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDFdID09PSAnXSc7XG5cbiAgICAvLyB2YWxpZGF0ZSBhIGxpdHRsZS5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgdmFyIGhvc3RwYXJ0cyA9IHRoaXMuaG9zdG5hbWUuc3BsaXQoL1xcLi8pO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBob3N0cGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gaG9zdHBhcnRzW2ldO1xuICAgICAgICBpZiAoIXBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIXBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICB2YXIgbmV3cGFydCA9ICcnO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwLCBrID0gcGFydC5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LmNoYXJDb2RlQXQoaikgPiAxMjcpIHtcbiAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBub24tQVNDSUkgY2hhciB3aXRoIGEgdGVtcG9yYXJ5IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdGhpcyB0byBtYWtlIHN1cmUgc2l6ZSBvZiBob3N0bmFtZSBpcyBub3RcbiAgICAgICAgICAgICAgLy8gYnJva2VuIGJ5IHJlcGxhY2luZyBub24tQVNDSUkgYnkgbm90aGluZ1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9ICd4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gcGFydFtqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2UgdGVzdCBhZ2FpbiB3aXRoIEFTQ0lJIGNoYXIgb25seVxuICAgICAgICAgIGlmICghbmV3cGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgICAgdmFyIHZhbGlkUGFydHMgPSBob3N0cGFydHMuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICB2YXIgbm90SG9zdCA9IGhvc3RwYXJ0cy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICB2YXIgYml0ID0gcGFydC5tYXRjaChob3N0bmFtZVBhcnRTdGFydCk7XG4gICAgICAgICAgICBpZiAoYml0KSB7XG4gICAgICAgICAgICAgIHZhbGlkUGFydHMucHVzaChiaXRbMV0pO1xuICAgICAgICAgICAgICBub3RIb3N0LnVuc2hpZnQoYml0WzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3RIb3N0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXN0ID0gJy8nICsgbm90SG9zdC5qb2luKCcuJykgKyByZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSA9IHZhbGlkUGFydHMuam9pbignLicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaG9zdG5hbWUubGVuZ3RoID4gaG9zdG5hbWVNYXhMZW4pIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaG9zdG5hbWVzIGFyZSBhbHdheXMgbG93ZXIgY2FzZS5cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIC8vIElETkEgU3VwcG9ydDogUmV0dXJucyBhIHB1bnkgY29kZWQgcmVwcmVzZW50YXRpb24gb2YgXCJkb21haW5cIi5cbiAgICAgIC8vIEl0IG9ubHkgY29udmVydHMgdGhlIHBhcnQgb2YgdGhlIGRvbWFpbiBuYW1lIHRoYXRcbiAgICAgIC8vIGhhcyBub24gQVNDSUkgY2hhcmFjdGVycy4gSS5lLiBpdCBkb3NlbnQgbWF0dGVyIGlmXG4gICAgICAvLyB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQgYWxyZWFkeSBpcyBpbiBBU0NJSS5cbiAgICAgIHZhciBkb21haW5BcnJheSA9IHRoaXMuaG9zdG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgIHZhciBuZXdPdXQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9tYWluQXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHMgPSBkb21haW5BcnJheVtpXTtcbiAgICAgICAgbmV3T3V0LnB1c2gocy5tYXRjaCgvW15BLVphLXowLTlfLV0vKSA/XG4gICAgICAgICAgICAneG4tLScgKyBwdW55Y29kZS5lbmNvZGUocykgOiBzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSBuZXdPdXQuam9pbignLicpO1xuICAgIH1cblxuICAgIHZhciBwID0gdGhpcy5wb3J0ID8gJzonICsgdGhpcy5wb3J0IDogJyc7XG4gICAgdmFyIGggPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuICAgIHRoaXMuaG9zdCA9IGggKyBwO1xuICAgIHRoaXMuaHJlZiArPSB0aGlzLmhvc3Q7XG5cbiAgICAvLyBzdHJpcCBbIGFuZCBdIGZyb20gdGhlIGhvc3RuYW1lXG4gICAgLy8gdGhlIGhvc3QgZmllbGQgc3RpbGwgcmV0YWlucyB0aGVtLCB0aG91Z2hcbiAgICBpZiAoaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS5zdWJzdHIoMSwgdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIGlmIChyZXN0WzBdICE9PSAnLycpIHtcbiAgICAgICAgcmVzdCA9ICcvJyArIHJlc3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbm93IHJlc3QgaXMgc2V0IHRvIHRoZSBwb3N0LWhvc3Qgc3R1ZmYuXG4gIC8vIGNob3Agb2ZmIGFueSBkZWxpbSBjaGFycy5cbiAgaWYgKCF1bnNhZmVQcm90b2NvbFtsb3dlclByb3RvXSkge1xuXG4gICAgLy8gRmlyc3QsIG1ha2UgMTAwJSBzdXJlIHRoYXQgYW55IFwiYXV0b0VzY2FwZVwiIGNoYXJzIGdldFxuICAgIC8vIGVzY2FwZWQsIGV2ZW4gaWYgZW5jb2RlVVJJQ29tcG9uZW50IGRvZXNuJ3QgdGhpbmsgdGhleVxuICAgIC8vIG5lZWQgdG8gYmUuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdXRvRXNjYXBlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGFlID0gYXV0b0VzY2FwZVtpXTtcbiAgICAgIHZhciBlc2MgPSBlbmNvZGVVUklDb21wb25lbnQoYWUpO1xuICAgICAgaWYgKGVzYyA9PT0gYWUpIHtcbiAgICAgICAgZXNjID0gZXNjYXBlKGFlKTtcbiAgICAgIH1cbiAgICAgIHJlc3QgPSByZXN0LnNwbGl0KGFlKS5qb2luKGVzYyk7XG4gICAgfVxuICB9XG5cblxuICAvLyBjaG9wIG9mZiBmcm9tIHRoZSB0YWlsIGZpcnN0LlxuICB2YXIgaGFzaCA9IHJlc3QuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaCAhPT0gLTEpIHtcbiAgICAvLyBnb3QgYSBmcmFnbWVudCBzdHJpbmcuXG4gICAgdGhpcy5oYXNoID0gcmVzdC5zdWJzdHIoaGFzaCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgaGFzaCk7XG4gIH1cbiAgdmFyIHFtID0gcmVzdC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxbSAhPT0gLTEpIHtcbiAgICB0aGlzLnNlYXJjaCA9IHJlc3Quc3Vic3RyKHFtKTtcbiAgICB0aGlzLnF1ZXJ5ID0gcmVzdC5zdWJzdHIocW0gKyAxKTtcbiAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucXVlcnkpO1xuICAgIH1cbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBxbSk7XG4gIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgIC8vIG5vIHF1ZXJ5IHN0cmluZywgYnV0IHBhcnNlUXVlcnlTdHJpbmcgc3RpbGwgcmVxdWVzdGVkXG4gICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLnF1ZXJ5ID0ge307XG4gIH1cbiAgaWYgKHJlc3QpIHRoaXMucGF0aG5hbWUgPSByZXN0O1xuICBpZiAoc2xhc2hlZFByb3RvY29sW2xvd2VyUHJvdG9dICYmXG4gICAgICB0aGlzLmhvc3RuYW1lICYmICF0aGlzLnBhdGhuYW1lKSB7XG4gICAgdGhpcy5wYXRobmFtZSA9ICcvJztcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgaWYgKHRoaXMucGF0aG5hbWUgfHwgdGhpcy5zZWFyY2gpIHtcbiAgICB2YXIgcCA9IHRoaXMucGF0aG5hbWUgfHwgJyc7XG4gICAgdmFyIHMgPSB0aGlzLnNlYXJjaCB8fCAnJztcbiAgICB0aGlzLnBhdGggPSBwICsgcztcbiAgfVxuXG4gIC8vIGZpbmFsbHksIHJlY29uc3RydWN0IHRoZSBocmVmIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICB0aGlzLmhyZWYgPSB0aGlzLmZvcm1hdCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGZvcm1hdCBhIHBhcnNlZCBvYmplY3QgaW50byBhIHVybCBzdHJpbmdcbmZ1bmN0aW9uIHVybEZvcm1hdChvYmopIHtcbiAgLy8gZW5zdXJlIGl0J3MgYW4gb2JqZWN0LCBhbmQgbm90IGEgc3RyaW5nIHVybC5cbiAgLy8gSWYgaXQncyBhbiBvYmosIHRoaXMgaXMgYSBuby1vcC5cbiAgLy8gdGhpcyB3YXksIHlvdSBjYW4gY2FsbCB1cmxfZm9ybWF0KCkgb24gc3RyaW5nc1xuICAvLyB0byBjbGVhbiB1cCBwb3RlbnRpYWxseSB3b25reSB1cmxzLlxuICBpZiAoaXNTdHJpbmcob2JqKSkgb2JqID0gdXJsUGFyc2Uob2JqKTtcbiAgaWYgKCEob2JqIGluc3RhbmNlb2YgVXJsKSkgcmV0dXJuIFVybC5wcm90b3R5cGUuZm9ybWF0LmNhbGwob2JqKTtcbiAgcmV0dXJuIG9iai5mb3JtYXQoKTtcbn1cblxuVXJsLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGF1dGggPSB0aGlzLmF1dGggfHwgJyc7XG4gIGlmIChhdXRoKSB7XG4gICAgYXV0aCA9IGVuY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICBhdXRoID0gYXV0aC5yZXBsYWNlKC8lM0EvaSwgJzonKTtcbiAgICBhdXRoICs9ICdAJztcbiAgfVxuXG4gIHZhciBwcm90b2NvbCA9IHRoaXMucHJvdG9jb2wgfHwgJycsXG4gICAgICBwYXRobmFtZSA9IHRoaXMucGF0aG5hbWUgfHwgJycsXG4gICAgICBoYXNoID0gdGhpcy5oYXNoIHx8ICcnLFxuICAgICAgaG9zdCA9IGZhbHNlLFxuICAgICAgcXVlcnkgPSAnJztcblxuICBpZiAodGhpcy5ob3N0KSB7XG4gICAgaG9zdCA9IGF1dGggKyB0aGlzLmhvc3Q7XG4gIH0gZWxzZSBpZiAodGhpcy5ob3N0bmFtZSkge1xuICAgIGhvc3QgPSBhdXRoICsgKHRoaXMuaG9zdG5hbWUuaW5kZXhPZignOicpID09PSAtMSA/XG4gICAgICAgIHRoaXMuaG9zdG5hbWUgOlxuICAgICAgICAnWycgKyB0aGlzLmhvc3RuYW1lICsgJ10nKTtcbiAgICBpZiAodGhpcy5wb3J0KSB7XG4gICAgICBob3N0ICs9ICc6JyArIHRoaXMucG9ydDtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5xdWVyeSAmJlxuICAgICAgaXNPYmplY3QodGhpcy5xdWVyeSkgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCkge1xuICAgIHF1ZXJ5ID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHRoaXMucXVlcnkpO1xuICB9XG5cbiAgdmFyIHNlYXJjaCA9IHRoaXMuc2VhcmNoIHx8IChxdWVyeSAmJiAoJz8nICsgcXVlcnkpKSB8fCAnJztcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuc3Vic3RyKC0xKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgLy8gb25seSB0aGUgc2xhc2hlZFByb3RvY29scyBnZXQgdGhlIC8vLiAgTm90IG1haWx0bzosIHhtcHA6LCBldGMuXG4gIC8vIHVubGVzcyB0aGV5IGhhZCB0aGVtIHRvIGJlZ2luIHdpdGguXG4gIGlmICh0aGlzLnNsYXNoZXMgfHxcbiAgICAgICghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29sW3Byb3RvY29sXSkgJiYgaG9zdCAhPT0gZmFsc2UpIHtcbiAgICBob3N0ID0gJy8vJyArIChob3N0IHx8ICcnKTtcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWU7XG4gIH0gZWxzZSBpZiAoIWhvc3QpIHtcbiAgICBob3N0ID0gJyc7XG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaDtcbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2guY2hhckF0KDApICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaDtcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG1hdGNoKTtcbiAgfSk7XG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpO1xuXG4gIHJldHVybiBwcm90b2NvbCArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlKHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmUocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICByZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KHVybFBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSkpLmZvcm1hdCgpO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZU9iamVjdChzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIGlmICghc291cmNlKSByZXR1cm4gcmVsYXRpdmU7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlT2JqZWN0KHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgaWYgKGlzU3RyaW5nKHJlbGF0aXZlKSkge1xuICAgIHZhciByZWwgPSBuZXcgVXJsKCk7XG4gICAgcmVsLnBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVsYXRpdmUgPSByZWw7XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gbmV3IFVybCgpO1xuICBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICByZXN1bHRba10gPSB0aGlzW2tdO1xuICB9LCB0aGlzKTtcblxuICAvLyBoYXNoIGlzIGFsd2F5cyBvdmVycmlkZGVuLCBubyBtYXR0ZXIgd2hhdC5cbiAgLy8gZXZlbiBocmVmPVwiXCIgd2lsbCByZW1vdmUgaXQuXG4gIHJlc3VsdC5oYXNoID0gcmVsYXRpdmUuaGFzaDtcblxuICAvLyBpZiB0aGUgcmVsYXRpdmUgdXJsIGlzIGVtcHR5LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvIGhlcmUuXG4gIGlmIChyZWxhdGl2ZS5ocmVmID09PSAnJykge1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBocmVmcyBsaWtlIC8vZm9vL2JhciBhbHdheXMgY3V0IHRvIHRoZSBwcm90b2NvbC5cbiAgaWYgKHJlbGF0aXZlLnNsYXNoZXMgJiYgIXJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgLy8gdGFrZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgcHJvdG9jb2wgZnJvbSByZWxhdGl2ZVxuICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgIGlmIChrICE9PSAncHJvdG9jb2wnKVxuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICB9KTtcblxuICAgIC8vdXJsUGFyc2UgYXBwZW5kcyB0cmFpbGluZyAvIHRvIHVybHMgbGlrZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tXG4gICAgaWYgKHNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdICYmXG4gICAgICAgIHJlc3VsdC5ob3N0bmFtZSAmJiAhcmVzdWx0LnBhdGhuYW1lKSB7XG4gICAgICByZXN1bHQucGF0aCA9IHJlc3VsdC5wYXRobmFtZSA9ICcvJztcbiAgICB9XG5cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKHJlbGF0aXZlLnByb3RvY29sICYmIHJlbGF0aXZlLnByb3RvY29sICE9PSByZXN1bHQucHJvdG9jb2wpIHtcbiAgICAvLyBpZiBpdCdzIGEga25vd24gdXJsIHByb3RvY29sLCB0aGVuIGNoYW5naW5nXG4gICAgLy8gdGhlIHByb3RvY29sIGRvZXMgd2VpcmQgdGhpbmdzXG4gICAgLy8gZmlyc3QsIGlmIGl0J3Mgbm90IGZpbGU6LCB0aGVuIHdlIE1VU1QgaGF2ZSBhIGhvc3QsXG4gICAgLy8gYW5kIGlmIHRoZXJlIHdhcyBhIHBhdGhcbiAgICAvLyB0byBiZWdpbiB3aXRoLCB0aGVuIHdlIE1VU1QgaGF2ZSBhIHBhdGguXG4gICAgLy8gaWYgaXQgaXMgZmlsZTosIHRoZW4gdGhlIGhvc3QgaXMgZHJvcHBlZCxcbiAgICAvLyBiZWNhdXNlIHRoYXQncyBrbm93biB0byBiZSBob3N0bGVzcy5cbiAgICAvLyBhbnl0aGluZyBlbHNlIGlzIGFzc3VtZWQgdG8gYmUgYWJzb2x1dGUuXG4gICAgaWYgKCFzbGFzaGVkUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgICAgfSk7XG4gICAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0LnByb3RvY29sID0gcmVsYXRpdmUucHJvdG9jb2w7XG4gICAgaWYgKCFyZWxhdGl2ZS5ob3N0ICYmICFob3N0bGVzc1Byb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIHJlbFBhdGggPSAocmVsYXRpdmUucGF0aG5hbWUgfHwgJycpLnNwbGl0KCcvJyk7XG4gICAgICB3aGlsZSAocmVsUGF0aC5sZW5ndGggJiYgIShyZWxhdGl2ZS5ob3N0ID0gcmVsUGF0aC5zaGlmdCgpKSk7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3QpIHJlbGF0aXZlLmhvc3QgPSAnJztcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdG5hbWUpIHJlbGF0aXZlLmhvc3RuYW1lID0gJyc7XG4gICAgICBpZiAocmVsUGF0aFswXSAhPT0gJycpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICBpZiAocmVsUGF0aC5sZW5ndGggPCAyKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsUGF0aC5qb2luKCcvJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbGF0aXZlLnBhdGhuYW1lO1xuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHJlc3VsdC5ob3N0ID0gcmVsYXRpdmUuaG9zdCB8fCAnJztcbiAgICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGg7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdDtcbiAgICByZXN1bHQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgLy8gdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnBhdGhuYW1lIHx8IHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHZhciBwID0gcmVzdWx0LnBhdGhuYW1lIHx8ICcnO1xuICAgICAgdmFyIHMgPSByZXN1bHQuc2VhcmNoIHx8ICcnO1xuICAgICAgcmVzdWx0LnBhdGggPSBwICsgcztcbiAgICB9XG4gICAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgaXNTb3VyY2VBYnMgPSAocmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJyksXG4gICAgICBpc1JlbEFicyA9IChcbiAgICAgICAgICByZWxhdGl2ZS5ob3N0IHx8XG4gICAgICAgICAgcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLydcbiAgICAgICksXG4gICAgICBtdXN0RW5kQWJzID0gKGlzUmVsQWJzIHx8IGlzU291cmNlQWJzIHx8XG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuaG9zdCAmJiByZWxhdGl2ZS5wYXRobmFtZSkpLFxuICAgICAgcmVtb3ZlQWxsRG90cyA9IG11c3RFbmRBYnMsXG4gICAgICBzcmNQYXRoID0gcmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcmVsUGF0aCA9IHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICBwc3ljaG90aWMgPSByZXN1bHQucHJvdG9jb2wgJiYgIXNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdO1xuXG4gIC8vIGlmIHRoZSB1cmwgaXMgYSBub24tc2xhc2hlZCB1cmwsIHRoZW4gcmVsYXRpdmVcbiAgLy8gbGlua3MgbGlrZSAuLi8uLiBzaG91bGQgYmUgYWJsZVxuICAvLyB0byBjcmF3bCB1cCB0byB0aGUgaG9zdG5hbWUsIGFzIHdlbGwuICBUaGlzIGlzIHN0cmFuZ2UuXG4gIC8vIHJlc3VsdC5wcm90b2NvbCBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSBub3cuXG4gIC8vIExhdGVyIG9uLCBwdXQgdGhlIGZpcnN0IHBhdGggcGFydCBpbnRvIHRoZSBob3N0IGZpZWxkLlxuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gJyc7XG4gICAgcmVzdWx0LnBvcnQgPSBudWxsO1xuICAgIGlmIChyZXN1bHQuaG9zdCkge1xuICAgICAgaWYgKHNyY1BhdGhbMF0gPT09ICcnKSBzcmNQYXRoWzBdID0gcmVzdWx0Lmhvc3Q7XG4gICAgICBlbHNlIHNyY1BhdGgudW5zaGlmdChyZXN1bHQuaG9zdCk7XG4gICAgfVxuICAgIHJlc3VsdC5ob3N0ID0gJyc7XG4gICAgaWYgKHJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgICByZWxhdGl2ZS5ob3N0bmFtZSA9IG51bGw7XG4gICAgICByZWxhdGl2ZS5wb3J0ID0gbnVsbDtcbiAgICAgIGlmIChyZWxhdGl2ZS5ob3N0KSB7XG4gICAgICAgIGlmIChyZWxQYXRoWzBdID09PSAnJykgcmVsUGF0aFswXSA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgIGVsc2UgcmVsUGF0aC51bnNoaWZ0KHJlbGF0aXZlLmhvc3QpO1xuICAgICAgfVxuICAgICAgcmVsYXRpdmUuaG9zdCA9IG51bGw7XG4gICAgfVxuICAgIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzICYmIChyZWxQYXRoWzBdID09PSAnJyB8fCBzcmNQYXRoWzBdID09PSAnJyk7XG4gIH1cblxuICBpZiAoaXNSZWxBYnMpIHtcbiAgICAvLyBpdCdzIGFic29sdXRlLlxuICAgIHJlc3VsdC5ob3N0ID0gKHJlbGF0aXZlLmhvc3QgfHwgcmVsYXRpdmUuaG9zdCA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3QgOiByZXN1bHQuaG9zdDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAocmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdG5hbWUgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgOiByZXN1bHQuaG9zdG5hbWU7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICBzcmNQYXRoID0gcmVsUGF0aDtcbiAgICAvLyBmYWxsIHRocm91Z2ggdG8gdGhlIGRvdC1oYW5kbGluZyBiZWxvdy5cbiAgfSBlbHNlIGlmIChyZWxQYXRoLmxlbmd0aCkge1xuICAgIC8vIGl0J3MgcmVsYXRpdmVcbiAgICAvLyB0aHJvdyBhd2F5IHRoZSBleGlzdGluZyBmaWxlLCBhbmQgdGFrZSB0aGUgbmV3IHBhdGggaW5zdGVhZC5cbiAgICBpZiAoIXNyY1BhdGgpIHNyY1BhdGggPSBbXTtcbiAgICBzcmNQYXRoLnBvcCgpO1xuICAgIHNyY1BhdGggPSBzcmNQYXRoLmNvbmNhdChyZWxQYXRoKTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICB9IGVsc2UgaWYgKCFpc051bGxPclVuZGVmaW5lZChyZWxhdGl2ZS5zZWFyY2gpKSB7XG4gICAgLy8ganVzdCBwdWxsIG91dCB0aGUgc2VhcmNoLlxuICAgIC8vIGxpa2UgaHJlZj0nP2ZvbycuXG4gICAgLy8gUHV0IHRoaXMgYWZ0ZXIgdGhlIG90aGVyIHR3byBjYXNlcyBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGJvb2xlYW5zXG4gICAgaWYgKHBzeWNob3RpYykge1xuICAgICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBzcmNQYXRoLnNoaWZ0KCk7XG4gICAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgICAvL3RoaXMgZXNwZWNpYWx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKCFpc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgLy8gbm8gcGF0aCBhdCBhbGwuICBlYXN5LlxuICAgIC8vIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgb3RoZXIgc3R1ZmYgYWJvdmUuXG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gJy8nICsgcmVzdWx0LnNlYXJjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaWYgYSB1cmwgRU5EcyBpbiAuIG9yIC4uLCB0aGVuIGl0IG11c3QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIC8vIGhvd2V2ZXIsIGlmIGl0IGVuZHMgaW4gYW55dGhpbmcgZWxzZSBub24tc2xhc2h5LFxuICAvLyB0aGVuIGl0IG11c3QgTk9UIGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICB2YXIgbGFzdCA9IHNyY1BhdGguc2xpY2UoLTEpWzBdO1xuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IChcbiAgICAgIChyZXN1bHQuaG9zdCB8fCByZWxhdGl2ZS5ob3N0KSAmJiAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHx8XG4gICAgICBsYXN0ID09PSAnJyk7XG5cbiAgLy8gc3RyaXAgc2luZ2xlIGRvdHMsIHJlc29sdmUgZG91YmxlIGRvdHMgdG8gcGFyZW50IGRpclxuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gc3JjUGF0aC5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGFzdCA9IHNyY1BhdGhbaV07XG4gICAgaWYgKGxhc3QgPT0gJy4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoIW11c3RFbmRBYnMgJiYgIXJlbW92ZUFsbERvdHMpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHNyY1BhdGgudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobXVzdEVuZEFicyAmJiBzcmNQYXRoWzBdICE9PSAnJyAmJlxuICAgICAgKCFzcmNQYXRoWzBdIHx8IHNyY1BhdGhbMF0uY2hhckF0KDApICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmIChoYXNUcmFpbGluZ1NsYXNoICYmIChzcmNQYXRoLmpvaW4oJy8nKS5zdWJzdHIoLTEpICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC5wdXNoKCcnKTtcbiAgfVxuXG4gIHZhciBpc0Fic29sdXRlID0gc3JjUGF0aFswXSA9PT0gJycgfHxcbiAgICAgIChzcmNQYXRoWzBdICYmIHNyY1BhdGhbMF0uY2hhckF0KDApID09PSAnLycpO1xuXG4gIC8vIHB1dCB0aGUgaG9zdCBiYWNrXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IGlzQWJzb2x1dGUgPyAnJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQYXRoLmxlbmd0aCA/IHNyY1BhdGguc2hpZnQoKSA6ICcnO1xuICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAvL3RoaXMgZXNwZWNpYWx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICB9XG4gIH1cblxuICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyB8fCAocmVzdWx0Lmhvc3QgJiYgc3JjUGF0aC5sZW5ndGgpO1xuXG4gIGlmIChtdXN0RW5kQWJzICYmICFpc0Fic29sdXRlKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBzcmNQYXRoLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCByZXF1ZXN0Lmh0dHBcbiAgaWYgKCFpc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgfVxuICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGggfHwgcmVzdWx0LmF1dGg7XG4gIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5VcmwucHJvdG90eXBlLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgdmFyIHBvcnQgPSBwb3J0UGF0dGVybi5leGVjKGhvc3QpO1xuICBpZiAocG9ydCkge1xuICAgIHBvcnQgPSBwb3J0WzBdO1xuICAgIGlmIChwb3J0ICE9PSAnOicpIHtcbiAgICAgIHRoaXMucG9ydCA9IHBvcnQuc3Vic3RyKDEpO1xuICAgIH1cbiAgICBob3N0ID0gaG9zdC5zdWJzdHIoMCwgaG9zdC5sZW5ndGggLSBwb3J0Lmxlbmd0aCk7XG4gIH1cbiAgaWYgKGhvc3QpIHRoaXMuaG9zdG5hbWUgPSBob3N0O1xufTtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiAgYXJnID09IG51bGw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/url/url.js\n"); /***/ }), /***/ "?99b8": /*!********************!*\ !*** fs (ignored) ***! \********************/ /***/ (() => { /* (ignored) */ /***/ }), /***/ "?aca8": /*!**********************!*\ !*** http (ignored) ***! \**********************/ /***/ (() => { /* (ignored) */ /***/ }), /***/ "?8571": /*!***********************!*\ !*** https (ignored) ***! \***********************/ /***/ (() => { /* (ignored) */ /***/ }), /***/ "?d497": /*!**********************!*\ !*** zlib (ignored) ***! \**********************/ /***/ (() => { /* (ignored) */ /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ id: moduleId, /******/ loaded: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/global */ /******/ (() => { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/node module decorator */ /******/ (() => { /******/ __webpack_require__.nmd = (module) => { /******/ module.paths = []; /******/ if (!module.children) module.children = []; /******/ return module; /******/ }; /******/ })(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval-source-map devtool is used. /******/ var __webpack_exports__ = __webpack_require__("./src/file-loaders/workers/MainWorker-web.js"); /******/ LMV = __webpack_exports__; /******/ /******/ })() ;